12#ifndef TT_INCLUDE_REFERENCABLECLASS_H
13#define TT_INCLUDE_REFERENCABLECLASS_H
15#include "SaveLoadSystemClass.h"
19class ScriptableGameObj;
21class ReferenceableClass {
23 friend class ReferencerClass;
24 ReferenceableClass( T *reference_data ) : ReferenceData( reference_data ), ReferencerListHead( NULL ) {}
25 ~ReferenceableClass(
void );
26 bool Save( ChunkSaveClass & csave );
27 bool Load( ChunkLoadClass & cload );
29 ReferencerClass *ReferencerListHead;
30 T * Get_Data(
void )
const {
return ReferenceData; }
35ReferenceableClass<T>::~ReferenceableClass(
void )
37 while ( ReferencerListHead != NULL )
39 ReferencerClass *referencer = ReferencerListHead;
40 ReferencerListHead = referencer->TargetReferencerListNext;
41 referencer->ReferenceTarget = NULL;
42 referencer->TargetReferencerListNext = NULL;
45typedef ReferenceableClass<ScriptableGameObj> ReferenceableGameObj;
47 CHUNKID_REF_VARIABLES = 913991844,
48 XXXX_MICROCHUNKID_LIST_HEAD = 1,
49 MICROCHUNKID_XXXXXXXXX,
52 XXXX_MICROCHUNKID_NEXT,
55bool ReferenceableClass<T>::Save( ChunkSaveClass & csave )
57 csave.Begin_Chunk( CHUNKID_REF_VARIABLES );
59 WRITE_MICRO_CHUNK( csave, MICROCHUNKID_PTR, ptr );
64bool ReferenceableClass<T>::Load( ChunkLoadClass & cload )
68 while (cload.Open_Micro_Chunk())
70 switch(cload.Cur_Micro_Chunk_ID())
72 case MICROCHUNKID_PTR:
73 cload.Read(&old_ptr,
sizeof(
void*));
74 SaveLoadSystemClass::Register_Pointer(old_ptr,
this);
79 cload.Close_Micro_Chunk();