#include <fsc_MedVolume.h>


Definition at line 94 of file fsc_MedVolume.h.
Public Member Functions | |
| fsc_MedVolReader (const cmn_Path &a_fscDirectory, ivd_MediaKey_t a_mediaKey, ivd_MedVolNum_t a_medVolNum, fsc_medVolData_t *&a_buffPos, fsc_medVolData_t *&a_buffEnd, bool a_deleteAfterUse=false) | |
| ~fsc_MedVolReader () | |
| void | GetNextBuff (fsc_medVolData_t *&a_begin_p, fsc_medVolData_t *&a_end_p) |
| Prepare next buffer and set pointers to begin, end of buffer Pointers are NULL when no more data available. | |
Public Attributes | |
| log_CLASSID_m | |
Private Member Functions | |
| void | ReadNextBlock () |
| Large volumes are split in many files by block offset, so open next one. | |
| void | SortData () |
| void | GetFSCdata (const string &a_path) |
| Read data from file to mem buffer. | |
Private Attributes | |
| cmn_Path | m_medVolPath |
| path where this volume have its dataFiles | |
| bool | m_deleteAfterUse |
| remove directory in destructor | |
| list< string > | m_volumeFiles_l |
| all dataFile's names of this volume | |
| list< string >::iterator | m_currentFileIter |
| fsc_MedVolReader::fsc_MedVolReader | ( | const cmn_Path & | a_fscDirectory, | |
| ivd_MediaKey_t | a_mediaKey, | |||
| ivd_MedVolNum_t | a_medVolNum, | |||
| fsc_medVolData_t *& | a_buffPos, | |||
| fsc_medVolData_t *& | a_buffEnd, | |||
| bool | a_deleteAfterUse = false | |||
| ) |
Definition at line 233 of file fsc_MedVolume.cpp.
References dbg_DETAIL, dbg_NORM, fsc_MedVolFileExt_c, GetFSCdata(), fsc_MedVolume::GetMedVolFileName(), cmn_DirLst::GetNextName(), log_DBG_m, log_FUNC_A_m, log_WRN_m, fsc_MedVolume::m_buffEnd, fsc_MedVolume::m_buffPos, m_currentFileIter, fsc_MedVolume::m_mediaKey, fsc_MedVolume::m_medVolNum, m_medVolPath, m_volumeFiles_l, NULL, path, and cmn_Path::UpPath().
00239 : 00240 fsc_MedVolume(a_fscDirectory, a_mediaKey, a_medVolNum), 00241 m_deleteAfterUse(a_deleteAfterUse) 00242 { 00243 log_FUNC_A_m(fsc_MedVolReader, "fscPath " << a_fscDirectory 00244 << " mediaKey " << a_mediaKey 00245 << " medVolNum " << a_medVolNum); 00246 00247 m_currentFileIter = m_volumeFiles_l.begin(); 00248 00249 cmn_Path path = GetMedVolFileName(a_fscDirectory, m_mediaKey, m_medVolNum, 0); 00250 m_medVolPath = path.UpPath(); 00251 00252 log_DBG_m(dbg_DETAIL, "Read volumes on path " << m_medVolPath << " first file " << path); 00253 00254 try { 00255 cmn_DirLst dirList(m_medVolPath, fsc_MedVolFileExt_c); 00256 00257 string name = dirList.GetNextName(); 00258 while (name.length() > 0) { // get all files f 00259 log_DBG_m(dbg_DETAIL, "MedVolOfsFile " << name ); 00260 m_volumeFiles_l.push_back(name); // store them to list 00261 name = dirList.GetNextName(); 00262 } 00263 00264 if (m_volumeFiles_l.size() > 0) { // if already exist journal file(s) 00265 m_volumeFiles_l.sort(); // do a sort 00266 } 00267 else { // FSC does not contain data from this volume 00268 log_WRN_m("Strange! Directory is created, but no files in it." 00269 << " medium: " << m_mediaKey 00270 << ", vol: " << m_medVolNum 00271 << ", directory: '" << m_medVolPath << "'"); 00272 a_buffPos = NULL; 00273 a_buffEnd = NULL; 00274 return; 00275 } 00276 m_currentFileIter = m_volumeFiles_l.begin(); 00277 GetFSCdata(m_medVolPath + *m_currentFileIter); 00278 } 00279 catch (ivd_SysError) { // no files in FSC 00280 log_DBG_m(dbg_NORM, "FSC does not contain data of medium: " << m_mediaKey 00281 << ", vol: " << m_medVolNum 00282 << ", directory: '" << m_medVolPath 00283 << "' missing."); 00284 } 00285 // anounce usee object about buffer 00286 a_buffPos = m_buffPos; 00287 a_buffEnd = m_buffEnd; 00288 } //============================================================================//

| fsc_MedVolReader::~fsc_MedVolReader | ( | ) |
Definition at line 291 of file fsc_MedVolume.cpp.
References cmn_File::CloseF(), cmn_CleanDir(), cmn_File::DeleteDir(), cmn_File::Exists(), cmn_File::IsOpen(), log_FUNC_m, m_deleteAfterUse, and m_medVolPath.
00291 { 00292 log_FUNC_m(~fsc_MedVolReader); 00293 if (IsOpen()) { 00294 CloseF(); 00295 } 00296 if (m_deleteAfterUse) { 00297 if (Exists()) { 00298 cmn_CleanDir(m_medVolPath); 00299 cmn_File::DeleteDir(m_medVolPath); 00300 } 00301 } 00302 }

| void fsc_MedVolReader::GetNextBuff | ( | fsc_medVolData_t *& | a_begin_p, | |
| fsc_medVolData_t *& | a_end_p | |||
| ) |
Prepare next buffer and set pointers to begin, end of buffer Pointers are NULL when no more data available.
Definition at line 305 of file fsc_MedVolume.cpp.
References cmn_File::CloseF(), dbg_LOW, GetFSCdata(), log_DBG_m, log_FUNC_m, fsc_MedVolume::m_buffEnd, fsc_MedVolume::m_buffPos, m_currentFileIter, m_medVolPath, m_volumeFiles_l, and NULL.
Referenced by fsc_VolumeCheck::GetNextOfsSubBlock().
00306 { 00307 log_FUNC_m(GetNextBuff); 00308 if ( (m_currentFileIter) != m_volumeFiles_l.end() 00309 && (++m_currentFileIter) != m_volumeFiles_l.end()) { 00310 CloseF(); 00311 log_DBG_m(dbg_LOW, "Open next MedVolOfsFile " << *m_currentFileIter ); 00312 GetFSCdata(m_medVolPath + *m_currentFileIter); 00313 } 00314 else { 00315 m_buffPos = m_buffEnd = NULL; 00316 } 00317 a_begin_p = m_buffPos; 00318 a_end_p = m_buffEnd; 00319 }


| void fsc_MedVolReader::ReadNextBlock | ( | ) | [private] |
Large volumes are split in many files by block offset, so open next one.
When no more files then buffPos = buffEnd = NULL
| void fsc_MedVolReader::SortData | ( | ) | [private] |
Definition at line 323 of file fsc_MedVolume.cpp.
References fsc_medVolData_t::Compare(), dbg_DETAIL, fsc_medVolData_t::DumpHdr(), cmn_File::GetFullPathRef(), log_DBG_m, log_FUNC_m, fsc_MedVolume::m_buffCapacity, fsc_MedVolume::m_buffEnd, fsc_MedVolume::m_buffPos, and fsc_MedVolume::m_medVolDataBuf.
Referenced by GetFSCdata().
00323 { 00324 log_FUNC_m(ReadAndSortData); 00325 00326 m_buffPos = m_medVolDataBuf; 00327 m_buffEnd = m_medVolDataBuf + m_buffCapacity; 00328 log_DBG_m(dbg_DETAIL, GetFullPathRef() << " bufCap = " << m_buffCapacity 00329 << " buff_p =" << hex << m_buffPos 00330 << " buffEnd_p =" << hex << m_buffEnd << dec); 00331 00332 log_DBG_m(dbg_DETAIL, "Split-Info before SORT"); 00333 log_DBG_m(dbg_DETAIL, fsc_medVolData_t::DumpHdr()); 00334 for (fsc_medVolData_t * p = m_medVolDataBuf; 00335 p != m_buffEnd; 00336 p++) { 00337 log_DBG_m(dbg_DETAIL, p->Dump()); 00338 } 00339 log_DBG_m(dbg_DETAIL, "Start QSort for file " << GetFullPathRef()); 00340 // sort 00341 qsort(m_medVolDataBuf, 00342 m_buffCapacity, 00343 sizeof(fsc_medVolData_t), 00344 fsc_medVolData_t::Compare); 00345 00346 log_DBG_m(dbg_DETAIL, "End QSort"); 00347 log_DBG_m(dbg_DETAIL, fsc_medVolData_t::DumpHdr()); 00348 for (fsc_medVolData_t * p = m_medVolDataBuf; 00349 p != m_buffEnd; 00350 p++) { 00351 log_DBG_m(dbg_DETAIL, p->Dump()); 00352 } 00353 }


| void fsc_MedVolReader::GetFSCdata | ( | const string & | a_path | ) | [private] |
Read data from file to mem buffer.
If no file exist then no buffer created.
Definition at line 356 of file fsc_MedVolume.cpp.
References log_FUNC_m, fsc_MedVolume::m_buffCapacity, fsc_MedVolume::m_buffSize, fsc_MedVolume::m_medVolDataBuf, NULL, cmn_File::OpenF(), cmn_File::ReadF(), cmn_File::SetFullPath(), SortData(), and cmn_File::StatF().
Referenced by fsc_MedVolReader(), and GetNextBuff().
00356 { 00357 log_FUNC_m(GetFSCdata); 00358 00359 if (m_medVolDataBuf != NULL) { // remove previous buffer 00360 delete [] m_medVolDataBuf; 00361 m_medVolDataBuf = NULL; 00362 } 00363 try { 00364 SetFullPath(a_path); 00365 OpenF(); 00366 00367 ivd_FileInfo_t fileInfo; 00368 StatF(fileInfo); 00369 00370 m_buffCapacity = fileInfo.size / sizeof(fsc_medVolData_t); 00371 m_medVolDataBuf = new fsc_medVolData_t[m_buffCapacity]; 00372 m_buffSize = sizeof(fsc_medVolData_t) * m_buffCapacity; 00373 ReadF(m_medVolDataBuf, m_buffSize); 00374 00375 SortData(); 00376 } 00377 catch (ivd_SysError) { 00378 m_buffCapacity = 0; 00379 } 00380 }


cmn_Path fsc_MedVolReader::m_medVolPath [private] |
path where this volume have its dataFiles
Definition at line 113 of file fsc_MedVolume.h.
Referenced by fsc_MedVolReader(), GetNextBuff(), and ~fsc_MedVolReader().
bool fsc_MedVolReader::m_deleteAfterUse [private] |
remove directory in destructor
Definition at line 116 of file fsc_MedVolume.h.
Referenced by ~fsc_MedVolReader().
list<string> fsc_MedVolReader::m_volumeFiles_l [private] |
all dataFile's names of this volume
Definition at line 119 of file fsc_MedVolume.h.
Referenced by fsc_MedVolReader(), and GetNextBuff().
list<string>::iterator fsc_MedVolReader::m_currentFileIter [private] |
Definition at line 121 of file fsc_MedVolume.h.
Referenced by fsc_MedVolReader(), and GetNextBuff().
1.5.6