#include <fsc_nsDirEntryFormattedVec.h>


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_t * | GetFirstMemPtr () |
| 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_t * | m_firstFree_p |
| pointer to first free element in array | |
| ivd_RecordIDX_t * | m_nextVecIdx_p |
| pointer to DB index of next vector | |
Friends | |
| class | ut_fsc_nsDirEntryFormattedVec |
| 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().
00047 : fio_Vector(*g_nsDirEntryRF_p), 00048 m_firstFree_p(m_dirMembers), 00049 m_nextVecIdx_p(&m_dirMembers[c_lastVecIdx]) { 00050 00051 log_FUNC_m(fsc_nsDirEntryFormattedVec); 00052 *m_nextVecIdx_p = 0; // no next vector 00053 }

| 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 }

| 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 }

| 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 }

| 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 }


| 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 }


| 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 }

| 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 }


| 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 };

| 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 };

| 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 }

| 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; };

| 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 }


| 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 }

friend class ut_fsc_nsDirEntryFormattedVec [friend] |
Definition at line 71 of file fsc_nsDirEntryFormattedVec.h.
Reimplemented from fio_Vector.
Reimplemented in fsc_nsDirEntryVec.
Definition at line 133 of file fsc_nsDirEntryFormattedVec.h.
bool fsc_nsDirEntryFormattedVec::m_allFieldsAreSet [protected] |
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().
ivd_RecordIDX_t* fsc_nsDirEntryFormattedVec::m_firstFree_p [protected] |
pointer to first free element in array
Definition at line 144 of file fsc_nsDirEntryFormattedVec.h.
Referenced by AddEntry(), Clear(), Dump(), fsc_nsDirEntryFormattedVec(), GetFirstMemPtr(), GetNextMemPtr(), NumOfElements(), RemoveEntry(), TryToRemoveEntry(), and Write2DB().
pointer to DB index of next vector
Definition at line 146 of file fsc_nsDirEntryFormattedVec.h.
Referenced by AddEntry(), Clear(), fsc_nsDirEntryVec::CreateNextVector(), Dump(), fsc_nsDirEntryFormattedVec(), fsc_nsDirEntryVec::GetNextDirEntryVecPtr(), fsc_nsDirEntryVec::GetNextMemberIdx(), Init(), fsc_nsDirEntryVec::IsLastInChain(), fsc_nsDirEntryVec::RemoveEntryFromNextVec(), fsc_nsDirEntryVec::Write2DB(), and Write2DB().
1.5.6