fiki574_CRO

UObject::Serialize

Jun 29th, 2015
290
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.86 KB | None | 0 0
  1. void UObject::Serialize( FArchive& Ar )
  2. {
  3.     SetFlags( RF_DebugSerialize );
  4.  
  5.     // Make sure this object's class's data is loaded.
  6.     if( Class != UClass::StaticClass() )
  7.         Ar.Preload( Class );
  8.  
  9.     // Special info.
  10.     if( (!Ar.IsLoading() && !Ar.IsSaving()) )
  11.         Ar << Name << Outer << Class;
  12.     if( !Ar.IsLoading() && !Ar.IsSaving() )
  13.         Ar << _Linker;
  14.  
  15.     // Execution stack.
  16.     //!!how does the stack work in conjunction with transaction tracking?
  17.     if( !Ar.IsTrans() )
  18.     {
  19.         if( GetFlags() & RF_HasStack )
  20.         {
  21.             if( !StateFrame )
  22.                 StateFrame = new FStateFrame( this );
  23.             Ar << StateFrame->Node << StateFrame->StateNode;
  24.             Ar << StateFrame->ProbeMask;
  25.             Ar << StateFrame->LatentAction;
  26.             if( StateFrame->Node )
  27.             {
  28.                 Ar.Preload( StateFrame->Node );
  29.                 if( Ar.IsSaving() && StateFrame->Code )
  30.                     check(StateFrame->Code>=&StateFrame->Node->Script(0) && StateFrame->Code<&StateFrame->Node->Script(StateFrame->Node->Script.Num()));
  31.                 INT Offset = StateFrame->Code ? StateFrame->Code - &StateFrame->Node->Script(0) : INDEX_NONE;
  32.                 Ar << Offset;
  33.                 if( Offset!=INDEX_NONE )
  34.                     if( Offset<0 || Offset>=StateFrame->Node->Script.Num() )
  35.                         appErrorf( TEXT("%s: Offset mismatch: %i %i"), *GetFullName(), Offset, StateFrame->Node->Script.Num() );
  36.                 StateFrame->Code = Offset!=INDEX_NONE ? &StateFrame->Node->Script(Offset) : NULL;
  37.             }
  38.             else StateFrame->Code = NULL;
  39.         }
  40.         else if( StateFrame )
  41.         {
  42.             delete StateFrame;
  43.             StateFrame = NULL;
  44.         }
  45.     }
  46.  
  47.     // Serialize object properties which are defined in the class.
  48.     if( Class != UClass::StaticClass() )
  49.     {
  50.         if( (Ar.IsLoading() || Ar.IsSaving()) && !Ar.IsTrans() )
  51.             GetClass()->SerializeTaggedProperties( Ar, (BYTE*)this, Class );
  52.         else
  53.             GetClass()->SerializeBin( Ar, (BYTE*)this, 0 );
  54.     }
  55.  
  56.     // Memory counting.
  57.     SIZE_T Size = GetClass()->GetPropertiesSize();
  58.     Ar.CountBytes( Size, Size );
  59. }
Advertisement
Add Comment
Please, Sign In to add comment