void Directory::GetDataDArray ( const char *dataName, DArray<int> *darray ) const { AppAssert( dataName ); AppAssert( darray ); // // First try to find a directory representing this DArray Directory *dir = GetDirectory( dataName ); if ( !dir ) { AppReleaseAssert(false, "Failed to find DArray named %s", dataName ); return; } // // Get info about the DArray char *tID = dir->GetDataString("tID"); int size = dir->GetDataInt("Size"); if ( strcmp(tID, "DArray<int>") != 0 || size == DIRECTORY_SAFEINT) { AppDebugOut("Found object %s but it doesn't appear to be a DArray\n" ); } // // Iterate through it, loading data darray->SetSize( size ); for ( int i = 0; i < size; ++i ) { char indexName[16]; sprintf ( indexName, "[i %d]", i ); Directory *thisIndex = dir->GetDirectory( indexName ); if ( !thisIndex ) { AppDebugOut("Error loading DArray %s : index %d is missing\n", dataName, i ); } else { bool used = thisIndex->GetDataBool("[Used]"); if ( !used ) { if ( darray->ValidIndex(i) ) darray->RemoveData(i); } else { int theData = thisIndex->GetDataInt("[Data]"); darray->PutData( theData, i ); } } } }
void Directory::GetDataLList ( const char *dataName, LList<Directory *> *llist ) const { AppAssert( dataName ); AppAssert( llist ); // // First try to find a directory representing this LList Directory *dir = GetDirectory( dataName ); if ( !dir ) { AppDebugOut("Failed to find LList named %s\n", dataName); return; } // // Get info about the LList char *tID = dir->GetDataString("tID"); int size = dir->GetDataInt("Size"); if ( strcmp(tID, "LList<Directory *>") != 0 || size == DIRECTORY_SAFEINT) { AppDebugOut("Found object %s but it doesn't appear to be a LList\n"); } // // Iterate through it, loading data for ( int i = 0; i < size; ++i ) { char indexName[16]; sprintf ( indexName, "[i %d]", i ); Directory *thisIndex = dir->GetDirectory( indexName ); if ( !thisIndex ) { AppDebugOut("Error loading LList %s : index %d is missing\n", dataName, i); } else { if( thisIndex->m_subDirectories.ValidIndex(0) ) { Directory *theDir = thisIndex->m_subDirectories[0]; llist->PutData( theDir ); } else { AppDebugOut("Error loading LList %s : could not find directory in index %d\n", dataName, i); } } } }
Directory *Directory::GetDirectory ( const char *dirName ) const { AppAssert( dirName ); char *firstSubDir = GetFirstSubDir ( dirName ); char *otherSubDirs = GetOtherSubDirs ( dirName ); if ( firstSubDir ) { Directory *subDir = NULL; // // Search for that subdirectory for ( int i = 0; i < m_subDirectories.Size(); ++i ) { if ( m_subDirectories.ValidIndex(i) ) { Directory *thisDir = m_subDirectories[i]; AppAssert( thisDir ); if ( strcmp ( thisDir->m_name, firstSubDir ) == 0 ) { subDir = thisDir; break; } } } delete[] firstSubDir; if ( !otherSubDirs ) { return subDir; } else { return subDir->GetDirectory( otherSubDirs ); } } else { AppReleaseAssert( false, "Error getting directory %s", dirName ); return NULL; } }