fsc_nsDirEntryFormattedVec Class Reference
[G_new_group]

#include <fsc_nsDirEntryFormattedVec.h>

Inheritance diagram for fsc_nsDirEntryFormattedVec:

Inheritance graph
[legend]
Collaboration diagram for fsc_nsDirEntryFormattedVec:

Collaboration graph
[legend]

List of all members.


Detailed Description

Definition at line 70 of file fsc_nsDirEntryFormattedVec.h.


Public Member Functions

 fsc_nsDirEntryFormattedVec ()
 fsc_nsDirEntryFormattedVec (ivd_RecordIDX_t a_nextMemberIdx)
 fsc_nsDirEntryFormattedVec (UInt8_t a_vectorSize, ivd_RecordIDX_t a_idx)
 It creates nsDirEntryVec object filled with members got from DB on index a_idx.
void Init (ivd_RecordIDX_t a_nextMemberIdx)
bool AddEntry (ivd_RecordIDX_t a_memFileID)
 If vector has free space for index then inserts it and return true otherwice return false.
bool TryToRemoveEntry (ivd_RecordIDX_t a_idxToRemove, ivd_RecordIDX_t &a_idxToReplace)
 Try to remove entry from vector and return true.
bool RemoveEntry (ivd_RecordIDX_t a_idxToRemove, ivd_RecordIDX_t a_idxToReplace)
 If a_idxToRemove is in vector then replace it with a_idxToReplace and return true, otherwice return false.
bool Write2DB (UInt8_t &a_numOfElement, ivd_RecordIDX_t &a_recordIdx, fio_Transaction &a_trans)
 If vector is changed then write2DB method perform its actions.
ivd_RecordIDX_tGetFirstMemPtr ()
void GetNextMemPtr (ivd_RecordIDX_t *&a_mem_p)
unsigned int NumOfElements () const
void Dump (ostream &os)

Public Attributes

 log_CLASSID_m

Protected Member Functions

bool Write2DB (ivd_RecordIDX_t &a_recordIdx, fio_Transaction &a_trans)
 If vector is changed then write2DB method perform its actions.
void Clear ()

Protected Attributes

bool m_allFieldsAreSet
 set if all fields in array are set to 0 or full filled
ivd_RecordIDX_t m_dirMembers [fsc_nsMaxNumElemVecSize_d]
 formatted array to store directory member indeces (FileID)
ivd_RecordIDX_tm_firstFree_p
 pointer to first free element in array
ivd_RecordIDX_tm_nextVecIdx_p
 pointer to DB index of next vector

Friends

class ut_fsc_nsDirEntryFormattedVec

Constructor & Destructor Documentation

fsc_nsDirEntryFormattedVec::fsc_nsDirEntryFormattedVec (  ) 

Definition at line 46 of file fsc_nsDirEntryFormattedVec.cpp.

References log_FUNC_m, and m_nextVecIdx_p.

Referenced by fsc_nsDirEntryFormattedVec().

Here is the caller graph for this function:

fsc_nsDirEntryFormattedVec::fsc_nsDirEntryFormattedVec ( ivd_RecordIDX_t  a_nextMemberIdx  ) 

Definition at line 58 of file fsc_nsDirEntryFormattedVec.cpp.

References c_maxArraySize, fsc_nsDirEntryFormattedVec(), log_FUNC_m, m_dirMembers, and m_nextVecIdx_p.

00059   : fio_Vector(*g_nsDirEntryRF_p),    
00060     m_firstFree_p(m_dirMembers),
00061     m_nextVecIdx_p(&m_dirMembers[c_lastVecIdx]) {
00062     
00063     log_FUNC_m(fsc_nsDirEntryFormattedVec(nextMemIdx));
00064     // set all array to zero, because is bind with next.
00065     memset(m_dirMembers, 0, c_maxArraySize * sizeof(ivd_RecordIDX_t));    
00066     *m_nextVecIdx_p = a_nextMemberIdx; 
00067     // no next vector
00068 }

Here is the call graph for this function:

fsc_nsDirEntryFormattedVec::fsc_nsDirEntryFormattedVec ( UInt8_t  a_vectorSize,
ivd_RecordIDX_t  a_idx 
)

