fsc_MedVolReader Class Reference
[File System Catalog]

#include <fsc_MedVolume.h>

Inheritance diagram for fsc_MedVolReader:

Inheritance graph
[legend]
Collaboration diagram for fsc_MedVolReader:

Collaboration graph
[legend]

List of all members.


Detailed Description

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

Constructor & Destructor Documentation

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

Here is the call graph for this function:

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 }

Here is the call graph for this function:


Member Function Documentation

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 }

Here is the call graph for this function:

Here is the caller graph for this function:

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 }

Here is the call graph for this function:

Here is the caller graph for this function:

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 }

Here is the call graph for this function:

Here is the caller graph for this function:


Member Data Documentation

Reimplemented from fsc_MedVolume.

Definition at line 109 of file fsc_MedVolume.h.

path where this volume have its dataFiles

Definition at line 113 of file fsc_MedVolume.h.

Referenced by fsc_MedVolReader(), GetNextBuff(), and ~fsc_MedVolReader().

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().


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

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