////////////////////////////////////////////////////////////////////////// // destroyResource void CsCore::destroyResource( CsResource* pResource ) { std::lock_guard< std::recursive_mutex > Lock( ContainerLock_ ); // Find the resource in the list. TResourceListIterator FoundIt = LoadedResources_.end(); for( TResourceListIterator It( LoadedResources_.begin() ); It != LoadedResources_.end(); ++It ) { if( (*It) == pResource ) { FoundIt = It; break; } } // If it's in the loaded list we need to put it into the unloading list, // otherwise delete it right away (imported resource). if( FoundIt != LoadedResources_.end() ) { // Remove from list. LoadedResources_.erase( FoundIt ); // Put into unloading list. UnloadingResources_.push_back( pResource ); } else { pResource->getClass()->destruct( pResource ); BcMemFree( pResource ); } }
////////////////////////////////////////////////////////////////////////// // processUnloadingResources void CsCore::processUnloadingResources() { std::lock_guard< std::recursive_mutex > Lock( ContainerLock_ ); while( UnloadingResources_.size() > 0 ) { TResourceList ResourceList = UnloadingResources_; TResourceListIterator It( ResourceList.begin() ); while( It != ResourceList.end() ) { CsResource* pResource = (*It); // Destroy resource. pResource->destroy(); // Free resource. pResource->getClass()->destruct( pResource ); BcMemFree( pResource ); // Next. ++It; } UnloadingResources_.clear(); } }
////////////////////////////////////////////////////////////////////////// // loadJsonFile BcBool CsPackageImporter::loadJsonFile( const BcChar* pFileName, Json::Value& Root ) { BcBool Success = BcFalse; BcFile File; if( File.open( pFileName ) ) { const BcU8* pData = File.readAllBytes(); Json::Reader Reader; if( Reader.parse( (const char*)pData, (const char*)pData + File.size(), Root ) ) { Success = BcTrue; } else { PSY_LOG( "Failed to parse Json:\n %s\n", Reader.getFormatedErrorMessages().c_str() ); BcAssertMsg( BcFalse, "Failed to parse \"%s\", see log for more details.", pFileName ); } BcMemFree( (void*)pData ); } else { BcAssertMsg( BcFalse, "Failed to load \"%s\"", pFileName ); } return Success; }
////////////////////////////////////////////////////////////////////////// // Dtor CsPackageLoader::~CsPackageLoader() { BcAssertMsg( hasPendingCallback() == BcFalse, "CsPackageLoader: Callbacks are pending." ); File_.close(); BcMemFree( pPackageData_ ); pPackageData_ = NULL; }