It creates nsDirEntryVec object filled with members got from DB on index a_idx.

if a_idx is 0 no members are generatted.

Definition at line 73 of file fsc_nsDirEntryFormattedVec.cpp.

References c_dirEntryRecSize, c_maxRFVecSize, fsc_nsDirEntryFormattedVec(), log_FUNC_m, m_dirMembers, m_firstFree_p, m_nextVecIdx_p, fio_Vector::m_vectorSize, fio_Vector::ReadFromDB(), and size.

00075   : fio_Vector(*g_nsDirEntryRF_p,
00076                // if idx is not 0 and vector size is 0 then max vector exist
00077                (a_vectorSize == 0 && a_idx != 0) ? c_maxRFVecSize : a_vectorSize,
00078                a_idx,
00079                false),
00080     m_nextVecIdx_p(&m_dirMembers[c_lastVecIdx]) {    
00081     
00082     log_FUNC_m(fsc_nsDirEntryFormattedVec(size, idx));        
00083     //cout << " a_vector size = " << (int)a_vectorSize << endl        
00084     //    << " m_vectorSize = " << m_vectorSize << endl        
00085     //    << " idx = " << a_idx << endl;    
00086     if (a_idx > 0) {        
00087         ReadFromDB(m_dirMembers);        
00088         if (m_vectorSize == c_maxRFVecSize) { 
00089             // last element is index of next vector            
00090             // get it from vector and store it as member            
00091             ivd_RecordIDX_t *p = m_nextVecIdx_p - 2; 
00092             // two idx before last            
00093             //cout << " presizeIdx = " << c_preSizeIdx            
00094             //     << " presize val = " << m_dirMembers[c_preSizeIdx] << endl;            
00095             //cout << " size val = " << m_dirMembers[c_preSizeIdx + 1] << endl;            
00096             if (*p++ == 0) { 
00097                 // befor last field contain idx of first free field                
00098                 m_firstFree_p  = &m_dirMembers[*p];                            
00099             }            
00100             else if (*p == 0) { 
00101                 // first free is one before last                
00102                 m_firstFree_p  = p;            
00103             }            
00104             else { 
00105                 // no free elements in vector                
00106                 m_firstFree_p  = ++p;            
00107             }        
00108         }        
00109         else {            
00110             ivd_RecordIDX_t *r  = &m_dirMembers[a_vectorSize * c_dirEntryRecSize - 1];
00111             // check if exist free fields before, because of large record            
00112             while (!*r && r-- > m_dirMembers) {                
00113                 // empty            
00114             }            
00115             m_firstFree_p   = ++r;            
00116             *m_nextVecIdx_p = 0; 
00117             //cout << " first free " << m_firstFree_p << "  array " << m_dirMembers << endl;
00118             // no next vector
00119         }    
00120     }    
00121     else {        
00122         m_firstFree_p   = m_dirMembers;
00123         *m_nextVecIdx_p = 0; 
00124         // no next vector    
00125     }
00126 }

Here is the call graph for this function:


Member Function Documentation

void fsc_nsDirEntryFormattedVec::Init ( ivd_RecordIDX_t  a_nextMemberIdx  ) 

Definition at line 131 of file fsc_nsDirEntryFormattedVec.cpp.

References log_FUNC_m, and m_nextVecIdx_p.

Referenced by fsc_nsDirEntryVec::Init().

00131                                                                         {    
00132     log_FUNC_m(Init);    
00133     
00134     *m_nextVecIdx_p = a_nextMemberIdx; 
00135     // no next vector
00136 }

Here is the caller graph for this function:

bool fsc_nsDirEntryFormattedVec::AddEntry ( ivd_RecordIDX_t  a_memFileID  ) 

If vector has free space for index then inserts it and return true otherwice return false.

Definition at line 141 of file fsc_nsDirEntryFormattedVec.cpp.

References dbg_DETAIL, log_DBG_m, log_FUNC_m, fio_Vector::m_changed, m_firstFree_p, m_nextVecIdx_p, and NumOfElements().

