32 lines
		
	
	
		
			906 B
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			32 lines
		
	
	
		
			906 B
		
	
	
	
		
			Factor
		
	
	
! Copyright (C) 2010 Maximilian Lupke.
 | 
						|
! See http://factorcode.org/license.txt for BSD license.
 | 
						|
USING: arrays ascii kernel math.order math.parser sequences splitting
 | 
						|
;
 | 
						|
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 ;
 | 
						|
 | 
						|
: version<=> ( version1 version2 -- <=> )
 | 
						|
    [ split-version ] bi@ drop-prefix
 | 
						|
    2dup [ length 0 = ] either?
 | 
						|
    [ [ length ] bi@ >=< ] [ [ first ] compare ] if ;
 | 
						|
 | 
						|
: 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+ = ;
 |