Skip to content

Commit

Permalink
Merge pull request #446 from Ektaros/cache-field-name-check
Browse files Browse the repository at this point in the history
cache fieldName checks
  • Loading branch information
markus-wa committed Oct 18, 2023
2 parents 9d80bca + 3b55221 commit 665d2c6
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 14 deletions.
2 changes: 1 addition & 1 deletion pkg/demoinfocs/sendtables2/entity.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ func (p property) Bind(variable any, t st.PropertyValueType) {
}

func (e *Entity) Property(name string) st.Property {
ok := e.class.serializer.getFieldPathForName(newFieldPath(), name)
ok := e.class.serializer.checkFieldName(name)
if !ok {
return nil
}
Expand Down
9 changes: 4 additions & 5 deletions pkg/demoinfocs/sendtables2/parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -161,11 +161,10 @@ func (p *Parser) ParsePacket(b []byte) error {
fieldTypes := map[string]*fieldType{}

for _, s := range msg.GetSerializers() {
serializer := &serializer{
name: msg.GetSymbols()[s.GetSerializerNameSym()],
version: s.GetSerializerVersion(),
fields: []*field{},
}
serializer := newSerializer(
msg.GetSymbols()[s.GetSerializerNameSym()],
s.GetSerializerVersion(),
)

for _, i := range s.GetFieldsIndex() {
if _, ok := fields[i]; !ok {
Expand Down
33 changes: 25 additions & 8 deletions pkg/demoinfocs/sendtables2/serializer.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,21 @@ type fieldIndex struct {
}

type serializer struct {
name string
version int32
fields []*field
fieldIndexes map[string]*fieldIndex
name string
version int32
fields []*field
fieldIndexes map[string]*fieldIndex
fieldNameChecks map[string]bool
}

func newSerializer(name string, version int32) *serializer {
return &serializer{
name: name,
version: version,
fields: []*field{},
fieldIndexes: make(map[string]*fieldIndex),
fieldNameChecks: make(map[string]bool),
}
}

func (s *serializer) id() string {
Expand Down Expand Up @@ -78,12 +89,18 @@ func (s *serializer) addField(f *field) {
newFieldIndex := len(s.fields)
s.fields = append(s.fields, f)

if s.fieldIndexes == nil {
s.fieldIndexes = make(map[string]*fieldIndex)
}

s.fieldIndexes[f.varName] = &fieldIndex{
index: newFieldIndex,
field: f,
}
}

func (s *serializer) checkFieldName(name string) bool {
ok, exists := s.fieldNameChecks[name]
if !exists {
ok = s.getFieldPathForName(newFieldPath(), name)
s.fieldNameChecks[name] = ok
}

return ok
}

0 comments on commit 665d2c6

Please sign in to comment.