Referenced by fsc_nsDirEntryMgr::AddEntry().

00141                                                                      {
00142     log_FUNC_m(AddEntry);
00143 
00144     if (m_firstFree_p != m_nextVecIdx_p) {        
00145         *m_firstFree_p++ = a_memFileID;         
00146         m_changed       = true;         
00147     log_DBG_m(dbg_DETAIL, "formatted vector obj " << this
00148                        << "Number of elements = " << NumOfElements());
00149         return true;    
00150     }    
00151     return false;
00152 }

Here is the call graph for this function:

Here is the caller graph for this function:

bool fsc_nsDirEntryFormattedVec::TryToRemoveEntry ( ivd_RecordIDX_t  a_idxToRemove,
ivd_RecordIDX_t a_idxToReplace 
)

Try to remove entry from vector and return true.

If it's not found set a replacement and return false. If not even replacement found then return false.

Definition at line 157 of file fsc_nsDirEntryFormattedVec.cpp.

References dbg_DETAIL, log_DBG_m, log_FUNC_m, fio_Vector::m_changed, m_dirMembers, m_firstFree_p, and NumOfElements().

Referenced by fsc_nsDirEntryMgr::RemoveEntry().

00158                                                                                    {    
00159     
00160     log_FUNC_m(TryToRemoveEntry);    
00161     log_DBG_m(dbg_DETAIL, "a_idxToRemove: " << a_idxToRemove
00162                        << ", a_idxToReplace: " <<  a_idxToReplace
00163                        << " num of members: " << NumOfElements());
00164     if (m_firstFree_p == m_dirMembers) { 
00165         // no element to remove and to replace        
00166         a_idxToReplace = 0;        
00167         return false;     
00168     }    
00169     ivd_RecordIDX_t *e = --m_firstFree_p; 
00170     // last element will be removed or used as replacement    
00171     ivd_RecordIDX_t *p = m_dirMembers;    
00172     m_changed = true;     
00173     for (; p != e; ++p) {        
00174         log_DBG_m(dbg_DETAIL, "member: " << *p);
00175         if (*p == a_idxToRemove) {            
00176             *p = *e, *e = 0;
00177             return true;
00178         }
00179     }
00180     if (*p == a_idxToRemove) { 
00181         log_DBG_m(dbg_DETAIL, "last mem: " << *p);
00182         // last in vector match        
00183         *p = 0;        
00184         return true;    
00185     }
00186     else {
00187         log_DBG_m(dbg_DETAIL, "not found get last mem: " << *p);
00188         a_idxToReplace = *p;
00189         // set replacement
00190         *p = 0;
00191         return false;
00192     }
00193 }

Here is the call graph for this function:

Here is the caller graph for this function:

bool fsc_nsDirEntryFormattedVec::RemoveEntry ( ivd_RecordIDX_t  a_idxToRemove,
ivd_RecordIDX_t  a_idxToReplace 
)

If a_idxToRemove is in vector then replace it with a_idxToReplace and return true, otherwice return false.

Reimplemented in fsc_nsDirEntryVec.

Definition at line 198 of file fsc_nsDirEntryFormattedVec.cpp.

References dbg_DETAIL, log_DBG_m, log_FUNC_m, fio_Vector::m_changed, m_dirMembers, and m_firstFree_p.

Referenced by fsc_nsDirEntryVec::RemoveEntry().

00199                                                                              {    
00200 
00201     log_FUNC_m(RemoveEntry);
00202     log_DBG_m(dbg_DETAIL, "formatted vector obj " << this);
00203     ivd_RecordIDX_t *p = m_dirMembers;    
00204     ivd_RecordIDX_t *e = m_firstFree_p;    
00205     while (p != e) {        
00206         if (*p == a_idxToRemove) {            
00207             *p = a_idxToReplace;            
00208             m_changed = true;             
00209             return true;        
00210         }        
00211         ++p;    
00212     }    
00213     return false;
00214 }

Here is the caller graph for this function:

bool fsc_nsDirEntryFormattedVec::Write2DB ( UInt8_t a_numOfElement,
ivd_RecordIDX_t a_recordIdx,
fio_Transaction a_trans 
)

