-
Notifications
You must be signed in to change notification settings - Fork 0
/
bitField.go
154 lines (133 loc) · 3.47 KB
/
bitField.go
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
package MitchDefinedTypes
import (
"encoding/json"
"fmt"
"github.com/bhbosman/CodeGenerators/mitchgenerator/interfaces"
)
type MitchBitField struct {
Identifier string
BitField00 string
BitField01 string
BitField02 string
BitField03 string
BitField04 string
BitField05 string
BitField06 string
BitField07 string
BitsUsed byte
Next interfaces.IDefinitionDeclaration
}
func (self *MitchBitField) GetStreamFunctionName() string {
return self.Kind().String()
}
func (self *MitchBitField) GetSequenceCount() (bool, int) {
return false, 0
}
func (self *MitchBitField) GetPackageName() (bool, string, string) {
return false, "", self.GetName()
}
func (self *MitchBitField) Kind() interfaces.Kind {
return interfaces.MitchBitField
}
func (self *MitchBitField) DefaultValue() string {
return fmt.Sprintf("%v{}", self.Identifier)
}
func (self *MitchBitField) Predefined() bool {
return false
}
var MitchBitFieldCounter = 0
func getNumber() int {
MitchBitFieldCounter += 1
return MitchBitFieldCounter
}
func (self *MitchBitField) GetName() string {
return self.Identifier
}
func (self *MitchBitField) GetNext() interfaces.IDefinitionDeclaration {
return self.Next
}
func (self *MitchBitField) SetNext(typeSpec interfaces.IDefinitionDeclaration) {
self.Next = typeSpec
}
func (self *MitchBitField) ClearNext() {
self.Next = nil
}
func (self *MitchBitField) GetScopeName() string {
return self.GetName()
}
func (self *MitchBitField) MarshalJSON() ([]byte, error) {
return json.Marshal(&struct {
Type string `json:"Type"`
Identifier string `json:"Identifier"`
MitchBitField00 string `json:"MitchBitField00"`
MitchBitField01 string `json:"MitchBitField01"`
MitchBitField02 string `json:"MitchBitField02"`
MitchBitField03 string `json:"MitchBitField03"`
MitchBitField04 string `json:"MitchBitField04"`
MitchBitField05 string `json:"MitchBitField05"`
MitchBitField06 string `json:"MitchBitField06"`
MitchBitField07 string `json:"MitchBitField07"`
BitsUsed byte `json:"BitsUsed"`
}{
Type: "MitchBitField",
Identifier: self.Identifier,
MitchBitField00: self.BitField00,
MitchBitField01: self.BitField01,
MitchBitField02: self.BitField02,
MitchBitField03: self.BitField03,
MitchBitField04: self.BitField04,
MitchBitField05: self.BitField05,
MitchBitField06: self.BitField06,
MitchBitField07: self.BitField07,
BitsUsed: self.BitsUsed,
})
}
func NewMitchBitField(
MitchBitField00 string,
MitchBitField01 string,
MitchBitField02 string,
MitchBitField03 string,
MitchBitField04 string,
MitchBitField05 string,
MitchBitField06 string,
MitchBitField07 string) *MitchBitField {
used := byte(0)
if MitchBitField00 != "b0" {
used = used | 0x01
}
if MitchBitField01 != "b1" {
used = used | 0x02
}
if MitchBitField02 != "b2" {
used = used | 0x04
}
if MitchBitField03 != "b3" {
used = used | 0x08
}
if MitchBitField04 != "b4" {
used = used | 0x10
}
if MitchBitField05 != "b5" {
used = used | 0x20
}
if MitchBitField06 != "b6" {
used = used | 0x40
}
if MitchBitField07 != "b7" {
used = used | 0x80
}
number := getNumber()
return &MitchBitField{
Identifier: fmt.Sprintf("MitchBitField%04d", number),
BitField00: MitchBitField00,
BitField01: MitchBitField01,
BitField02: MitchBitField02,
BitField03: MitchBitField03,
BitField04: MitchBitField04,
BitField05: MitchBitField05,
BitField06: MitchBitField06,
BitField07: MitchBitField07,
BitsUsed: used,
Next: nil,
}
}