Repository navigation
Expand file tree
/
Copy pathEnum.lua
More file actions
96 lines (81 loc) · 2.22 KB
/
Copy pathEnum.lua
File metadata and controls
96 lines (81 loc) · 2.22 KB
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
--[[
Copyright 2017 YANG Huan ([email protected]).
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
--]]
local System = System
local throw = System.throw
local Int = System.Int
local Double = System.Double
local band = System.band
local ArgumentNullException = System.ArgumentNullException
local ArgumentException = System.ArgumentException
local pairs = pairs
local tostring = tostring
local Enum = {}
Enum.CompareToObj = Int.CompareToObj
Enum.EqualsObj = Int.EqualsObj
Enum.__default__ = Int.__default__
local function toString(this, cls)
for k, v in pairs(cls) do
if v == this then
return k
end
end
return tostring(this)
end
Enum.ToString = toString
Double.ToEnumString = toString
local function hasFlag(this, flag)
return band(this, flag) ~= 0
end
Enum.HasFlag = hasFlag
Double.HasFlag = hasFlag
local function tryParseEnum(enumType, value, ignoreCase)
if enumType == nil then
throw(ArgumentNullException("enumType"))
end
if not enumType:getIsEnum() then
throw(ArgumentException("Arg_MustBeEnum"))
end
if value == nil then
return
end
value = value:Trim()
if #value == 0 then
return
end
if ignoreCase then
value = value:lower()
end
for k, v in pairs(enumType.c) do
if ignoreCase then
k = k:lower()
end
if k == value then
return v
end
end
end
function Enum.Parse(enumType, value, ignoreCase)
local result = tryParseEnum(enumType, value, ignoreCase)
if result == nil then
throw(ArgumentException("parse enum fail: ".. value))
end
return result
end
function Enum.TryParse(TEnum, value, ignoreCase)
local result = tryParseEnum(System.typeof(TEnum), value, ignoreCase)
if result == nil then
return false, 0
end
return true, result
end
System.define("System.Enum", Enum)