1212#pragma semicolon 1
1313
1414#define UTL_MAP_TAG " [UtlMap]"
15- #define UTL_MAP_VERSION " 1.0.0 "
15+ #define UTL_MAP_VERSION " 1.0.2 "
1616
1717/* *
1818 * Author: blueblur
@@ -80,9 +80,6 @@ protected:
8080*/
8181typedef UtlMapDestructorFunc = function void (UtlMap vec , int i , any addr , any obj , int size );
8282
83- //#define NODET_OFFSET_KEY 0x0
84- #define NODET_OFFSET_ELEM 0x4
85-
8683methodmap Node_t < AddressBase {
8784 public Node_t (Address addr ) {
8885 Node_t p = view_as <Node_t >(addr );
@@ -106,21 +103,19 @@ methodmap Node_t < AddressBase {
106103 StoreToAddress (this .addr , value , elementSize );
107104 }
108105
109- public any GetElem (NumberType elementSize = NumberType_Int32 ) {
110- return LoadFromAddress (this .addr + NODET_OFFSET_ELEM , elementSize );
106+ public any GetElem (int keySize , NumberType elementSize = NumberType_Int32 ) {
107+ return LoadFromAddress (this .addr + keySize , elementSize );
111108 }
112109
113- public any GetElemEx () {
114- return this .addr + NODET_OFFSET_ELEM ;
110+ public any GetElemEx (int keySize ) {
111+ return this .addr + keySize ;
115112 }
116113
117- public void SetElem (any value , NumberType elementSize = NumberType_Int32 ) {
118- StoreToAddress (this .addr + NODET_OFFSET_ELEM , value , elementSize );
114+ public void SetElem (any value , int keySize , NumberType elementSize = NumberType_Int32 ) {
115+ StoreToAddress (this .addr + keySize , value , elementSize );
119116 }
120117}
121118
122- #define UTL_MAP_OFFSET_TREE 0x0
123-
124119methodmap UtlMap < AddressBase {
125120 public UtlMap (Address addr ) {
126121 UtlMap p = view_as <UtlMap >(addr );
@@ -145,32 +140,32 @@ methodmap UtlMap < AddressBase {
145140#endif
146141 }
147142
148- public any GetElement (int i , int size , NumberType elementSize = NumberType_Int32 ) {
149- return view_as <Node_t >(this .m_Tree .Get (i , size )).GetElem (elementSize );
143+ public any GetElement (int i , int size , int keySize , NumberType elementSize = NumberType_Int32 ) {
144+ return view_as <Node_t >(this .m_Tree .GetEx (i , size ) + 8 ).GetElem (keySize , elementSize );
150145 }
151146
152- public any GetElementEx (int i , int size ) {
153- return view_as <Node_t >(this .m_Tree .Get (i , size )).GetElemEx ();
147+ public any GetElementEx (int i , int size , int keySize ) {
148+ return view_as <Node_t >(this .m_Tree .GetEx (i , size ) + 8 ).GetElemEx (keySize );
154149 }
155150
156- public void SetElement (int i , any value , int size , NumberType elementSize = NumberType_Int32 ) {
157- view_as <Node_t >(this .m_Tree .Get (i , size )).SetElem (value , elementSize );
151+ public void SetElement (int i , any value , int size , int keySize , NumberType elementSize = NumberType_Int32 ) {
152+ view_as <Node_t >(this .m_Tree .GetEx (i , size ) + 8 ).SetElem (value , keySize , elementSize );
158153 }
159154
160155 public any GetKey (int i , int size , NumberType elementSize = NumberType_Int32 ) {
161- return view_as <Node_t >(this .m_Tree .Get (i , size )).GetKey (elementSize );
156+ return view_as <Node_t >(this .m_Tree .GetEx (i , size ) + 8 ).GetKey (elementSize );
162157 }
163158
164159 public any GetKeyEx (int i , int size ) {
165- return view_as <Node_t >(this .m_Tree .Get (i , size )).GetKeyEx ();
160+ return view_as <Node_t >(this .m_Tree .GetEx (i , size ) + 8 ).GetKeyEx ();
166161 }
167162
168163 public void SetKey (int i , any value , int size , NumberType elementSize = NumberType_Int32 ) {
169- view_as <Node_t >(this .m_Tree .Get (i , size )).SetKey (value , elementSize );
164+ view_as <Node_t >(this .m_Tree .GetEx (i , size ) + 8 ).SetKey (value , elementSize );
170165 }
171166
172- public any Element (int i , int size , NumberType elementSize = NumberType_Int32 ) {
173- return this .GetElement (i , size , elementSize );
167+ public any Element (int i , int size , int keySize , NumberType elementSize = NumberType_Int32 ) {
168+ return this .GetElement (i , size , keySize , elementSize );
174169 }
175170
176171 public any Key (int i , int size , NumberType elementSize = NumberType_Int32 ) {
@@ -301,7 +296,7 @@ methodmap UtlMap < AddressBase {
301296 return defaultValue ;
302297 }
303298
304- return this .GetElement (i , insertSize , numberType );
299+ return this .GetElement (i , insertSize , keySize , numberType );
305300 }
306301
307302 public int FindClosest (any key , int keySize , int insertSize , NumberType numberType = NumberType_Int32 , CompareOperands_t eFindCriteria ) {
@@ -430,7 +425,7 @@ methodmap UtlMap < AddressBase {
430425 return defaultValue ;
431426 }
432427
433- return this .GetElement (i , insertSize , numberType );
428+ return this .GetElement (i , insertSize , keySize , numberType );
434429 }
435430
436431 public int FindClosest (any key , int keySize , int insertSize , NumberType numberType = NumberType_Int32 , CompareOperands_t eFindCriteria ) {
@@ -501,13 +496,13 @@ methodmap UtlMap < AddressBase {
501496 return this .m_Tree .FindFirst (obj , size , numberType );
502497 }
503498
504- public any FindElementSafe (any obj , int size , NumberType numberType = NumberType_Int32 , any defaultValue = 0 ) {
499+ public any FindElementSafe (any obj , int size , int keySize , NumberType numberType = NumberType_Int32 , any defaultValue = 0 ) {
505500 int i = this .FindSafe (obj , size , numberType );
506501 if (i == UtlRBTree .InvalidIndex ()) {
507502 return defaultValue ;
508503 }
509504
510- return this .GetElement (i , size , numberType );
505+ return this .GetElement (i , size , keySize , numberType );
511506 }
512507
513508 public int FindClosestSafe (any obj , int size , NumberType numberType = NumberType_Int32 , CompareOperands_t eFindCriteria ) {
@@ -543,8 +538,8 @@ methodmap UtlMap < AddressBase {
543538 continue ;
544539
545540 if (bAlwaysFreeElems && destructor ) {
546- any elem = this .GetElement (i , keySize + elemSize , elementSize );
547- any elemAddr = this .GetElementEx (i , keySize + elemSize );
541+ any elem = this .GetElement (i , keySize + elemSize , keySize , elementSize );
542+ any elemAddr = this .GetElementEx (i , keySize + elemSize , keySize );
548543
549544 this .Destruct (i , elemSize , elemAddr , elem , destructor );
550545 }
0 commit comments