@@ -91,6 +91,7 @@ var propDecoder propertyDecoder
9191type PropertyValue struct {
9292 VectorVal r3.Vector
9393 IntVal int
94+ Int64Val int64
9495 ArrayVal []PropertyValue
9596 StringVal string
9697 FloatVal float32
@@ -123,6 +124,9 @@ func (propertyDecoder) decodeProp(prop *property, reader *bit.BitReader) {
123124 case propTypeString :
124125 prop .value .StringVal = propDecoder .decodeString (reader )
125126
127+ case propTypeInt64 :
128+ prop .value .Int64Val = propDecoder .decodeInt64 (prop .entry .prop , reader )
129+
126130 default :
127131 panic (fmt .Sprintf ("Unknown prop type %d" , prop .entry .prop .rawType ))
128132 }
@@ -144,6 +148,36 @@ func (propertyDecoder) decodeInt(prop *sendTableProperty, reader *bit.BitReader)
144148 return reader .ReadSignedInt (prop .numberOfBits )
145149}
146150
151+ func (propertyDecoder ) decodeInt64 (prop * sendTableProperty , reader * bit.BitReader ) int64 {
152+ if prop .flags .hasFlagSet (propFlagVarInt ) {
153+ if prop .flags .hasFlagSet (propFlagUnsigned ) {
154+ return int64 (reader .ReadVarInt64 ())
155+ }
156+
157+ return reader .ReadSignedVarInt64 ()
158+ } else {
159+ var high uint = 0
160+ var low uint = 0
161+ var isNegative bool = false
162+ if prop .flags .hasFlagSet (propFlagUnsigned ) {
163+ low = reader .ReadInt (32 )
164+ high = reader .ReadInt (prop .numberOfBits - 32 )
165+ } else {
166+ isNegative = reader .ReadBit ()
167+ low = reader .ReadInt (32 )
168+ high = reader .ReadInt (prop .numberOfBits - 32 - 1 )
169+ }
170+
171+ var result int64 = (int64 (high ) << 32 ) | int64 (low )
172+
173+ if isNegative {
174+ result = - result
175+ }
176+
177+ return result
178+ }
179+ }
180+
147181func (propertyDecoder ) decodeFloat (prop * sendTableProperty , reader * bit.BitReader ) float32 {
148182 if prop .flags & specialFloatFlags != 0 {
149183 return propDecoder .decodeSpecialFloat (prop , reader )
0 commit comments