00001 /* Copyright (C) 2010 webis.de 00002 * All rights reserved. 00003 */ 00004 #ifndef AITOOLS_INVERTEDINDEX_POSTLIST_BUILDER_HPP 00005 #define AITOOLS_INVERTEDINDEX_POSTLIST_BUILDER_HPP 00006 00007 #include "Iterator.hpp" 00008 #include "ByteBuffer.hpp" 00009 #include "NonCopyable.hpp" 00010 #include <boost/shared_ptr.hpp> 00011 #include <vector> 00012 00013 namespace aitools { 00014 namespace invertedindex { 00015 00025 class PostlistBuilder : public NonCopyable { 00026 00027 public: // nested types 00028 00029 typedef boost::shared_ptr<PostlistBuilder> SharedPointer; 00030 00031 private: // nested types 00032 00033 typedef std::vector<ByteBuffer> ValueVector; 00034 typedef Iterator::SizeVector SizeVector; 00035 typedef Iterator::Header Header; 00036 00037 public: // c'tor / d'tor 00038 00042 PostlistBuilder(); 00043 00047 ~PostlistBuilder(); 00048 00049 public: // member 00050 00051 void append(const ByteBuffer& value) throw (std::runtime_error); 00052 00053 Iterator::SharedPointer build(); 00054 00055 void clear(); 00056 00057 bool empty() const; 00058 00059 size_t length() const; 00060 00061 void set_checksum(uint16_t checksum); 00062 00063 private: // member 00064 00065 void swap_out_values_() throw (std::runtime_error); 00066 bool has_page_file_() const; 00067 00068 private: // data 00069 00070 Header header_; 00071 ValueVector values_; 00072 SizeVector* vsizes_; 00073 size_t memory_; 00074 FILE* page_; 00075 00076 }; 00077 00078 } // namespace invertedindex 00079 } // namespace aitools 00080 00081 #endif // AITOOLS_INVERTEDINDEX_POSTLIST_BUILDER_HPP