fsc_CopyMgr Class Reference
[File System Catalog]

#include <fsc_CopyMgr.h>

Inheritance diagram for fsc_CopyMgr:

Inheritance graph
[legend]
Collaboration diagram for fsc_CopyMgr:

Collaboration graph
[legend]

List of all members.


Detailed Description

<Description:> A more elaborate class description that describes all aspects of class usage etc.

Author:
Dejan Volk Lupo, HERMES SoftLab
See also:
<reference>

Definition at line 48 of file fsc_CopyMgr.h.


Public Member Functions

 fsc_CopyMgr (fsc_MedPosMgr *a_medPosMgr_p, df_SplitInfo &a_splitInfo)
 fsc_CopyMgr (fsc_dlcType_e a_dlcType, fsc_EntryMgr *a_entryMgr_p, ivd_DataType_t a_dataType)
 fsc_CopyMgr (df_SplitInfo &a_splitInfo)
 fsc_CopyMgr (Int16_t a_numOfElement, ivd_RecordIDX_t a_copyIdx, ivd_DataType_t a_dataType)
virtual ~fsc_CopyMgr ()
void AddSplit (fsc_Split *a_split_p)
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.
void GetCopiesPos (ivd_CopiesPos_v_t &a_copiesPos_v, fsc_MigInfo_t &migInfo)
bool Write2DB (fsc_NextEntity_t &a_nextEntry, 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_Copy_p_l_t m_copy_p_l
 log_CLASSID_m
 Macro to add class name member s_className.

Private Attributes

fio_RelFileTransm_relFile
 this is pointer to relative file "fsc_xxxx.lrf" object.

Friends

class ut_fsc_CopyMgr

Constructor & Destructor Documentation

fsc_CopyMgr::fsc_CopyMgr ( fsc_MedPosMgr a_medPosMgr_p,
df_SplitInfo a_splitInfo 
)

Referenced by fsc_CopyMgr().

Here is the caller graph for this function:

fsc_CopyMgr::fsc_CopyMgr ( fsc_dlcType_e  a_dlcType,
fsc_EntryMgr a_entryMgr_p,
ivd_DataType_t  a_dataType 
)

Definition at line 44 of file fsc_CopyMgr.cpp.

References fsc_CopyMgr(), log_FUNC_m, and m_copy_p_l.

00048             :
00049             m_relFile(*g_copyRF_p)
00050 {
00051     log_FUNC_m(fsc_CopyMgr(fsc_dlcType_e, fsc_EntryMgr, df_SplitInfo));
00052 
00053     // first copy is got from higher level
00054     fsc_Copy* copy_p = new fsc_Copy(a_dlcType, a_entryMgr_p, a_dataType);
00055 
00056     m_copy_p_l.push_front(copy_p);
00057 }
//============================================================================//

Here is the call graph for this function:

fsc_CopyMgr::fsc_CopyMgr ( df_SplitInfo a_splitInfo  ) 

Definition at line 60 of file fsc_CopyMgr.cpp.

References df_SplitInfo::Dump(), fsc_CopyMgr(), ie_FSC_INV_SPLIT_INFO, ie_FSC_TOO_MUCH_COPIES, log_FUNC_m, m_copy_p_l, maxNumOfCopies_c, and df_SplitInfo::noCopies.

00062             :
00063             m_relFile(*g_copyRF_p)
00064 {
00065     log_FUNC_m(fsc_CopyMgr(df_SplitInfo));
00066 
00067     if (  a_splitInfo.noCopies >  0) {
00068         if (a_splitInfo.noCopies > maxNumOfCopies_c) {
00069             throw ivd_InternalError(ie_FSC_TOO_MUCH_COPIES,
00070                 "Front end agent created too many copies." + a_splitInfo.Dump(), true);
00071         }
00072         fsc_Copy* copy_p = new fsc_Copy(a_splitInfo);
00073 
00074         m_copy_p_l.push_front(copy_p);
00075         // reserve space for all copies
00076         for (int i = 1; i < a_splitInfo.noCopies; i++ ) {
00077             fsc_Copy* copy_p = new fsc_Copy();
00078 
00079             m_copy_p_l.push_front(copy_p);
00080         }
00081     }
00082     else {
00083         throw ivd_InternalError(ie_FSC_INV_SPLIT_INFO,
00084             "Number of copies are not specified." + a_splitInfo.Dump(), true);
00085     }
00086 }
//============================================================================//

Here is the call graph for this function:

fsc_CopyMgr::fsc_CopyMgr ( Int16_t  a_numOfElement,
ivd_RecordIDX_t  a_copyIdx,
ivd_DataType_t  a_dataType 
)

Definition at line 89 of file fsc_CopyMgr.cpp.

References alloca(), cmn_HexDump(), dbg_DETAIL, fsc_CopyMgr(), log_DBG_m, log_FUNC_m, m_copy_p_l, m_relFile, and fio_RelFile::ReadRec().

00093             :
00094             fsc_EntryMgr(a_numOfElement, a_copyIdx),
00095             m_relFile(*g_copyRF_p)
00096 {
00097     log_FUNC_m(fsc_CopyMgr(Int16_t..));
00098 
00099 //    log_DBG_m(dbg_DETAIL,"Get " << a_numOfElement
00100 //                      << " copies from idx " << a_copyIdx);
00101 
00102     if (a_numOfElement > 0) {
00103         fsc_Copy_t *copyData_v = reinterpret_cast<fsc_Copy_t*>
00104                                     (alloca(a_numOfElement * sizeof(fsc_Copy_t)));
00105 
00106         fsc_Copy_t *p    =  copyData_v;
00107         fsc_Copy_t *endp = &copyData_v[a_numOfElement];
00108 
00109         m_relFile.ReadRec(a_copyIdx, copyData_v, a_numOfElement);
00110 
00111         log_DBG_m(dbg_DETAIL, "R copies from = " << a_copyIdx << endl <<
00112             cmn_HexDump(copyData_v, a_numOfElement * sizeof(fsc_Copy_t), sizeof(fsc_Copy_t), false) );
00113 //        cout << "Read copy vect to DB" << endl;
00114 //        cout << cmn_HexDump(iter, a_numOfElement * sizeof(fsc_Copy_t) ) << endl;
00115 
00116         for (; p < endp; p++) {
00117             fsc_Copy* copy_p = new fsc_Copy(*p);
00118             m_copy_p_l.push_back(copy_p);
00119         }
00120     }
00121 }
//============================================================================//

Here is the call graph for this function:

fsc_CopyMgr::~fsc_CopyMgr (  )  [virtual]

Definition at line 124 of file fsc_CopyMgr.cpp.

References m_copy_p_l.

00125 {
00126     for (fsc_Copy_p_l_i iter = m_copy_p_l.begin();
00127          iter != m_copy_p_l.end();
00128          ++iter) {
00129         delete *iter;
00130     }
00131 }


Member Function Documentation

void fsc_CopyMgr::AddSplit ( fsc_Split a_split_p  ) 

Definition at line 134 of file fsc_CopyMgr.cpp.

References cmn_Num2Str(), dbg_DETAIL, dlc_NotUsed, ie_INVALID_ARG, log_DBG_m, log_FUNC_m, m_copy_p_l, sp_ALREADY_ADDED, sp_CHECK_OTHER_COPIES, sp_INSERTTED, sp_NEW_COPY, sp_REPLACE, and sp_SENTINEL.

Referenced by fsc_Generation::Insert(), and Remove().

00134                                                {
00135     log_FUNC_m(AddSplit);
00136 
00137 //    stringstream dump;
00138 //    a_split_p->Dump(dump);
00139 //    log_DBG_m(dbg_DETAIL, "AddSplit \n" << dump.str());
00140     fsc_Split_p_l_i possibleInsertPoint;
00141     fsc_Split_p_l_t replacedSplit_p_l;
00142 
00143     sp_State_e checkCopyState = sp_SENTINEL;
00144     sp_State_e addState = sp_NEW_COPY;
00145 
00146     fsc_Copy_p_l_i possibleUsefullCopy;
00147     fsc_Copy_p_l_i freeCopy = m_copy_p_l.end();
00148     fsc_Copy_p_l_i it;
00149 
00150     for (it = m_copy_p_l.begin(); it != m_copy_p_l.end(); ++it) {
00151          if ((**it).isReorganized()) {
00152             continue;
00153          }
00154         //stringstream dump;
00155         //(**it).Dump(dump);
00156         //log_DBG_m(dbg_DETAIL, "Copy from copyMgr \n" << dump.str());
00157         if ((**it).m_nextEntry.dlcType == dlc_NotUsed) {    // free element
00158             log_DBG_m(dbg_DETAIL, "Found unused copy");
00159             freeCopy = it;
00160             continue; // skip it first
00161         }
00162         switch (addState = (**it).AddSplit(a_split_p, possibleInsertPoint ,replacedSplit_p_l)) {
00163         case sp_INSERTTED :
00164             log_DBG_m(dbg_DETAIL, "INSERTTED");
00165             return;
00166 
00167         case sp_NEW_COPY :
00168             log_DBG_m(dbg_DETAIL, "NEW_COPY");
00169             continue;
00170 
00171         case sp_CHECK_OTHER_COPIES :  // if no other places then use possibleInsertPoint
00172                                       // this status is return when added split has enought space
00173                                       // but it is not sure if is proper place.
00174             log_DBG_m(dbg_DETAIL, "CHECK_OTHER_COPIES");
00175             checkCopyState      = addState;
00176             possibleUsefullCopy = it;
00177             continue;
00178 
00179         case sp_REPLACE : {// expect some splits in replacedSplit_p_l list
00180             log_DBG_m(dbg_DETAIL, "REPLACE");
00181             fsc_Split_p_l_i iter = replacedSplit_p_l.begin();
00182             for ( ; iter != replacedSplit_p_l.end(); ++iter ) {
00183                 // NOTE: recursion, call this method again
00184                 // WARNING: replace only split that does'n fit with
00185                 // split that its offset proper fit to previous split
00186                 AddSplit(*iter); // insert it again
00187             }
00188             return;
00189         }
00190         case sp_ALREADY_ADDED :
00191             log_DBG_m(dbg_DETAIL, "ALREADY_ADDED");
00192             delete a_split_p;
00193             return;
00194 
00195         default : ;
00196         }
00197     }
00198     if (checkCopyState == sp_CHECK_OTHER_COPIES) {
00199         log_DBG_m(dbg_DETAIL, "action INSERT after CHECK_OTHER_COPIES");
00200         // todo direct insert to copy
00201         (*possibleUsefullCopy)->AddSplit(possibleInsertPoint, a_split_p);
00202         return;
00203     }
00204 
00205     if (addState == sp_NEW_COPY) {
00206         log_DBG_m(dbg_DETAIL, "action NEW_COPY");
00207         if (freeCopy != m_copy_p_l.end()) {
00208             // how to know if split is whole or not
00209             // maybe lastsplit bool will help
00210             new (*freeCopy) fsc_Copy(a_split_p); // instantiate on willing addres
00211         }
00212         else {
00213             fsc_Copy* copy_p = new fsc_Copy(a_split_p);
00214 
00215             m_copy_p_l.insert(it, copy_p);
00216         }
00217         return;
00218     }
00219     else {
00220         throw ivd_InternalError(ie_INVALID_ARG,
00221             "Can't insert split. State " + cmn_Num2Str((int)addState), true);
00222     }
00223 }

Here is the call graph for this function:

Here is the caller graph for this function:

void fsc_CopyMgr::Remove ( ivd_MediaKey_t  a_mediumKey,
ivd_MedVolNum_t  a_medVolNum 
)

remove all entries from particular volume.

Definition at line 226 of file fsc_CopyMgr.cpp.

References AddSplit(), log_FUNC_m, and m_copy_p_l.

Referenced by fsc_Generation::Remove(), and Remove().

00227                                                           {
00228     log_FUNC_m(Remove);
00229     fsc_Split_p_l_t replacedSplit_p_l;
00230 
00231     fsc_Copy_p_l_i iter = m_copy_p_l.begin();
00232     for (;iter != m_copy_p_l.end(); ++iter) {
00233         // remove entry from all copies and collect orphaned splits from all copies
00234         (*iter)->Remove(a_mediumKey, a_medVolNum, replacedSplit_p_l);
00235     }
00236     if (replacedSplit_p_l.size()) {
00237         //log_DbgLevel_t dbgLevel = dbg_GetLevel();
00238         //UInt32_t       dbgFlags = dbg_GetFlags();
00239         //bool           dbgActiv = dbg_IsActive();
00240 
00241         //dbg_On(dbg_DETAIL,
00242         //       dbg_THROW | dbg_INOUT | dbg_COMPACT | dbg_ERRORLOG,
00243         //       ".");
00244         // if removed copy contains splits than all
00245         // remaining splits have to be reinserted.
00246         fsc_Split_p_l_i iter = replacedSplit_p_l.begin();
00247         for ( ; iter != replacedSplit_p_l.end(); ++iter ) {
00248             AddSplit(*iter); // insert it again
00249         }
00250         replacedSplit_p_l.clear();
00251 
00252         //dbg_SetLevel(dbgLevel);
00253         //dbg_SetFlags(dbgFlags);
00254         //if (!dbgActiv) {
00255         //    dbg_Off();
00256         //}
00257     }
00258 }

Here is the call graph for this function:

Here is the caller graph for this function:

bool fsc_CopyMgr::Remove ( ivd_MediaKey_t  a_mediumKey,
ivd_MedVolNum_t  a_medVolNum,
UInt32_t  a_blockOffs 
)

Remove one particular entry.

Definition at line 261 of file fsc_CopyMgr.cpp.

References AddSplit(), log_FUNC_m, m_copy_p_l, and Remove().

00263                                                           {
00264     log_FUNC_m(Remove);
00265     bool ret = false;
00266     fsc_Split_p_l_t replacedSplit_p_l;
00267 
00268     fsc_Copy_p_l_i iter = m_copy_p_l.begin();
00269     for (;(iter != m_copy_p_l.end()) && !ret; ++iter) {
00270         // remove first match entry and stop
00271         ret = (*iter)->Remove(a_mediumKey, a_medVolNum, a_blockOffs, replacedSplit_p_l);
00272     }
00273     if (replacedSplit_p_l.size()) {
00274         // if removed copy contains splits than all
00275         // remaining splits have to be reinserted.
00276         fsc_Split_p_l_i iter = replacedSplit_p_l.begin();
00277         for ( ; iter != replacedSplit_p_l.end(); ++iter ) {
00278             AddSplit(*iter); // insert it again
00279         }
00280         replacedSplit_p_l.clear();
00281     }
00282     return ret;
00283 }

Here is the call graph for this function:

void fsc_CopyMgr::GetCopiesPos ( ivd_CopiesPos_v_t a_copiesPos_v,
fsc_MigInfo_t migInfo 
)

Definition at line 286 of file fsc_CopyMgr.cpp.

References dbg_DETAIL, dlc_NotUsed, fsc_NextEntity_t::dlcType, fsc_Copy::Dump(), fsc_Copy::GetMediaPos(), ivd_DATA_d, log_DBG_m, log_FUNC_m, log_MSG_m, log_WARNING, m_copy_p_l, fsc_Copy::m_dataType, fsc_MigInfo_t::m_fileId, fsc_MigInfo_t::m_migId, and fsc_Entry::m_nextEntry.

Referenced by fsc_Generation::GetCopiesPos().

00286                                                                                          {
00287     log_FUNC_m(GetCopiesPos);
00288     //FIX bug 690  reserve space not alocate
00289     a_copiesPos_v.reserve(m_copy_p_l.size());
00290 
00291     int i = 0;
00292     for (fsc_Copy_p_l_i iter = m_copy_p_l.begin();
00293          iter != m_copy_p_l.end();
00294          ++iter, i++) {
00295         fsc_Copy &c = (**iter);
00296         log_DBG_m(dbg_DETAIL," Copy's record type " << (int)c.m_nextEntry.dlcType
00297                             << " data type " << c.m_dataType);
00298         if ( c.m_nextEntry.dlcType != dlc_NotUsed ) {
00299             if ((c.m_dataType & ivd_DATA_d) != ivd_DATA_d) {
00300                 ostringstream sstr;
00301                 sstr << "The copy " << (i + 1)
00302                      << " (FileID: " << a_migInfo.m_fileId
00303                      << ", MigID: " << a_migInfo.m_migId
00304                      << ") does not contain the data flag, "
00305                      << "but the generation contains it. "
00306                      << "Continuing with the recall...\n";
00307                 c.Dump(sstr);
00308                 // log warning without the stack dump into the error.log
00309                 log_MSG_m(log_WARNING, 0, sstr.str());
00310                 continue;
00311             }
00312 
00313             //FIX bug 690  add one by one
00314             a_copiesPos_v.resize(a_copiesPos_v.size() + 1);
00315             c.GetMediaPos(a_copiesPos_v.back(), a_migInfo);
00316             if (a_copiesPos_v.back().size() == 0) {
00317                 a_copiesPos_v.pop_back();
00318             }
00319         }
00320     }
00321     if (a_copiesPos_v.size() != a_copiesPos_v.capacity()) {
00322         log_DBG_m(dbg_DETAIL,"Missing copy info of fileId " << a_migInfo.m_fileId
00323             << " migId " << a_migInfo.m_migId);
00324     }
00325 }

Here is the call graph for this function:

Here is the caller graph for this function:

bool fsc_CopyMgr::Write2DB ( fsc_NextEntity_t a_nextEntry,
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 344 of file fsc_CopyMgr.cpp.

References cmn_HexDump(), dbg_DETAIL, dlc_Copy, dlc_NotUsed, fsc_NextEntity_t::dlcType, fsc_Vector_t::entryIdx, fio_RelFileTrans::GetVectorIDX(), log_DBG_m, log_FUNC_m, m_copy_p_l, fsc_EntryMgr::m_prevVecIndex, fsc_EntryMgr::m_prevVecSize, m_relFile, fsc_Copy_t::nextEntity, fsc_Vector_t::numOfElement, fio_RelFileTrans::ReleaseVectorIdx(), size, fsc_NextEntity_t::vector, fsc_Copy::Write2DB(), and fio_RelFile::WriteRec().

Referenced by fsc_Generation::Write2DB().

00345                                                       {
00346     log_FUNC_m(Write2DB);
00347 
00348     bool vecIdxOrSizeChanged = false;
00349     bool vecDataChanged      = false;
00350 
00351     fsc_Copy_v_st size = m_copy_p_l.size();
00352     log_DBG_m(dbg_DETAIL," Num of copies before write = " << size );
00353 
00354     if (size) {
00355         fsc_Copy_t *p = g_copyData_v;
00356         fsc_Copy_p_l_i iter = m_copy_p_l.begin();
00357         while (iter != m_copy_p_l.end()) {  // fulfill the data vector
00358             fsc_Copy *c = (*iter);
00359             if ( c->Write2DB(*p, a_trans)) {
00360                 vecDataChanged = true;
00361                 if (   p->nextEntity.dlcType          == dlc_NotUsed
00362                 &&  p->nextEntity.vector.entryIdx     == 0
00363                 &&  p->nextEntity.vector.numOfElement == 0) { // entry was removed
00364                 // release object
00365                     log_DBG_m(dbg_DETAIL,"Copy released iter =" << hex << *iter << dec);
00366                     delete c;
00367                     size--;
00368                     iter = m_copy_p_l.erase(iter);
00369                     log_DBG_m(dbg_DETAIL,"iter after erase = " << hex << *iter << dec);
00370                     continue;
00371                 }
00372             }
00373             ++iter;
00374             p++;
00375         }
00376     }
00377     log_DBG_m(dbg_DETAIL," Num of copies after write = " << size );
00378     // it is possible that size became zero after handle each element
00379     if (size == 0) {
00380        log_DBG_m(dbg_DETAIL,"All Copies released" );
00381         if( size != m_prevVecSize) {
00382             m_relFile.ReleaseVectorIdx(m_prevVecIndex, m_prevVecSize, &a_trans);
00383             m_prevVecSize  = 0;
00384             m_prevVecIndex = 0;
00385             vecIdxOrSizeChanged = true;
00386         }
00387         a_nextEntry.dlcType              = dlc_NotUsed;
00388         a_nextEntry.vector.entryIdx      = 0;
00389         a_nextEntry.vector.numOfElement  = 0;
00390         return vecIdxOrSizeChanged;
00391     }
00392     if (size == 1) {
00393      // special handling. Delete previous copies and return what last copy contain
00394         log_DBG_m(dbg_DETAIL,"Only one copy left" );
00395         a_nextEntry = g_copyData_v[0].nextEntity;
00396         log_DBG_m(dbg_DETAIL, "a_nextEntry = " <<
00397             cmn_HexDump(&a_nextEntry, sizeof(fsc_NextEntity_t), sizeof(fsc_NextEntity_t), false) );
00398         size--;
00399         if( size != m_prevVecSize) {
00400             m_relFile.ReleaseVectorIdx(m_prevVecIndex, m_prevVecSize, &a_trans);
00401             m_prevVecSize  = 0;
00402             m_prevVecIndex = 0;
00403         }
00404         return true;
00405     }
00406 
00407     ivd_RecordIDX_t idx = m_prevVecIndex;  // curent vector index
00408     if (idx == 0) {
00409         idx = m_relFile.GetVectorIDX(size, &a_trans);
00410         vecIdxOrSizeChanged = true;
00411     }
00412     else if (size != m_prevVecSize) {
00413         idx = m_relFile.GetVectorIDX(size, &a_trans);
00414         m_relFile.ReleaseVectorIdx(m_prevVecIndex, m_prevVecSize, &a_trans);
00415         vecIdxOrSizeChanged = true;
00416     }
00417 
00418     //log_DBG_m(dbg_DETAIL, " vecIdxOrSizeCahnged " << vecIdxOrSizeChanged
00419     //                   << " vecDataChanged " << vecDataChanged);
00420     if (  vecIdxOrSizeChanged
00421        || vecDataChanged) {  // if something change write it t
00422         log_DBG_m(dbg_DETAIL, "W Copies : idx = " << idx << endl <<
00423             cmn_HexDump(g_copyData_v, size * sizeof(fsc_Copy_t), sizeof(fsc_Copy_t), false) );
00424         // write data to relative file
00425          m_relFile.WriteRec(idx, g_copyData_v, size, &a_trans);
00426 //        cout << cmn_HexDump(g_copyData_v, size * sizeof(fsc_Copy_t) ) << endl;
00427 //        m_vecIndex     = idx;
00428         m_prevVecSize  = size;
00429         m_prevVecIndex = idx;
00430     }
00431     // tel owner my profile
00432 
00433     a_nextEntry.dlcType              = dlc_Copy;
00434     a_nextEntry.vector.entryIdx      = idx;
00435     a_nextEntry.vector.numOfElement  = size;
00436     return vecIdxOrSizeChanged;
00437 }

Here is the call graph for this function:

Here is the caller graph for this function:

void fsc_CopyMgr::Dump ( ostream &  os  ) 

Definition at line 440 of file fsc_CopyMgr.cpp.

References dlc_NotUsed, log_FUNC_m, m_copy_p_l, and fsc_EntryMgr::m_prevVecIndex.

Referenced by fsc_Generation::Dump().

00440                                   {
00441     log_FUNC_m(Dump);
00442     os << "C      Previous vector idx  =" << m_prevVecIndex << endl;
00443     os << "p      Number of copies     =" << m_copy_p_l.size() << endl;
00444 //    os << "y      Previous num of cop. =" << m_prevVecSize << endl;
00445 
00446     fsc_Copy_p_l_i iter = m_copy_p_l.begin();
00447     for (;iter != m_copy_p_l.end(); ++iter) {
00448         if ((*iter)->m_nextEntry.dlcType == dlc_NotUsed) {
00449             os << "           Reserved space for copy" << endl;
00450         }
00451         else {
00452             (*iter)->Dump(os);
00453         }
00454     }
00455 }

Here is the caller graph for this function:

bool fsc_CopyMgr::TreeWalk ( fsc_Collector a_collector  ) 

Definition at line 328 of file fsc_CopyMgr.cpp.

References log_FUNC_m, m_copy_p_l, and fsc_Collector::ProcObjCopyMgr().

Referenced by fsc_Generation::TreeWalk().

00328                                                        {
00329     log_FUNC_m(TreeWalk);
00330 
00331     if (!a_collector.ProcObjCopyMgr(this)){
00332         return false;
00333     }
00334     fsc_Copy_p_l_i iter = m_copy_p_l.begin();
00335     for (;iter != m_copy_p_l.end(); ++iter) {
00336         if (!(**iter).TreeWalk(a_collector)) {
00337             return false;
00338         }
00339     }
00340     return true;
00341 }

Here is the call graph for this function:

Here is the caller graph for this function:


Friends And Related Function Documentation

friend class ut_fsc_CopyMgr [friend]

Definition at line 49 of file fsc_CopyMgr.h.


Member Data Documentation

this is pointer to relative file "fsc_xxxx.lrf" object.

It's not need to delete it in destructor

Definition at line 69 of file fsc_CopyMgr.h.

Referenced by fsc_CopyMgr(), and Write2DB().

Macro to add class name member s_className.

Reimplemented from fsc_EntryMgr.

Definition at line 76 of file fsc_CopyMgr.h.


The documentation for this class was generated from the following files:

Generated on Mon Feb 27 19:19:35 2012 for OPENARCHIVE by  doxygen 1.5.6