12#ifndef TT_INCLUDE__POINTERREMAPCLASS_H
13#define TT_INCLUDE__POINTERREMAPCLASS_H
14#include "engine_vector.h"
16class PointerRemapClass
18 struct PtrPairStruct {
21 PtrPairStruct(
void* oldptr,
void* newptr) : OldPointer(oldptr), NewPointer(newptr)
24 PtrPairStruct() : OldPointer(0), NewPointer(0)
27 bool operator==(
const PtrPairStruct &that)
29 return (OldPointer == that.OldPointer) && (NewPointer == that.NewPointer);
31 bool operator!=(
const PtrPairStruct &that)
33 return (OldPointer != that.OldPointer) || (NewPointer != that.NewPointer);
36 struct PtrRemapStruct {
37 void** PointerToRemap;
38 PtrRemapStruct() : PointerToRemap(0)
41 bool operator==(
const PtrRemapStruct &that)
43 return PointerToRemap == that.PointerToRemap;
45 bool operator!=(
const PtrRemapStruct &that)
47 return PointerToRemap != that.PointerToRemap;
50 DynamicVectorClass<PtrPairStruct> PointerPairTable;
51 DynamicVectorClass<PtrRemapStruct> PointerRequestTable;
52 DynamicVectorClass<PtrRemapStruct> RefCountRequestTable;
53 static int ptr_pair_compare_function(
const void* ptr1,
const void* ptr2);
54 static int ptr_request_compare_function(
const void* ptr1,
const void* ptr2);
58 PointerPairTable.Set_Growth_Step(4096);
59 PointerRequestTable.Set_Growth_Step(4096);
60 RefCountRequestTable.Set_Growth_Step(4096);
67 void Register_Pointer(
void* old_pointer,
void* new_pointer);
68 void Request_Pointer_Remap(
void** pointer_to_convert);
69 void Request_Ref_Counted_Pointer_Remap(RefCountClass** pointer_to_convert);
70 void Process_Request_Table(DynamicVectorClass<PtrRemapStruct>& request_table,
bool refcount);