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:23:43 -05:00
|
|
|
USING: arrays ascii combinators 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
|
|
|
|
|
|
|
! okay, not beautiful
|
|
|
|
: version<=> ( version1 version2 -- <=> )
|
|
|
|
[ split-version ] bi@
|
|
|
|
{
|
|
|
|
{ [ [ unclip ] bi@ swapd <=> dup +eq+ = not ] [ 2nip ] }
|
|
|
|
{ [ drop [ unclip ] bi@ swapd <=> dup +eq+ = not ] [ 2nip ] }
|
|
|
|
{ [ drop [ unclip ] bi@ swapd <=> dup +eq+ = not ] [ 2nip ] }
|
|
|
|
{ [ drop 2dup [ length ] bi@ >=< dup +eq+ = not ] [ 2nip ] }
|
|
|
|
[ drop [ first ] bi@ <=> ]
|
|
|
|
} cond ;
|
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+ = ;
|