| 
									
										
										
										
											2010-02-22 14:53:29 -05:00
										 |  |  | ! Copyright (C) 2010 Maximilian Lupke. | 
					
						
							|  |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							| 
									
										
										
										
											2010-02-22 15:51:29 -05:00
										 |  |  | USING: arrays ascii kernel math.order math.parser sequences splitting | 
					
						
							|  |  |  | ;
 | 
					
						
							| 
									
										
										
										
											2010-02-22 14:53:29 -05:00
										 |  |  | IN: semantic-versioning | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : split-version ( string -- array )
 | 
					
						
							|  |  |  |     "." split first3 dup [ digit? not ] find
 | 
					
						
							|  |  |  |     [ cut [ [ string>number ] tri@ ] dip 4array ] | 
					
						
							|  |  |  |     [ drop [ string>number ] tri@ 3array ] | 
					
						
							|  |  |  |     if ;
 | 
					
						
							| 
									
										
										
										
											2010-02-22 15:23:43 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | : version<=> ( version1 version2 -- <=> )
 | 
					
						
							| 
									
										
										
										
											2010-02-22 15:51:29 -05:00
										 |  |  |     [ split-version ] bi@ drop-prefix
 | 
					
						
							|  |  |  |     2dup [ length 0 = ] either?
 | 
					
						
							| 
									
										
										
										
											2011-10-14 15:31:06 -04:00
										 |  |  |     [ [ length ] bi@ >=< ] [ [ first ] compare ] if ;
 | 
					
						
							| 
									
										
										
										
											2010-02-22 15:29:37 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | : version< ( version1 version2 -- ? )
 | 
					
						
							|  |  |  |     version<=> +lt+ = ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : version<= ( version1 version2 -- ? )
 | 
					
						
							|  |  |  |     version<=> [ +lt+ = ] [ +eq+ = ] either? ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : version= ( version1 version2 -- ? )
 | 
					
						
							|  |  |  |     version<=> +eq+ = ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : version>= ( version1 version2 -- ? )
 | 
					
						
							|  |  |  |     version<=> [ +gt+ = ] [ +eq+ = ] either? ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : version> ( version1 version2 -- ? )
 | 
					
						
							|  |  |  |     version<=> +gt+ = ;
 |