-
Notifications
You must be signed in to change notification settings - Fork 0
/
Version.lua
70 lines (60 loc) · 1.76 KB
/
Version.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
return function()
local SEPARATOR = "."
local Version = class("Version")
function Version:_init(source)
local result = {}
local pos = 0
local size = #source
while pos < size do
local found = string.find(source, SEPARATOR, pos, true)
if not found then break end
table.insert(result, string.sub(source, pos, found))
pos = found + 1
end
table.insert(result, string.sub(source, pos))
for k, v in pairs(result) do
result[k] = tonumber(v)
end
self.parts = result
end
function Version:__eq(other)
if #self ~= #other then return false end
for i = 1, #self do
if self.parts[i] ~= other.parts[i] then
return false
end
end
return true
end
function Version:__lt(other)
local min = math.min(#self, #other)
for i = 1, min do
if self.parts[i] > other.parts[i] then
return false
elseif self.parts[i] <= other.parts[i] then
return true
end
end
return #self <= #other
end
function Version:__gt(other)
local min = math.min(#self, #other)
for i = 1, min do
if self.parts[i] < other.parts[i] then
return false
elseif self.parts[i] >= other.parts[i] then
return true
end
end
return #self >= #other
end
function Version:__mult(other)
return self < other and self or other
end
function Version:__add(other)
return self > other and self or other
end
function Version:ToString()
return table.concat(self.parts, SEPARATOR)
end
end