forked from VBAndCs/Ring-Enum-Generator
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFlagGenerator.ring
67 lines (53 loc) · 1.78 KB
/
FlagGenerator.ring
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
# Enum generator
# Mohammad Hamdy Ghanem
# 1/11/2020
# ====== Usage Sample =========
? GenerateFlag("FileState", ["ReadOnly", "Hidden", "System"])
# ==============================
func GenerateFlag(FlagName, lstFlags)
if not isList(lstFlags)
raise("Bad parameter type!")
elseif len(lstFlags) = 0
raise("Flag must contain members")
end
#================template================================
FlagTemplate = '
load "FlagOperations.ring"
%FlagName% = new %FlagName%Flags
Class %FlagName%Flags
FlagNames = [%StrFlagList%]
FlagValues = [%ValueList%]
%Flags%
None = New FlagOperations(0, FlagNames)
All = New FlagOperations(%MaxValue%, FlagNames)
Flags = [%FlagList%]
func FlagFromInt(value)
return New FlagOperations(value, FlagNames)
'
#============eval=================
FlagTemplate = SubStr(FlagTemplate, "%FlagName%", FlagName)
L = len(lstFlags)
MaxValue = pow(2, L) - 1
FlagTemplate = SubStr(FlagTemplate, "%MaxValue%", String(MaxValue))
sFlags = ""
sFlagList = ""
sStrFlagList = ""
sValueFlagList = ""
For i = 1 To L
flag = '"' + lstFlags[i] + '"'
value = pow(2, i - 1)
sFlags += " " + lstFlags[i] + " = New FlagOperations(" + value + ", FlagNames)" + nl
If Len(sFlagList) > 0
sFlagList += ", "
sStrFlagList += ", "
sValueFlagList += ", "
End
sFlagList += lstFlags[i]
sStrFlagList += flag
sValueFlagList += value
Next
FlagTemplate = SubStr(FlagTemplate, "%Flags%", sFlags)
FlagTemplate = SubStr(FlagTemplate, "%FlagList%", sFlagList)
FlagTemplate = SubStr(FlagTemplate, "%StrFlagList%", sStrFlagList)
FlagTemplate = SubStr(FlagTemplate, "%ValueList%", sValueFlagList)
Return FlagTemplate