If vector is changed then write2DB method perform its actions.

This method must be called only from fsc_nsDirEntryMgr

Reimplemented in fsc_nsDirEntryVec.

Definition at line 229 of file fsc_nsDirEntryFormattedVec.cpp.

References c_dirEntryRecSize, c_maxNumOfMember, c_maxRFVecSize, c_preSizeIdx, cmn_NumOfOctets(), dbg_DETAIL, log_DBG_m, log_FUNC_m, m_dirMembers, m_firstFree_p, m_nextVecIdx_p, NumOfElements(), size, and fio_Vector::Write2DB().

Referenced by fsc_nsDirEntryVec::Write2DB(), and Write2DB().

00231                                                                     {    
00232     log_FUNC_m(Write2DB(numOfElement));
00233     log_DBG_m(dbg_DETAIL, "formatted vector obj " << this);
00234     
00235     ivd_VectorSize_t size = cmn_NumOfOctets(NumOfElements());
00236     if (*m_nextVecIdx_p) {
00237         size = c_maxRFVecSize;
00238     }
00239     if (size == c_maxRFVecSize) {
00240         log_DBG_m(dbg_DETAIL,
00241             "Number of elements = " << NumOfElements()
00242             << " inline calc of octets = " << size << " == " << c_maxRFVecSize);
00243         a_numOfElement = 0;
00244         // set size of vector in last array field for element
00245         // if field before is empty
00246         ivd_RecordIDX_t *beforeLast = m_nextVecIdx_p - 1; 
00247         // idx before last
00248         if (!*m_nextVecIdx_p) {
00249             // if array is not set to 0 set it now unset fields
00250             ivd_RecordIDX_t *p = m_firstFree_p;
00251             while (p < beforeLast) {
00252                 *p++ = 0;
00253             }
00254         }
00255         
00256         unsigned int elements = NumOfElements();
00257         if (elements <= c_preSizeIdx) {
00258             // numbef of used elements is store in one before last filed
00259             *beforeLast = NumOfElements();
00260         }
00261         else if (elements < c_maxNumOfMember) {
00262             *beforeLast = 0;
00263         }
00264     }
00265     else {
00266         a_numOfElement = size;
00267         log_DBG_m(dbg_DETAIL,
00268             "Number of elements = " << NumOfElements()
00269             << " inline calc of octets = " << size);
00270         //cout << "Number of elements = " << NumOfElements()
00271         //                      << " inline calc of octets = " << size << endl;
00272         if (!size) { 
00273             // store at least one record
00274             size = a_numOfElement = 1;
00275         }
00276         // clear from firstFree_p up to record end if neccessary
00277         ivd_RecordIDX_t *e  = &m_dirMembers[size * c_dirEntryRecSize];
00278         ivd_RecordIDX_t *p  = m_firstFree_p;
00279         while (p < e) {
00280             *p++ = 0;
00281         }    
00282     }    
00283     return fio_Vector::Write2DB(m_dirMembers, size, a_recordIdx, a_trans);
00284 }

Here is the call graph for this function:

Here is the caller graph for this function:

ivd_RecordIDX_t* fsc_nsDirEntryFormattedVec::GetFirstMemPtr (  )  [inline]

Definition at line 110 of file fsc_nsDirEntryFormattedVec.h.

References m_dirMembers, m_firstFree_p, and NULL.

Referenced by fsc_RawScan::DirTreeWalk().

00110                                       { 
00111         return m_firstFree_p > m_dirMembers
00112                ? &m_dirMembers[0]
00113                : NULL;
00114     };

Here is the caller graph for this function:

void fsc_nsDirEntryFormattedVec::GetNextMemPtr ( ivd_RecordIDX_t *&  a_mem_p  )  [inline]

Definition at line 116 of file fsc_nsDirEntryFormattedVec.h.

References m_firstFree_p, and NULL.

Referenced by fsc_RawScan::DirTreeWalk().

00116                                                   { 
00117         if (++a_mem_p == m_firstFree_p) {
00118             a_mem_p = NULL;
00119         }
00120     };

Here is the caller graph for this function:

