00001 #ifndef IOPool_Streamer_StreamerInputIndexFile_h 00002 #define IOPool_Streamer_StreamerInputIndexFile_h 00003 00004 #include "IOPool/Streamer/interface/MsgTools.h" 00005 #include "IOPool/Streamer/interface/IndexRecords.h" 00006 #include <string> 00007 00008 class StreamerInputIndexFile 00009 { 00011 public: 00012 explicit StreamerInputIndexFile(const std::string& name); 00013 explicit StreamerInputIndexFile(const std::vector<std::string>& names); 00014 00015 ~StreamerInputIndexFile(); 00016 00017 const StartIndexRecord* startMessage() const { return startMsg_; } 00018 00019 bool eof() {return eof_; } 00020 00021 const indexRecIter begin() { return indexes_.begin(); } 00022 const indexRecIter end() { return indexes_.end(); } 00023 indexRecIter sort(); 00024 00025 private: 00026 00027 void readStartMessage(); 00028 int readEventMessage(); 00030 std::ifstream* ist_; 00031 00032 StartIndexRecord* startMsg_; 00033 00034 bool eof_; 00035 00036 uint64 eventBufPtr_; 00037 00038 std::vector<char> headerBuf_; 00039 std::vector<char> eventBuf_; 00040 uint32 eventHeaderSize_; 00041 00042 std::vector<EventIndexRecord*> indexes_; 00043 }; 00044 00045 00046 00047 00048 #endif 00049