Code
101template<class T>102bool CvDllDatabaseUtility::PrefetchCollection(std::vector<T*>& kCollection, const char* tableName)103{104 cvStopWatch kPerfTest(tableName, "xml-perf.log");105106 //First release any previous data in the collection.107 for(std::vector<T*>::iterator it = kCollection.begin(); it != kCollection.end(); ++it)108 {109 T* pkItem = (*it);110 delete pkItem;111 }112 kCollection.clear();113114 //Repopulate!115 size_t index = 0;116 Database::Results kResults;117 CvDatabaseUtility kUtility;118119 if(DB.SelectWhere(kResults, tableName, "ID > -1 ORDER BY ID"))120 {121 while(kResults.Step())122 {123 size_t Id = kResults.GetInt("ID");124 CvAssertMsg(index <= Id, "This should never happen!")125126 while(Id > index)127 {128 kCollection.push_back(NULL);129 index++;130 }131132 T* pkItem = FNEW(T, c_eCiv5GameplayDLL, 0);133 pkItem->CacheResults(kResults, kUtility);134 kCollection.push_back(pkItem);135 index++;136 }137 }138 else139 {140 char szErrorMsg[512];141 sprintf_s(szErrorMsg, "PrefetchCollection: Cannot find table '%s'. Error - %s", tableName, DB.ErrorMessage());142 CvAssertMsg(false, szErrorMsg);143144 }145146 return true;147}