bool fsc_nsDirEntryFormattedVec::Write2DB ( ivd_RecordIDX_t a_recordIdx,
fio_Transaction a_trans 
) [protected]

If vector is changed then write2DB method perform its actions.

This method must be called only from fsc_nsDirEntryVec

Reimplemented in fsc_nsDirEntryVec.

Definition at line 289 of file fsc_nsDirEntryFormattedVec.cpp.

References c_maxRFVecSize, log_FUNC_m, m_dirMembers, fio_Vector::Write2DB(), and Write2DB().

00290                                                                     {
00291     log_FUNC_m(Write2DB);
00292         
00293     return fio_Vector::Write2DB(m_dirMembers, c_maxRFVecSize, a_recordIdx, a_trans);
00294 }

Here is the call graph for this function:

unsigned int fsc_nsDirEntryFormattedVec::NumOfElements (  )  const [inline]

Definition at line 129 of file fsc_nsDirEntryFormattedVec.h.

References m_dirMembers, and m_firstFree_p.

Referenced by AddEntry(), fsc_nsDirEntryMgr::RemoveEntry(), TryToRemoveEntry(), and Write2DB().

00129 { return m_firstFree_p - m_dirMembers; };

Here is the caller graph for this function:

void fsc_nsDirEntryFormattedVec::Dump ( ostream &  os  ) 

Reimplemented from fio_Vector.

Reimplemented in fsc_nsDirEntryVec.

Definition at line 298 of file fsc_nsDirEntryFormattedVec.cpp.

References fio_Vector::GetVectorSize(), m_dirMembers, m_firstFree_p, m_nextVecIdx_p, and fio_Vector::m_vectorIndex.

Referenced by fsc_nsDirEntryVec::Dump().

00298                                                  {
00299     ivd_RecordIDX_t *p = m_dirMembers;
00300     ivd_RecordIDX_t *e = m_firstFree_p;
00301     os << (e - p) << " members on vector idx = " << m_vectorIndex 
00302        << ", vector size: " << fio_Vector::GetVectorSize()
00303        << ", next vector idx: " << *m_nextVecIdx_p
00304        << endl;
00305     int memInLine = 8;
00306     while (p != e) {
00307         os << setw(10) << *p++;
00308         if(!--memInLine) {
00309             memInLine = 8;
00310             os << endl;
00311         }
00312     }    
00313     os << endl;
00314 }

Here is the call graph for this function:

Here is the caller graph for this function:

void fsc_nsDirEntryFormattedVec::Clear ( void   )  [protected]

pointer to index of next vector

Reimplemented in fsc_nsDirEntryVec.

Definition at line 218 of file fsc_nsDirEntryFormattedVec.cpp.

References log_FUNC_m, m_dirMembers, m_firstFree_p, and m_nextVecIdx_p.

Referenced by fsc_nsDirEntryVec::Clear().

00218                                        {
00219     log_FUNC_m(Clear);
00220 
00221     m_firstFree_p = m_dirMembers;
00223     *m_nextVecIdx_p = 0;
00224     // no next vector
00225 }

Here is the caller graph for this function:


Friends And Related Function Documentation

friend class ut_fsc_nsDirEntryFormattedVec [friend]

Definition at line 71 of file fsc_nsDirEntryFormattedVec.h.


Member Data Documentation

Reimplemented from fio_Vector.

Reimplemented in fsc_nsDirEntryVec.

Definition at line 133 of file fsc_nsDirEntryFormattedVec.h.

set if all fields in array are set to 0 or full filled

Definition at line 137 of file fsc_nsDirEntryFormattedVec.h.

ivd_RecordIDX_t fsc_nsDirEntryFormattedVec::m_dirMembers[fsc_nsMaxNumElemVecSize_d] [protected]

formatted array to store directory member indeces (FileID)

Definition at line 141 of file fsc_nsDirEntryFormattedVec.h.

Referenced by Clear(), Dump(), fsc_nsDirEntryFormattedVec(), GetFirstMemPtr(), NumOfElements(), RemoveEntry(), TryToRemoveEntry(), and Write2DB().


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

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