本文整理汇总了C++中IArchive::StartClass方法的典型用法代码示例。如果您正苦于以下问题:C++ IArchive::StartClass方法的具体用法?C++ IArchive::StartClass怎么用?C++ IArchive::StartClass使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IArchive
的用法示例。
在下文中一共展示了IArchive::StartClass方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Serialize
void CPrecacheObject::Serialize( IArchive &ar )
{
if( ar.IsReading() )
{
// Version
ar.Read( m_iVersion );
// Number of Entries
unsigned int tmpCount;
ar.Read( tmpCount );
// Read Entries and insert into the list
for( unsigned int i = 0; i < tmpCount; i++ )
{
CHashString hszResourceName;
StdString szResourceName;
ar.Read( szResourceName );
hszResourceName.Init( szResourceName );
m_ResourceSet.insert( hszResourceName.GetUniqueID());
}
}
else
{
// Version
ar.Write( m_iVersion, _T("Version") );
// Number of Entries
ar.Write( (int)m_ResourceSet.size(), _T("NumEntries") );
// Write out all the Entries from the list
RESOURCESET::iterator itr = m_ResourceSet.begin();
StdString szPrecacheEntry( _T("PrecacheEntry") );
while( itr != m_ResourceSet.end() )
{
ar.StartClass( szPrecacheEntry );
ar.Write( m_ToolBox->GetHashString( *itr ), _T("Name") );
ar.EndClass();
itr++;
}
}
}
示例2: Serialize
void CSchemaItem::Serialize( IArchive &ar )
{
if( ar.IsReading() )
{
StdString name; // Dummy variable to read the name. It should already be stored as CObjectTemplate
StdString type;
StdString attributeClass;
ar.Read( m_fVersion, _T("Version") );
ar.Read( name, _T("Name") );
ar.Read( type, _T("Type") );
ar.Read( attributeClass, _T("Class") );
m_hszLabel.Init( name );
m_hszType.Init( type );
m_hszClass.Init( attributeClass );
DBRead( &m_DefaultValue, &ar, _T("Default") ); // IMPORTANT: DBRead is dependent on m_hszType. Make sure m_hszType has been initialized before calling DBRead.
// NOTE: We are assuming the order in which schema items are instantiated will be
// the order in which to read data items.
if( m_Schema != NULL )
{
m_Schema->RegisterSchemaItem( this );
}
}
else
{
ar.StartClass(_T("CSchemaItem"));
ar.Write( m_fVersion, _T("Version") );
ar.Write( m_hszLabel.GetString(), _T("Name") );
ar.Write( m_hszType.GetString(), _T("Type") );
ar.Write( m_hszClass.GetString(), _T("Class") );
DBWrite( &m_DefaultValue, &ar, _T("Default") );
ar.EndClass();
}
}
示例3: Serialize
//---------------------------------------------------------------------
// Function: Serialize
// Description: serializes the values
// (deserializaton if ar.IsReading() returns ture)
// The order of the values if bound
// Parameters: ar - IArchive object which shows if we are reading or writing
//---------------------------------------------------------------------
void CProjectSettings::Serialize(IArchive &ar)
{
unsigned int i;
if (ar.IsReading())
{
// Restore everthing to default
Init();
// set the variables according to the data in the file
ar.Read(m_szProjectName);
ar.Read(m_szVersion);
ar.Read(m_szDirectory);
ar.Read(m_szStartScriptName);
ar.Read(m_szLastWorldFile);
ar.Read(m_iNumDlls);
// clear the previous Dll list
m_ProjectDLLs.clear();
for (i=0; i<m_iNumDlls; i++)
{
StdString dllName;
ar.Read(dllName);
m_ProjectDLLs.push_back( dllName );
}
//reading the other tags are done in the loadSaver project
//it attempts to call the serialize function of the objects
//with the names of the xml tags.
}
else
{
ar.Write(m_szProjectName, "ProjectName");
ar.Write(m_szVersion, "Version");
ar.Write(m_szDirectory, "Directory");
ar.Write(m_szStartScriptName, "StartupScript");
ar.Write(m_szLastWorldFile, "LastWorldFile");
ar.Write(m_iNumDlls, "NumDLLS");
for (i=0; i<m_iNumDlls; i++)
{
ar.StartClass("ProjectDLL");
ar.Write(m_ProjectDLLs[i], "name");
ar.EndClass();
}
}
// both save and load means that no change has happend "since last save"
IsChangedSinceLastSave = FALSE;
// make the project ready to save/close
// save happens only if IsChangedSince... is also true, so incorrect
// data can't be saved, because the dialog box checks consistency.
SetSettingsStateConsistency( TRUE );
//TODO: the following are necessary only on project load?
// than they can be moved to the load part of the if branches above...
// change EE resource directory manually
EngineGetToolBox()->SetDirectories(NULL , &m_szDirectory);
// Loading a new project usually changes the resource directory as well.
// As the m_szDirectory setter would send out the change message but it is
// not called if on project load, we need to send it manually
// Although the new dir is the content of the message, the most plugins will
// use only the message to recognize they need to refresh their value and they
// we get the new value from EE toolbox instead of the content of this message.
SETWORKINGDIRECTORIESPARAMS swdp;
swdp.ResourceDirectory = NULL;
swdp.BaseDirectory = &m_szDirectory;
static DWORD msgHash_SetDirectories = CHashString(_T("SetResourceDirectory")).GetUniqueID();
EngineGetToolBox()->SendMessage(msgHash_SetDirectories, sizeof(SETWORKINGDIRECTORIESPARAMS), &swdp );
// we need to set the current working dir of the OS.
// this is a win32 plugin, so we can call it directly:
SetCurrentDirectory( m_szDirectory.c_str() );
}
示例4: Serialize
void CLuaScriptVarList::Serialize(IArchive &ar )
{
if(ar.IsReading())
{
// Read the Schema File Name
StdString tmpFileName;
ar.Read( tmpFileName, _T("Schema") );
m_SchemaFileName = tmpFileName;
// Read the VarCount for Parsing Purposes
unsigned int VarCount = 0;
ar.Read( VarCount, _T("VarCount") );
for( unsigned int i = 0; i < VarCount; i++ )
{
CLuaScriptVar tmpVar;
StdString tmpStringName;
StdString tmpStringValue;
bool tmpBoolIsDefault;
ar.Read( tmpStringName, _T("Name") );
ar.Read( tmpStringValue, _T("Value") );
ar.Read( tmpBoolIsDefault, _T("Default") );
tmpVar.SetName( tmpStringName );
tmpVar.SetValue( tmpStringValue );
tmpVar.SetIsDefault( tmpBoolIsDefault );
bool bFound = false;
for( unsigned int j = 0; j < m_Variables.size(); j++ )
{
if( tmpVar.GetName() == m_Variables[j].GetName() )
{
bFound = true;
if( tmpVar.GetValueAsString() != m_Variables[j].GetValueAsString() )
{
m_Variables[j].SetValue( tmpVar.GetValueAsString() );
m_Variables[j].SetIsDefault( false );
}
break;
}
}
if( bFound == false )
{
m_Variables.push_back( tmpVar );
}
}
}
else
{
ar.Write( m_SchemaFileName.GetString(), _T("Schema") );
// Read the VarCount for Parsing Purposes
ar.Write( (unsigned int)m_Variables.size(), _T("VarCount") );
for( unsigned int i = 0; i < m_Variables.size(); i++ )
{
ar.StartClass(_T("CLuaScriptVar") );
ar.Write( m_Variables[i].GetName(), _T("Name") );
ar.Write( m_Variables[i].GetValueAsString(), _T("Value") );
ar.Write( m_Variables[i].GetIsDefault(), _T("Default") );
ar.EndClass();
}
}
}
示例5: Serialize
void CTimeOfDayObject::Serialize( IArchive &ar )
{
if(ar.IsReading())
{
// clear lists otherwise we will keep adding to them!!
m_vSunLightFrames.clear();
m_vFogFrames.clear();
ar.Read( m_fTimeStart, _T("TimeStart") );
ar.Read( m_fTimeRate, _T("TimeRate") );
int iNumSunLightFrames = 0;
ar.Read( iNumSunLightFrames, _T("NumSunLightFrames") );
int iNumFogFrames = 0;
ar.Read( iNumFogFrames, _T("NumFogFrames") );
for( int i = 0; i < iNumSunLightFrames; i++ )
{
SUNLIGHTKEYFRAME tmpSunLightFrame;
ar.Read( tmpSunLightFrame.m_wszName, _T("Name") );
ar.Read( tmpSunLightFrame.m_AmbientColor, _T("AmbientColor") );
ar.Read( tmpSunLightFrame.m_FullbrightColor, _T("FulLBrightColor") );
ar.Read( tmpSunLightFrame.m_fDawnWeight, _T("DawnWeight") );
ar.Read( tmpSunLightFrame.m_fNightWeight, _T("NightWeight") );
m_vSunLightFrames.push_back( tmpSunLightFrame );
}
for( int i = 0; i < iNumFogFrames; i++ )
{
FOGKEYFRAME tmpFogFrame;
ar.Read( tmpFogFrame.m_wszName, _T("Name") );
ar.Read( tmpFogFrame.m_FogColor, _T("FogColor") );
ar.Read( tmpFogFrame.m_fFogStart, _T("FogStart") );
ar.Read( tmpFogFrame.m_fFogEnd, _T("FogEnd") );
m_vFogFrames.push_back( tmpFogFrame );
}
}
else
{
ar.Write( m_fTimeStart, _T("TimeStart") );
ar.Write( m_fTimeRate, _T("TimeRate") );
ar.Write( (int)m_vSunLightFrames.size(), _T("NumSunLightFrames") );
ar.Write( (int)m_vFogFrames.size(), _T("NumFogFrames") );
for( unsigned int i = 0; i < m_vSunLightFrames.size(); i++ )
{
ar.StartClass( _T("SunLightFrame") );
ar.Write( m_vSunLightFrames[i].m_wszName, _T("Name") );
ar.Write( m_vSunLightFrames[i].m_AmbientColor, _T("AmbientColor") );
ar.Write( m_vSunLightFrames[i].m_FullbrightColor, _T("FulLBrightColor") );
ar.Write( m_vSunLightFrames[i].m_fDawnWeight, _T("DawnWeight") );
ar.Write( m_vSunLightFrames[i].m_fNightWeight, _T("NightWeight") );
ar.EndClass();
}
for( unsigned int i = 0; i < m_vFogFrames.size(); i++ )
{
ar.StartClass( _T("FogFrame") );
ar.Write( m_vFogFrames[i].m_wszName, _T("Name") );
ar.Write( m_vFogFrames[i].m_FogColor, _T("FogColor") );
ar.Write( m_vFogFrames[i].m_fFogStart, _T("FogStart") );
ar.Write( m_vFogFrames[i].m_fFogEnd, _T("FogEnd") );
ar.EndClass();
}
}
}
示例6: Serialize
//.........这里部分代码省略.........
StdString szEntryObjName;
CHashString hszEntryObjBase, hszEntryObjName;
static CHashString hszEntryType(_T("CLanguageEntry"));
for (UINT i=0; i<m_iNumEntries; i++)
{
szEntryObjName = m_hszLanguageName.GetString();
szEntryObjName += _T("_Entry");
hszEntryObjBase = szEntryObjName;
GENERATEUNIQUEOBJECTNAMEPARAMS generateNameParams;
generateNameParams.name = &hszEntryObjBase;
generateNameParams.newname = &hszEntryObjName;
static DWORD msgHash_GenerateUniqueObjectName = CHashString(_T("GenerateUniqueObjectName")).GetUniqueID();
m_ToolBox->SendMessage(msgHash_GenerateUniqueObjectName, sizeof(generateNameParams), &generateNameParams );
cop.name = &hszEntryObjName;
cop.parentName = GetName();
cop.typeName = &hszEntryType;
if (m_ToolBox->SendMessage(msgCreateObject, sizeof(CREATEOBJECTPARAMS), &cop) == MSG_HANDLED)
{
sop.name = &hszEntryObjName;
sop.archive = &ar;
m_ToolBox->SendMessage(msgSerializeObject, sizeof(SERIALIZEOBJECTPARAMS), &sop);
iop.name = &hszEntryObjName;
m_ToolBox->SendMessage(msgInitObject, sizeof(INITOBJECTPARAMS), &iop);
IObject *entryObj = SINGLETONINSTANCE(CLanguageManager)->GetObjectByName(&hszEntryObjName, &hszEntryType);
if (entryObj)
{
ILanguageEntry *langEntry = dynamic_cast<ILanguageEntry*>(entryObj);
if (langEntry)
{
IHashString *hsKey = langEntry->GetKey();
if (hsKey)
{
ENTRYKEYMAP::iterator mapIter = m_mEntryMapByKey.find(hsKey->GetUniqueID());
if (mapIter == m_mEntryMapByKey.end())
{
m_mEntryMapByKey[hsKey->GetUniqueID()] = langEntry;
}
else
{
m_ToolBox->Log(LOGERROR, _T("%s %d: duplicate key found for %s, deleting language entry!\n"),
__FILE__, __LINE__, hsKey->GetString());
DELETEOBJECTPARAMS dop;
dop.name = &hszEntryObjName;
static DWORD msgDeleteObject = CHashString(_T("DeleteObject")).GetUniqueID();
m_ToolBox->SendMessage(msgDeleteObject, sizeof(DELETEOBJECTPARAMS), &dop);
}
}
else
{
m_ToolBox->Log(LOGERROR, _T("%s %d: could not get key string from entry!\n"),
__FILE__, __LINE__);
}
}
else
{
m_ToolBox->Log(LOGERROR, _T("%s %d: could not cast to language entry!\n"),
__FILE__, __LINE__);
}
}
else
{
m_ToolBox->Log(LOGERROR, _T("%s %d: could not get object pointer from manager!\n"),
__FILE__, __LINE__);
}
}
else
{
m_ToolBox->Log(LOGERROR, _T("%s %d: could not create entry object %s!\n"),
__FILE__, __LINE__, hszEntryObjName.GetString());
}
}
}
else
{
ar.Write(saveVersion, _T("Version"));
ar.Write(m_hszLanguageName.GetString(), _T("LanguageName"));
ar.Write(m_iNumEntries, _T("NumEntries"));
ENTRYKEYMAP::iterator mapIter = m_mEntryMapByKey.begin();
for (; mapIter != m_mEntryMapByKey.end(); mapIter++)
{
ILanguageEntry *entry = mapIter->second;
if (entry)
{
ar.StartClass(_T("CLanguageEntry"));
entry->Serialize(ar);
ar.EndClass();
}
}
}
}