XCube Stream Reader SDK
x3c/include/libIndexer/CIndexReader.h
00001 
00008 #ifndef __CINDEXREADER_H__
00009 #define __CINDEXREADER_H__
00010 
00011 #include <string>
00012 #include <vector>
00013 #include <iosfwd>
00014 #include "IdxFileFormat.h"
00015 
00016 namespace x3c {
00017     namespace indexer {
00018 
00019         class CIndexReader
00020         {
00021         public:
00022 
00023             //==================================================================
00024             // typedefs
00025             //
00026             typedef std::vector<IndexRecord> IndexRecordContainer;
00027             typedef std::vector<IndexRecord>::iterator IndexRecordIter;
00028             typedef std::vector<IndexRecord>::const_iterator ConstIndexRecordIter;
00029 
00033             ~CIndexReader();
00034 
00038             void   close() const;
00039 
00048             int getFilePosByTime(UINT64 time, UINT64 & pos) const;
00049 
00053             IndexHeader const& header() const;
00054 
00058             IndexTrailer const& trailer() const;
00059 
00063             ConstIndexRecordIter indexRecordsBegin() const;
00064 
00068             ConstIndexRecordIter indexRecordsEnd() const;
00069 
00070 
00074             UINT32 numRecords() const;
00075 
00081             void dumpHeader(std::ostream &out);
00082 
00088             void dumpTrailer(std::ostream &out);
00089 
00095             void dumpAll(std::ostream &out);
00096 
00097         private:
00098 
00104             CIndexReader(CIndexer<CIndexReader> const& parent,
00105                          UINT32 reservedMem);
00106 
00110             bool create(std::string const& filename);
00111 
00115             CIndexReader& operator=(CIndexReader const&);
00116 
00120             CIndexReader(CIndexReader const&);
00121 
00125             bool constructFromFile();
00126 
00128             std::string         mFilename;
00129 
00131             IndexHeader         mHeader;
00132 
00134             IndexRecordContainer  mIndexRecords;
00135             
00137             IndexTrailer        mTrailer;
00138 
00140             CIndexer<CIndexReader> const& mParent;
00141 
00143             mutable INT32       mFd;
00144 
00147             friend class CIndexer<CIndexReader>;
00148 
00149             friend std::ostream& operator<<(std::ostream &out, CIndexReader const& r);
00150         };
00151 
00152         /*
00153         ** Inline function implementation
00154         */
00155 
00156         inline UINT32 CIndexReader::numRecords() const
00157         {
00158             return (UINT32)mIndexRecords.size();
00159         }
00160 
00161         inline IndexHeader const& CIndexReader::header() const
00162         {
00163             return mHeader;
00164         }
00165 
00166         inline IndexTrailer const& CIndexReader::trailer() const
00167         {
00168             return mTrailer;
00169         }
00170 
00171         inline CIndexReader::ConstIndexRecordIter CIndexReader::indexRecordsBegin() const
00172         {
00173             return mIndexRecords.begin();
00174         }
00175 
00176         inline CIndexReader::ConstIndexRecordIter CIndexReader::indexRecordsEnd() const
00177         {
00178             return mIndexRecords.end();
00179         }
00180 
00181     }   /* namespace indexer */
00182 }  /* namespace x3c */
00183 
00184 
00185 #endif /*  __CINDEXREADER_H__ */
 All Classes Files Functions Variables Typedefs Friends Defines