59 PointerPairTable.Delete_All();
60 PointerRequestTable.Delete_All();
61 RefCountRequestTable.Delete_All();
66 if ( PointerPairTable.Count() > 0 ) {
67 qsort(&PointerPairTable[0], PointerPairTable.Count(),
sizeof(PointerPairTable[0]), ptr_pair_compare_function);
70 if ( PointerRequestTable.Count() > 0 ) {
71 WWASSERT( PointerPairTable.Count() > 0 );
72 qsort(&PointerRequestTable[0],PointerRequestTable.Count(),
sizeof(PointerRequestTable[0]), ptr_request_compare_function);
73 Process_Request_Table(PointerRequestTable,
false);
77 if ( RefCountRequestTable.Count() > 0 ) {
78 WWASSERT( PointerPairTable.Count() > 0 );
79 qsort(&RefCountRequestTable[0],RefCountRequestTable.Count(),
sizeof(RefCountRequestTable[0]), ptr_request_compare_function);
80 Process_Request_Table(RefCountRequestTable,
true);
87 int pointer_index = 0;
90 for (pointer_index = 0; pointer_index < request_table.
Count(); pointer_index++) {
92 void * pointer_to_remap = *(request_table[pointer_index].PointerToRemap);
93 int pre_search_index = pair_index;
96 while ( (pair_index < PointerPairTable.
Count()) &&
97 (PointerPairTable[pair_index].OldPointer < pointer_to_remap) )
102 if ((pair_index < PointerPairTable.Count()) && (PointerPairTable[pair_index].OldPointer == pointer_to_remap)) {
105 *request_table[pointer_index].PointerToRemap = PointerPairTable[pair_index].NewPointer;
108 RefCountClass * refptr = (RefCountClass *)(*request_table[pointer_index].PointerToRemap);
117 pair_index = pre_search_index;
118 *request_table[pointer_index].PointerToRemap =
NULL;
120 const char * file = request_table[pointer_index].File;
121 int line = request_table[pointer_index].Line;
122 WWDEBUG_SAY((
"Warning! Failed to re-map pointer! old_ptr = 0x%X file = %s line = %d\r\n",(
unsigned int)pointer_to_remap,file,line));
131 PointerPairTable.Add(PtrPairStruct(old_pointer,new_pointer));
137 PtrRemapStruct remap;
138 remap.PointerToRemap = pointer_to_convert;
141 PointerRequestTable.
Add(remap);
146 PtrRemapStruct remap;
147 remap.PointerToRemap = (
void**)pointer_to_convert;
150 RefCountRequestTable.Add(remap);
157 PtrRemapStruct remap;
158 remap.PointerToRemap = pointer_to_convert;
159 PointerRequestTable.Add(remap);
164 PtrRemapStruct remap;
165 remap.PointerToRemap = (
void**)pointer_to_convert;
166 RefCountRequestTable.Add(remap);
175int __cdecl PointerRemapClass::ptr_pair_compare_function(
void const * ptr1,
void const * ptr2)
177 void * old1 = ((PointerRemapClass::PtrPairStruct
const *)ptr1)->OldPointer;
178 void * old2 = ((PointerRemapClass::PtrPairStruct
const *)ptr2)->OldPointer;
193int __cdecl PointerRemapClass::ptr_request_compare_function(
void const * ptr1,
void const * ptr2)
195 PtrRemapStruct * remap1 = (PtrRemapStruct *)ptr1;
196 PtrRemapStruct * remap2 = (PtrRemapStruct *)ptr2;
198 void * old1 = *(remap1->PointerToRemap);
199 void * old2 = *(remap2->PointerToRemap);
bool Add(T const &object)
void Register_Pointer(void *old_pointer, void *new_pointer)
void Request_Ref_Counted_Pointer_Remap(RefCountClass **pointer_to_convert)
void Request_Pointer_Remap(void **pointer_to_convert)
const int POINTER_TABLES_GROWTH_STEP