@@ -11,27 +11,33 @@ import (
1111 msg "github.com/markus-wa/demoinfocs-golang/msg"
1212)
1313
14- // Parser provides functions for parsing send-tables.
15- type Parser struct {
14+ // SendTableParser provides functions for parsing send-tables.
15+ type SendTableParser struct {
1616 sendTables []sendTable
1717 serverClasses []* ServerClass
1818 currentExcludes []* excludeEntry
1919 currentBaseclasses []* ServerClass
2020}
2121
22+ type excludeEntry struct {
23+ varName string
24+ dtName string
25+ excludingDt string
26+ }
27+
2228// ClassBits seems to calculate how many bits must be read for the server-class ID.
2329// Not 100% sure how tho tbh.
24- func (p * Parser ) ClassBits () int {
30+ func (p * SendTableParser ) ClassBits () int {
2531 return int (math .Ceil (math .Log2 (float64 (len (p .serverClasses )))))
2632}
2733
2834// ServerClasses returns the parsed server-classes
29- func (p * Parser ) ServerClasses () []* ServerClass {
35+ func (p * SendTableParser ) ServerClasses () []* ServerClass {
3036 return p .serverClasses
3137}
3238
3339// ParsePacket parses a send-table packet.
34- func (p * Parser ) ParsePacket (r * bit.BitReader ) {
40+ func (p * SendTableParser ) ParsePacket (r * bit.BitReader ) {
3541 for {
3642 t := msg .SVC_Messages (r .ReadVarInt32 ())
3743 if t != msg .SVC_Messages_svc_SendTable {
@@ -101,7 +107,7 @@ func parseSendTable(r *bit.BitReader) sendTable {
101107 return res
102108}
103109
104- func (p * Parser ) flattenDataTable (serverClassIndex int ) {
110+ func (p * SendTableParser ) flattenDataTable (serverClassIndex int ) {
105111 tab := & p .sendTables [p .serverClasses [serverClassIndex ].DataTableID ]
106112
107113 p .currentExcludes = nil
@@ -150,7 +156,7 @@ func (p *Parser) flattenDataTable(serverClassIndex int) {
150156 }
151157}
152158
153- func (p * Parser ) gatherExcludesAndBaseClasses (st * sendTable , collectBaseClasses bool ) {
159+ func (p * SendTableParser ) gatherExcludesAndBaseClasses (st * sendTable , collectBaseClasses bool ) {
154160 for _ , v := range st .properties {
155161 if v .flags .hasFlagSet (propFlagExclude ) {
156162 p .currentExcludes = append (p .currentExcludes , & excludeEntry {varName : v .name , dtName : v .dataTableName , excludingDt : st .name })
@@ -169,13 +175,13 @@ func (p *Parser) gatherExcludesAndBaseClasses(st *sendTable, collectBaseClasses
169175 }
170176}
171177
172- func (p * Parser ) gatherProps (st * sendTable , serverClassIndex int , prefix string ) {
178+ func (p * SendTableParser ) gatherProps (st * sendTable , serverClassIndex int , prefix string ) {
173179 var tmpFlattenedProps []FlattenedPropEntry
174180 p .gatherPropsIterate (st , serverClassIndex , prefix , & tmpFlattenedProps )
175181 p .serverClasses [serverClassIndex ].FlattenedProps = append (p .serverClasses [serverClassIndex ].FlattenedProps , tmpFlattenedProps ... )
176182}
177183
178- func (p * Parser ) gatherPropsIterate (tab * sendTable , serverClassIndex int , prefix string , flattenedProps * []FlattenedPropEntry ) {
184+ func (p * SendTableParser ) gatherPropsIterate (tab * sendTable , serverClassIndex int , prefix string , flattenedProps * []FlattenedPropEntry ) {
179185 for i := range tab .properties {
180186 prop := & tab .properties [i ]
181187 if prop .flags .hasFlagSet (propFlagInsideArray ) || prop .flags .hasFlagSet (propFlagExclude ) || p .isPropertyExcluded (tab , prop ) {
@@ -204,7 +210,7 @@ func (p *Parser) gatherPropsIterate(tab *sendTable, serverClassIndex int, prefix
204210 }
205211}
206212
207- func (p * Parser ) isPropertyExcluded (tab * sendTable , prop * sendTableProperty ) bool {
213+ func (p * SendTableParser ) isPropertyExcluded (tab * sendTable , prop * sendTableProperty ) bool {
208214 for _ , v := range p .currentExcludes {
209215 if v .dtName == tab .name && v .varName == prop .name {
210216 return true
@@ -213,7 +219,7 @@ func (p *Parser) isPropertyExcluded(tab *sendTable, prop *sendTableProperty) boo
213219 return false
214220}
215221
216- func (p * Parser ) getTableByName (name string ) * sendTable {
222+ func (p * SendTableParser ) getTableByName (name string ) * sendTable {
217223 for i := range p .sendTables {
218224 if p .sendTables [i ].name == name {
219225 return & p .sendTables [i ]
@@ -222,7 +228,7 @@ func (p *Parser) getTableByName(name string) *sendTable {
222228 return nil
223229}
224230
225- func (p * Parser ) findServerClassByDtName (name string ) * ServerClass {
231+ func (p * SendTableParser ) findServerClassByDtName (name string ) * ServerClass {
226232 var sc * ServerClass
227233 for _ , v := range p .serverClasses {
228234 if v .DTName == name {
@@ -232,14 +238,13 @@ func (p *Parser) findServerClassByDtName(name string) *ServerClass {
232238 sc = v
233239 }
234240 }
235- if sc == nil {
236- panic (fmt .Sprintf ("No server class with DT name %q found" , name ))
237- }
238241 return sc
239242}
240243
241244// FindServerClassByName finds and returns a server-class by it's name.
242- func (p * Parser ) FindServerClassByName (name string ) * ServerClass {
245+ // Returns nil if the server-class wasn't found.
246+ // Panics if more than one server-class with the same name was found.
247+ func (p * SendTableParser ) FindServerClassByName (name string ) * ServerClass {
243248 var sc * ServerClass
244249 for _ , v := range p .serverClasses {
245250 if v .Name == name {
@@ -249,8 +254,5 @@ func (p *Parser) FindServerClassByName(name string) *ServerClass {
249254 sc = v
250255 }
251256 }
252- if sc == nil {
253- panic (fmt .Sprintf ("No server class with name %q found" , name ))
254- }
255257 return sc
256258}
0 commit comments