XCube Stream Reader SDK
|
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__ */