packages feed

atomo-0.2: prelude/version.atomo

Version = Object clone

(major: Integer) . (minor: Integer) :=
  Version clone do:
    { major = major
      minor = minor
    }

(major: Integer) . (rest: Version) :=
  Version clone do:
    { major = major
      minor = rest
    }

(v: Version) show :=
  v major show .. " . " .. v minor show

(v: Version) as: String :=
  v major show .. "." .. v minor (as: String)

(s: String) as: Version :=
  s (split-on: '.') (map: @(as: Integer)) reduce-right: @.

(n: Integer) as: Version := n . 0

(a: Version) == (b: Version) :=
  a major == b major && a minor == b minor

(n: Integer) == (v: Version) :=
  (n == v major) && (v minor == 0)

(v: Version) == (n: Integer) :=
  (n == v major) && (v minor == 0)

(a: Version) > (b: Version) :=
  a major > b major || a minor > b minor

(n: Integer) > (v: Version) :=
  n > v major || v major == n && v minor /= 0

(v: Version) > (n: Integer) :=
  v major > n || v major == n && v minor /= 0

(a: Version) < (b: Version) :=
  a major < b major || a minor < b minor

(n: Integer) < (v: Version) :=
  n < v major || v major == n && v minor /= 0

(v: Version) < (n: Integer) :=
  v major < n || v major == n && v minor /= 0

(a: Version) >= (b: Version) :=
  a major >= b major || a minor >= b minor

(n: Integer) >= (v: Version) :=
  n >= v major

(v: Version) >= (n: Integer) :=
  v major >= n

(a: Version) <= (b: Version) :=
  a major <= b major || a minor <= b minor

(n: Integer) <= (v: Version) :=
  n <= v major

(v: Version) <= (n: Integer) :=
  v major <= n