Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Int NumObjsSaved=0;
- void WriteObject(BaseObj* obj){
- if(!obj->visited){
- int index = NumObjsSaved++;
- obj->tableIndex = index;
- obj->visited=true;
- fwrite1(0);
- }else{
- fwrite4((obj->tableIndex << 1) | 1);
- return;
- }
- fwrite4(obj->typeIndex);
- //----[ write non-obj stuff here ]-------[
- // like chars and stuff
- //---------------------------------------/
- foreach(obj->children, pchild){
- WriteObject(pchild);
- }
- obj->visited=false;
- }
- void WriteRootObj(BaseObj* root){
- NumObjsSaved = 0;
- int patchOffs = ftell();
- fwrite4(0);
- WriteObject(root);
- int curPos = ftell();
- fseek(patchOffs);
- fwrite4(NumObjsSaved);
- fseek(curPos);
- }
- ------------------------------
- BaseObj** RefObjs;
- int NumObjsLoaded=0;
- BaseObj* LoadObj(){
- int rIndex = fread1();
- if(rIndex){
- char* p = (char*)&rIndex;
- fread(&p[1],3);
- return RefObjs[rIndex >> 1];
- }
- int typeIndex = fread4();
- BaseObj* obj = CreateObjOfType(typeIndex);
- RefObjs[NumObjsLoaded++] = obj;
- //----[ read non-obj stuff here ]-------[
- // like chars and stuff
- //--------------------------------------/
- foreach(obj->children, ppchild){
- *ppchild = LoadObject();
- }
- }
- BaseObj* LoadRootObj(){
- int NumObjs = fread4();
- RefObjs = new BaseObj*[NumObjs];
- NumObjsLoaded = 0;
- BaseObj* root = LoadObj();
- delete RefObjs;
- return root;
- }
Add Comment
Please, Sign In to add comment