#include <fsc_GenerationMgr.h>


Definition at line 53 of file fsc_GenerationMgr.h.
Public Member Functions | |
| fsc_GenerationMgr (df_SplitInfo &a_splitInfo) | |
| Default constructor. | |
| fsc_GenerationMgr (fsc_DataL_t &a_dataL) | |
| virtual | ~fsc_GenerationMgr () |
| fsc_GenInsertAct_e | GetGenInsertAct () |
| void | Insert (df_SplitInfo &a_splitInfo) |
| Insert a split into Data location tree. | |
| void | Remove (ivd_MediaKey_t a_mediumKey, ivd_MedVolNum_t a_medVolNum) |
| remove all entries from particular volume. | |
| bool | Remove (ivd_MediaKey_t a_mediumKey, ivd_MedVolNum_t a_medVolNum, UInt32_t a_blockOffs) |
| Remove one particular entry. | |
| fsc_Generation * | FindGen (ivd_MigrationID_t a_migID) |
| find Generation object | |
| void | GetCopiesPos (ivd_CopiesPos_v_t &a_copiesPos_v, ivd_MigrationID_t &a_migID, fsc_MigInfo_t &a_migInfo) |
| void | CheckLastGen (string &a_status, ivd_MigrationID_t &a_migID) |
| bool | Write2DB (fsc_DataL_t &a_dataL, fio_Transaction &a_trans) |
| Write all changes to DB, update nextEntry structure to proper index and size return true if nextEntry structure is changed. | |
| void | Dump (ostream &os) |
| bool | TreeWalk (fsc_Collector &a_collector) |
Public Attributes | |
| fsc_Generation_p_l_t | m_generation_p_l |
| log_CLASSID_m | |
Private Attributes | |
| fsc_GenInsertAct_e | m_genInsertAct |
| what happened when insert gen? add newest one update last update other used to proper update NSC attributes | |
| ivd_RecordIDX_v_t | m_idxOfChainedVec_v |
Friends | |
| class | ut_fsc_GenerationMgr |
| fsc_GenerationMgr::fsc_GenerationMgr | ( | df_SplitInfo & | a_splitInfo | ) |
Default constructor.
Definition at line 53 of file fsc_GenerationMgr.cpp.
References log_FUNC_m, and m_generation_p_l.
00055 : 00056 fio_Vector(*g_generationRF_p), 00057 m_genInsertAct(giaNEWEST_GEN) 00058 { 00059 log_FUNC_m(fsc_GenerationMgr(df_SplitInfo)); 00060 00061 fsc_Generation* gen_p = new fsc_Generation(a_splitInfo); 00062 m_generation_p_l.push_front(gen_p); 00063 } //============================================================================//
| fsc_GenerationMgr::fsc_GenerationMgr | ( | fsc_DataL_t & | a_dataL | ) |
Definition at line 66 of file fsc_GenerationMgr.cpp.
References alloca(), c_lastVecIdx, c_maxRFVecSize, cmn_HexDump(), cmn_Num2Str(), dbg_DETAIL, g_generationRF_p, fsc_DataL_t::generationIdx, ie_FSC_INV_GENERATION_NUM, log_DBG_m, log_FUNC_m, m_generation_p_l, m_idxOfChainedVec_v, fio_Vector::m_vectorSize, fio_UnusedRec_t::next, fsc_DataL_t::numOfAllGen, fsc_DataL_t::numOfElement, and fio_RelFile::ReadRec().
00067 : 00068 fio_Vector(*g_generationRF_p, a_dataL.numOfElement, a_dataL.generationIdx, false), 00069 m_genInsertAct(giaUNKNOWN_ACT) 00070 { 00071 log_FUNC_m(fsc_GenerationMgr); 00072 00073 UInt16_t numOfElement = a_dataL.numOfElement; 00074 00075 if (a_dataL.numOfElement == 0) { // correct numOfElement and m_vectorSize 00076 numOfElement = c_maxRFVecSize; 00077 m_vectorSize = numOfElement; 00078 } 00079 00080 UInt16_t lastElIdx = numOfElement - 1; 00081 ivd_RecordIDX_t generationIdx = a_dataL.generationIdx; 00082 log_DBG_m(dbg_DETAIL,"Get " << numOfElement 00083 << " generations from idx " << generationIdx); 00084 00085 if (generationIdx > 0) { 00086 // allocate space for max possible vec 256 00087 fsc_Generation_t *genData = reinterpret_cast<fsc_Generation_t*> 00088 (alloca(c_maxRFVecSize * sizeof(fsc_Generation_t))); 00089 00090 g_generationRF_p->ReadRec(generationIdx, genData, numOfElement); 00091 00092 log_DBG_m(dbg_DETAIL, "R Generations from = " << generationIdx << endl << 00093 cmn_HexDump(genData, numOfElement * sizeof(fsc_Generation_t), sizeof(fsc_Generation_t), false) ); 00094 00095 // if more chained vectors exist than last element is index to next vector in chain 00096 fsc_Generation_t *end_p = &genData[a_dataL.numOfAllGen >= c_maxRFVecSize 00097 ? numOfElement - 1 00098 : numOfElement]; 00099 fsc_Generation_t *p = genData; 00100 for (; p < end_p; ++p) { 00101 fsc_Generation* gen_p = new fsc_Generation(*p); 00102 m_generation_p_l.push_back(gen_p); 00103 } 00104 00105 if (a_dataL.numOfAllGen >= c_maxRFVecSize) { 00106 ivd_RecordIDX_t vecIdx = reinterpret_cast<fio_UnusedRec_t*>(&genData[lastElIdx])->next; 00107 end_p = &genData[c_lastVecIdx]; 00108 fio_UnusedRec_t &lastRec_p = *reinterpret_cast<fio_UnusedRec_t*>(&genData[c_lastVecIdx]); 00109 while (vecIdx > 0) { 00110 m_idxOfChainedVec_v.push_back(vecIdx); 00111 log_DBG_m(dbg_DETAIL,"Linked vector. Get " << c_maxRFVecSize 00112 << " generations from idx " << vecIdx); 00113 g_generationRF_p->ReadRec(vecIdx, genData, c_maxRFVecSize); 00114 log_DBG_m(dbg_DETAIL, "R Generations from = " << vecIdx << endl << 00115 cmn_HexDump(genData, 00116 c_maxRFVecSize * sizeof(fsc_Generation_t), 00117 sizeof(fsc_Generation_t), 00118 false) ); 00119 00120 fsc_Generation_t *p = genData; 00121 for (; p < end_p; ++p) { 00122 fsc_Generation* gen_p = new fsc_Generation(*p); 00123 log_DBG_m(dbg_DETAIL, "gen_p = 0x" << hex << gen_p << dec); 00124 m_generation_p_l.push_back(gen_p); 00125 } 00126 vecIdx = lastRec_p.next; 00127 } 00128 if (a_dataL.numOfAllGen != m_generation_p_l.size()) { 00129 throw ivd_InternalError(ie_FSC_INV_GENERATION_NUM, 00130 cmn_Num2Str(m_generation_p_l.size()) 00131 + " gen num got from generation.lrf != a_dataL.numOfAllGen " 00132 + cmn_Num2Str(a_dataL.numOfAllGen)); 00133 } 00134 } 00135 } 00136 } //============================================================================//

| fsc_GenerationMgr::~fsc_GenerationMgr | ( | ) | [virtual] |
Definition at line 139 of file fsc_GenerationMgr.cpp.
References m_generation_p_l.
00140 { 00141 for (fsc_Generation_p_l_i iter = m_generation_p_l.begin(); 00142 iter != m_generation_p_l.end(); 00143 iter++) { 00144 delete *iter; 00145 } 00146 }
| fsc_GenInsertAct_e fsc_GenerationMgr::GetGenInsertAct | ( | ) | [inline] |
Definition at line 85 of file fsc_GenerationMgr.h.
References m_genInsertAct.
Referenced by fsc_DataL::Insert().
00085 { return m_genInsertAct; };

| void fsc_GenerationMgr::Insert | ( | df_SplitInfo & | a_splitInfo | ) |
Insert a split into Data location tree.
Definition at line 150 of file fsc_GenerationMgr.cpp.
References dbg_NORM, df_SplitInfo::Dump(), fsc_maxGenerations_c, giaINSERT_OLD_GEN, giaINSERT_ONE_BEFORE_LAST_GEN, giaLAST_GEN_UPDATED, giaNEWEST_GEN, giaONE_BEFORE_LAST_GEN_UPDATED, giaOTHER_GEN_UPDATED, log_DBG_m, log_FUNC_m, log_WRN_m, fio_Vector::m_changed, m_generation_p_l, m_genInsertAct, and df_SplitInfo::migrationID.
Referenced by fsc_DataL::Insert().
00150 { 00151 log_FUNC_m(Insert); 00152 00153 ivd_MigrationID_t migID = a_splitInfo.migrationID; 00154 fsc_Generation_p_l_i iter = m_generation_p_l.begin(); 00155 00156 // take proper sort position, descending sort by migID 00157 while (iter != m_generation_p_l.end() 00158 && (**iter).m_migrationID > migID) { 00159 ++iter; 00160 } 00161 00162 // if generation is not here jet 00163 if ( iter == m_generation_p_l.end() // end of the list 00164 || (**iter ).m_migrationID < migID) {// no element with same migID 00165 // Empty, just continue 00166 } 00167 else { 00168 // fix bug 1228, size may change when splits 00169 //if ((*iter)->m_size != a_splitInfo.fileSize) { 00170 // throw ivd_InternalError(ie_FSC_INV_SPLIT_INFO , 00171 // string("Inserted split match with migrationID, but has different file size.") + 00172 // " Gen MigID = " + cmn_Num2Str(migID) + 00173 // " Gen FileSize = " + cmn_Num2Str((*iter)->m_size)+ a_splitInfo.Dump(), 00174 // true); 00175 //} 00176 (*iter)->Insert(a_splitInfo); 00177 if (iter == m_generation_p_l.begin()) { 00178 m_genInsertAct = giaLAST_GEN_UPDATED; 00179 } 00180 else if (iter == ++(m_generation_p_l.begin())) { 00181 m_genInsertAct = giaONE_BEFORE_LAST_GEN_UPDATED; 00182 } 00183 else { 00184 m_genInsertAct = giaOTHER_GEN_UPDATED; 00185 } 00186 return; 00187 } 00188 // now iter must point to end or to elemet with smaller migID 00189 00190 fsc_Generation* gen_p = new fsc_Generation(a_splitInfo); 00191 00192 // newest if inserted to first place 00193 if (iter == m_generation_p_l.begin()) { 00194 m_genInsertAct = giaNEWEST_GEN; 00195 } 00196 else if (iter == ++(m_generation_p_l.begin())) { 00197 m_genInsertAct = giaINSERT_ONE_BEFORE_LAST_GEN; 00198 } 00199 else { 00200 m_genInsertAct = giaINSERT_OLD_GEN; 00201 } 00202 00203 m_generation_p_l.insert(iter, gen_p); 00204 m_changed = true; 00205 if (m_generation_p_l.size() % 256 == 0) { 00206 log_DBG_m(dbg_NORM,"CONGRATULATION: " << m_generation_p_l.size() 00207 << " generations of file: " << a_splitInfo.Dump()); 00208 } 00209 if (m_generation_p_l.size() > fsc_maxGenerations_c) { 00210 log_WRN_m("Number of generation exceeded " << fsc_maxGenerations_c 00211 <<". The oldest one will be ignored."); 00212 fsc_Generation_p_l_i iter = --(m_generation_p_l.end()); 00213 delete *iter; 00214 m_generation_p_l.erase(iter); 00215 } 00216 return; 00217 }


| void fsc_GenerationMgr::Remove | ( | ivd_MediaKey_t | a_mediumKey, | |
| ivd_MedVolNum_t | a_medVolNum | |||
| ) |
remove all entries from particular volume.
Definition at line 220 of file fsc_GenerationMgr.cpp.
References log_FUNC_m, and m_generation_p_l.
Referenced by Remove(), and fsc_DataL::Remove().
00221 { 00222 log_FUNC_m(Remove); 00223 fsc_Generation_p_l_i iter = m_generation_p_l.begin(); 00224 for (;iter != m_generation_p_l.end(); iter++) { 00225 (**iter).Remove(a_mediumKey, a_medVolNum); 00226 } 00227 }

| bool fsc_GenerationMgr::Remove | ( | ivd_MediaKey_t | a_mediumKey, | |
| ivd_MedVolNum_t | a_medVolNum, | |||
| UInt32_t | a_blockOffs | |||
| ) |
Remove one particular entry.
Definition at line 230 of file fsc_GenerationMgr.cpp.
References log_FUNC_m, m_generation_p_l, and Remove().
00232 { 00233 log_FUNC_m(Remove); 00234 00235 fsc_Generation_p_l_i iter = m_generation_p_l.begin(); 00236 for (;iter != m_generation_p_l.end(); iter++) { 00237 if ((**iter).Remove(a_mediumKey, a_medVolNum, a_blockOffs)) { 00238 return true; 00239 } 00240 } 00241 return false; 00242 }

| fsc_Generation * fsc_GenerationMgr::FindGen | ( | ivd_MigrationID_t | a_migID | ) |
find Generation object
Definition at line 245 of file fsc_GenerationMgr.cpp.
References m_generation_p_l, and NULL.
00245 { 00246 00247 fsc_Generation_p_l_i iter = m_generation_p_l.begin(); 00248 for (;iter != m_generation_p_l.end(); iter++) { 00249 if ((*iter)->m_migrationID == a_migID) { 00250 return *iter; 00251 } 00252 } 00253 return NULL; 00254 }
| void fsc_GenerationMgr::GetCopiesPos | ( | ivd_CopiesPos_v_t & | a_copiesPos_v, | |
| ivd_MigrationID_t & | a_migID, | |||
| fsc_MigInfo_t & | a_migInfo | |||
| ) |
Definition at line 257 of file fsc_GenerationMgr.cpp.
References Dump(), fsc_Generation::GetCopiesPos(), ie_FSC_NOCOPIES, ivd_DATA_d, ivd_Error, log_FUNC_m, fsc_MigInfo_t::m_fileId, m_generation_p_l, and fsc_Generation::m_migrationID.
Referenced by fsc_DataL::GetCopiesPos().
00259 { 00260 log_FUNC_m(GetCopiesPos); 00261 00262 fsc_Generation *gen_p; 00263 00264 if ( a_migID == 0 ) { 00265 fsc_Generation_p_l_i iter = m_generation_p_l.begin(); 00266 for (;iter != m_generation_p_l.end(); iter++) { 00267 if ((*iter)->m_dataType & ivd_DATA_d) { 00268 gen_p = *iter; 00269 goto GetCopies; 00270 } 00271 } 00272 stringstream dump; 00273 dump << " Getting copies of fileID " << a_migInfo.m_fileId 00274 << " and MigID " << a_migID 00275 << " failed, because none of generations contain data.\n"; 00276 Dump(dump); 00277 throw ivd_Error(ie_FSC_NOCOPIES, dump.str()); 00278 } 00279 else { 00280 fsc_Generation_p_l_i iter = m_generation_p_l.begin(); 00281 for (;iter != m_generation_p_l.end(); iter++) { 00282 if ( (*iter)->m_migrationID <= a_migID 00283 && (*iter)->m_dataType & ivd_DATA_d) { 00284 gen_p = *iter; 00285 goto GetCopies; 00286 } 00287 } 00288 stringstream dump; 00289 dump << " Getting copies of fileID " << a_migInfo.m_fileId 00290 << " and MigID " << a_migID 00291 << " failed, because none of generations before MigID contain data.\n"; 00292 Dump(dump); 00293 throw ivd_Error(ie_FSC_NOCOPIES, dump.str()); 00294 } 00295 00296 GetCopies: 00297 a_migID = gen_p->m_migrationID; 00298 gen_p->GetCopiesPos(a_copiesPos_v, a_migInfo); 00299 }


| void fsc_GenerationMgr::CheckLastGen | ( | string & | a_status, | |
| ivd_MigrationID_t & | a_migID | |||
| ) |
Definition at line 318 of file fsc_GenerationMgr.cpp.
References log_FUNC_m, m_generation_p_l, and fsc_Generation::m_migrationID.
Referenced by fsc_DataL::CheckLastGen().
00318 { 00319 log_FUNC_m(CheckLastGen); 00320 00321 if (m_generation_p_l.size() == 0) { 00322 a_status += " Missing in FSC.\n"; 00323 return; 00324 } 00325 fsc_Generation *gen_p = *m_generation_p_l.begin(); 00326 a_migID = gen_p->m_migrationID; 00327 }

| bool fsc_GenerationMgr::Write2DB | ( | fsc_DataL_t & | a_dataL, | |
| fio_Transaction & | a_trans | |||
| ) |
Write all changes to DB, update nextEntry structure to proper index and size return true if nextEntry structure is changed.
Definition at line 330 of file fsc_GenerationMgr.cpp.
References c_maxNumOfMember, c_maxRFVecSize, cmn_HexDump(), dbg_DETAIL, dlc_NotUsed, fsc_NextEntity_t::dlcType, fsc_Generation::Dump(), fsc_Vector_t::entryIdx, g_generationRF_p, fsc_DataL_t::generationIdx, giaUNKNOWN_ACT, log_DBG_m, log_FUNC_m, fio_Vector::m_changed, m_generation_p_l, m_genInsertAct, m_idxOfChainedVec_v, fio_Vector::m_relFileTrans, fio_Vector::m_vectorIndex, fio_Vector::m_vectorSize, fio_UnusedRec_t::next, fsc_Generation_t::nextEntity, fsc_DataL_t::numOfAllGen, fsc_DataL_t::numOfElement, fsc_Vector_t::numOfElement, fio_RelFileTrans::ReleaseVectorIdx(), size, fsc_NextEntity_t::vector, fio_Vector::Write2DB(), and fsc_Generation::Write2DB().
Referenced by fsc_DataL::Write2DB().
00331 { 00332 log_FUNC_m(Write2DB); 00333 00334 bool vecDataChanged = false; 00335 fsc_Generation_v_st size = m_generation_p_l.size(); 00336 00337 log_DBG_m(dbg_DETAIL, "Generations = " << size); 00338 if (size) { 00339 fsc_Generation_p_l_i iter = m_generation_p_l.begin(); 00340 fsc_Generation_t *p = &g_gensData[0]; 00341 fsc_Generation_t *ep = &g_gensData[size]; 00342 00343 while (p < ep) { // fulfill the data vector 00344 fsc_Generation *g = (*iter); 00345 if (g->Write2DB(*p, a_trans)) { 00346 vecDataChanged = true; 00347 if ( p->nextEntity.dlcType == dlc_NotUsed 00348 && p->nextEntity.vector.entryIdx == 0 00349 && p->nextEntity.vector.numOfElement == 0) { // entry was removed 00350 m_changed = true; 00351 ostringstream sstr; 00352 g->Dump(sstr); 00353 log_DBG_m(dbg_DETAIL, "Remove generation " << sstr.str()); 00354 // release object 00355 delete g; 00356 size--; 00357 ep--; 00358 iter = m_generation_p_l.erase(iter); 00359 continue; 00360 } 00361 } 00362 iter++; 00363 p++; 00364 } 00365 } 00366 if (!(m_changed || vecDataChanged)) { 00367 log_DBG_m(dbg_DETAIL, "No gen changed."); 00368 a_dataL.numOfAllGen = size; 00369 return false; 00370 } 00371 // it is possible that size became zero after handle each element 00372 if (size == 0) { 00373 if( size != m_vectorSize) { 00374 //TODO remove all chained vector 00375 m_relFileTrans.ReleaseVectorIdx(m_vectorIndex, m_vectorSize, &a_trans); 00376 m_vectorSize = 0; 00377 m_vectorIndex = 0; 00378 vecDataChanged = true; 00379 } 00380 a_dataL.numOfAllGen = 0; 00381 a_dataL.generationIdx = 0; 00382 a_dataL.numOfElement = 0; 00383 return vecDataChanged; 00384 } 00385 00386 UInt32_t genToStore; 00387 UInt32_t firstVecSize = genToStore = size; 00388 00389 log_DBG_m(dbg_DETAIL, "size >= c_maxRFVecSize, " << size << " >= " << c_maxRFVecSize); 00390 if (size >= c_maxRFVecSize) { // save prepared vector to DB 00391 ivd_RecordIDX_t nextVecIdx = 0; // last vector in chain 00392 00393 while (genToStore >= c_maxRFVecSize) { 00394 fsc_Generation_t *ep = &g_gensData[genToStore]; 00395 fio_UnusedRec_t &link = *reinterpret_cast<fio_UnusedRec_t*>(ep); 00396 ep -= c_maxNumOfMember; 00397 00398 link.next = nextVecIdx; 00399 ivd_RecordIDX_t vecIdx = 0; 00400 if (m_idxOfChainedVec_v.size()) { 00401 vecIdx = m_idxOfChainedVec_v.back(); 00402 m_idxOfChainedVec_v.pop_back(); 00403 } 00404 fio_Vector v(*g_generationRF_p, 00405 c_maxRFVecSize, 00406 vecIdx, true); 00407 00408 v.Write2DB(ep, c_maxRFVecSize, nextVecIdx, a_trans); 00409 log_DBG_m(dbg_DETAIL, "W entry vector of " << c_maxRFVecSize << " generations : idx =" << nextVecIdx << endl << 00410 cmn_HexDump(ep, 00411 c_maxRFVecSize * sizeof(fsc_Generation_t), 00412 sizeof(fsc_Generation_t), false) ); 00413 genToStore -= c_maxNumOfMember; 00414 } 00415 firstVecSize = genToStore + 1; 00416 fio_UnusedRec_t &lastRecfv = *reinterpret_cast<fio_UnusedRec_t*>(&g_gensData[genToStore]); 00417 lastRecfv.next = nextVecIdx; 00418 } 00419 00420 // remove not used c_maxRFVecSize elements size vectors 00421 ivd_RecordIDX_t *vIdxIp = &(*m_idxOfChainedVec_v.begin()); // reuse vector 00422 ivd_RecordIDX_t *vIdxEp = &(*m_idxOfChainedVec_v.end()); 00423 log_DBG_m(dbg_DETAIL, "Release vect " << hex << vIdxIp 00424 << " " << vIdxEp << dec); 00425 while (vIdxIp < vIdxEp) { 00426 log_DBG_m(dbg_DETAIL, "Release vect " << *vIdxIp); 00427 g_generationRF_p->ReleaseVectorIdx(*vIdxIp, c_maxRFVecSize, &a_trans); 00428 vIdxIp++; 00429 } 00430 m_idxOfChainedVec_v.clear(); 00431 00432 bool change = m_changed; 00433 if ( m_changed 00434 || vecDataChanged) { 00435 m_changed = true; // fio_Vector doesn't know if only vecDataChanged is changed 00436 fio_Vector::Write2DB(g_gensData, firstVecSize, a_dataL.generationIdx, a_trans); 00437 a_dataL.numOfElement = firstVecSize; 00438 log_DBG_m(dbg_DETAIL, "W linked vector of " << firstVecSize << " generations : idx =" << a_dataL.generationIdx << endl << 00439 cmn_HexDump(g_gensData, firstVecSize * sizeof(fsc_Generation_t), sizeof(fsc_Generation_t), false) ); 00440 } 00441 00442 m_genInsertAct = giaUNKNOWN_ACT; 00443 // tel owner my profile 00444 a_dataL.numOfAllGen = size; 00445 return change; 00446 }


| void fsc_GenerationMgr::Dump | ( | ostream & | os | ) |
Reimplemented from fio_Vector.
Definition at line 449 of file fsc_GenerationMgr.cpp.
References dbg_DETAIL, fio_Vector::GetVectorIndex(), log_DBG_m, log_FUNC_m, and m_generation_p_l.
Referenced by fsc_DataL::Dump(), and GetCopiesPos().
00449 { 00450 log_FUNC_m(Dump); 00451 // os << "Gen vector index =" << fio_Vector::GetVectorIndex() << endl; 00452 os << " Generation number =" << m_generation_p_l.size() << endl; 00453 os << " Next idx = " << fio_Vector::GetVectorIndex() << endl; 00454 // os << "n Previous num of gen. =" << m_prevVecSize << endl; 00455 00456 fsc_Generation_p_l_i iter = m_generation_p_l.begin(); 00457 for (;iter != m_generation_p_l.end(); ++iter) { 00458 log_DBG_m(dbg_DETAIL, "*iter = 0x" << hex << (*iter) << dec); 00459 if ((*iter)->m_migrationID == 0) { 00460 os << " Reserved space for generation." << endl; 00461 } 00462 else { 00463 (*iter)->Dump(os); 00464 } 00465 } 00466 }


| bool fsc_GenerationMgr::TreeWalk | ( | fsc_Collector & | a_collector | ) |
Definition at line 302 of file fsc_GenerationMgr.cpp.
References log_FUNC_m, m_generation_p_l, and fsc_Collector::ProcObjGenerationMgr().
Referenced by fsc_DataL::TreeWalk().
00302 { 00303 log_FUNC_m(TreeWalk); 00304 00305 if (!a_collector.ProcObjGenerationMgr(this)) { 00306 return false; 00307 } 00308 fsc_Generation_p_l_i iter = m_generation_p_l.begin(); 00309 for (;iter != m_generation_p_l.end(); iter++) { 00310 if (!(**iter).TreeWalk(a_collector)) { 00311 return false; 00312 } 00313 } 00314 return true; 00315 }


friend class ut_fsc_GenerationMgr [friend] |
Definition at line 54 of file fsc_GenerationMgr.h.
what happened when insert gen? add newest one update last update other used to proper update NSC attributes
Definition at line 74 of file fsc_GenerationMgr.h.
Referenced by GetGenInsertAct(), Insert(), and Write2DB().
Definition at line 76 of file fsc_GenerationMgr.h.
Referenced by fsc_GenerationMgr(), and Write2DB().
Definition at line 79 of file fsc_GenerationMgr.h.
Referenced by CheckLastGen(), Dump(), FindGen(), fsc_GenerationMgr(), GetCopiesPos(), Insert(), fsc_ColGeneration::ProcObjGenerationMgr(), Remove(), TreeWalk(), Write2DB(), and ~fsc_GenerationMgr().
1.5.6