45 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Factor
		
	
	
! Copyright (C) 2010 Maximilian Lupke.
 | 
						|
! See http://factorcode.org/license.txt for BSD license.
 | 
						|
USING: arrays ascii kernel math math.order math.parser sequences
 | 
						|
sorting.human splitting ;
 | 
						|
IN: semantic-versioning
 | 
						|
 | 
						|
<PRIVATE
 | 
						|
 | 
						|
: number<=> ( obj1 obj2 -- <=> )
 | 
						|
    [ [ zero? ] trim-tail-slice ] bi@ <=> ;
 | 
						|
 | 
						|
: pre-release<=> ( obj1 obj2 -- <=> )
 | 
						|
    2dup [ empty? ] either?
 | 
						|
    [ [ length ] bi@ >=< ] [ human<=> ] if ;
 | 
						|
 | 
						|
PRIVATE>
 | 
						|
 | 
						|
: split-version ( string -- array )
 | 
						|
    "+" split1 [
 | 
						|
        dup [ [ digit? not ] [ CHAR: . = not ] bi and ] find [
 | 
						|
            [ cut ] [ CHAR: - = [ rest [ f ] when-empty ] when ] bi*
 | 
						|
        ] [ drop f ] if*
 | 
						|
        [ "." split [ string>number 0 or ] map 3 0 pad-tail ] dip
 | 
						|
    ] dip 3array ;
 | 
						|
 | 
						|
: version<=> ( version1 version2 -- <=> )
 | 
						|
    [ split-version ] bi@
 | 
						|
    2dup [ first ] bi@ number<=> dup +eq+ =
 | 
						|
    [ drop [ second ] bi@ pre-release<=> ] [ 2nip ] 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+ = ;
 |