Skip to content

Commit 665d2c6

Browse files
authored
Merge pull request #446 from Ektaros/cache-field-name-check
cache fieldName checks
2 parents 9d80bca + 3b55221 commit 665d2c6

File tree

3 files changed

+30
-14
lines changed

3 files changed

+30
-14
lines changed

pkg/demoinfocs/sendtables2/entity.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ func (p property) Bind(variable any, t st.PropertyValueType) {
126126
}
127127

128128
func (e *Entity) Property(name string) st.Property {
129-
ok := e.class.serializer.getFieldPathForName(newFieldPath(), name)
129+
ok := e.class.serializer.checkFieldName(name)
130130
if !ok {
131131
return nil
132132
}

pkg/demoinfocs/sendtables2/parser.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -161,11 +161,10 @@ func (p *Parser) ParsePacket(b []byte) error {
161161
fieldTypes := map[string]*fieldType{}
162162

163163
for _, s := range msg.GetSerializers() {
164-
serializer := &serializer{
165-
name: msg.GetSymbols()[s.GetSerializerNameSym()],
166-
version: s.GetSerializerVersion(),
167-
fields: []*field{},
168-
}
164+
serializer := newSerializer(
165+
msg.GetSymbols()[s.GetSerializerNameSym()],
166+
s.GetSerializerVersion(),
167+
)
169168

170169
for _, i := range s.GetFieldsIndex() {
171170
if _, ok := fields[i]; !ok {

pkg/demoinfocs/sendtables2/serializer.go

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,21 @@ type fieldIndex struct {
1111
}
1212

1313
type serializer struct {
14-
name string
15-
version int32
16-
fields []*field
17-
fieldIndexes map[string]*fieldIndex
14+
name string
15+
version int32
16+
fields []*field
17+
fieldIndexes map[string]*fieldIndex
18+
fieldNameChecks map[string]bool
19+
}
20+
21+
func newSerializer(name string, version int32) *serializer {
22+
return &serializer{
23+
name: name,
24+
version: version,
25+
fields: []*field{},
26+
fieldIndexes: make(map[string]*fieldIndex),
27+
fieldNameChecks: make(map[string]bool),
28+
}
1829
}
1930

2031
func (s *serializer) id() string {
@@ -78,12 +89,18 @@ func (s *serializer) addField(f *field) {
7889
newFieldIndex := len(s.fields)
7990
s.fields = append(s.fields, f)
8091

81-
if s.fieldIndexes == nil {
82-
s.fieldIndexes = make(map[string]*fieldIndex)
83-
}
84-
8592
s.fieldIndexes[f.varName] = &fieldIndex{
8693
index: newFieldIndex,
8794
field: f,
8895
}
8996
}
97+
98+
func (s *serializer) checkFieldName(name string) bool {
99+
ok, exists := s.fieldNameChecks[name]
100+
if !exists {
101+
ok = s.getFieldPathForName(newFieldPath(), name)
102+
s.fieldNameChecks[name] = ok
103+
}
104+
105+
return ok
106+
}

0 commit comments

Comments
 (0)