Guest User

Untitled

a guest
Oct 17th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.40 KB | None | 0 0
  1.  
  2. Int NumObjsSaved=0;
  3.  
  4. void WriteObject(BaseObj* obj){
  5.     if(!obj->visited){
  6.         int index = NumObjsSaved++;
  7.         obj->tableIndex = index;
  8.         obj->visited=true;
  9.         fwrite1(0);
  10.     }else{
  11.         fwrite4((obj->tableIndex << 1) | 1);
  12.         return;
  13.     }
  14.    
  15.     fwrite4(obj->typeIndex);
  16.     //----[ write non-obj stuff here ]-------[
  17.     // like chars and stuff
  18.     //---------------------------------------/
  19.    
  20.    
  21.     foreach(obj->children, pchild){
  22.         WriteObject(pchild);
  23.     }
  24.    
  25.     obj->visited=false;
  26. }
  27.  
  28.  
  29. void WriteRootObj(BaseObj* root){
  30.     NumObjsSaved = 0;
  31.    
  32.     int patchOffs = ftell();
  33.     fwrite4(0);
  34.    
  35.     WriteObject(root);
  36.  
  37.     int curPos = ftell();
  38.     fseek(patchOffs);
  39.     fwrite4(NumObjsSaved); 
  40.     fseek(curPos);
  41. }
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48. ------------------------------
  49.  
  50.  
  51.  
  52. BaseObj** RefObjs;
  53.  
  54. int NumObjsLoaded=0;
  55. BaseObj* LoadObj(){
  56.     int rIndex = fread1();
  57.     if(rIndex){
  58.         char* p = (char*)&rIndex;
  59.         fread(&p[1],3);
  60.         return RefObjs[rIndex >> 1];
  61.     }
  62.    
  63.     int typeIndex = fread4();
  64.    
  65.     BaseObj* obj = CreateObjOfType(typeIndex);
  66.    
  67.     RefObjs[NumObjsLoaded++] = obj;
  68.    
  69.     //----[ read non-obj stuff here ]-------[
  70.     // like chars and stuff
  71.     //--------------------------------------/
  72.    
  73.     foreach(obj->children, ppchild){
  74.         *ppchild = LoadObject();
  75.     }
  76.    
  77. }
  78.  
  79. BaseObj*  LoadRootObj(){
  80.     int NumObjs = fread4();
  81.     RefObjs = new BaseObj*[NumObjs];
  82.    
  83.     NumObjsLoaded = 0;
  84.    
  85.     BaseObj* root = LoadObj();
  86.    
  87.     delete RefObjs;
  88.    
  89.    
  90.     return root;
  91. }
Add Comment
Please, Sign In to add comment