Project: finder, src: BPTree.h


B+ Tree ヘッダーファイル
#ifndef BPTREE_H_
#define BPTREE_H_

#include "BPTreeCore.h"

class BPTree {
 public:
   class ObjectStream {
    private:
     int fd;
     off_t header_offset;
     off_t header;
     off_t footer_offset;
     off_t footer;
    public:
     ObjectStream(int fd, off_t offset);
     ObjectStream(bool bFalse) : fd(-1) {}
     void append(const Serializer &obj);
     bool load(Serializer &obj);
     bool isEOF() {
       return (fd == -1 || footer == 0);
     }
   };
 private:
  BPTreeCore *bptree;
  bool bCreate;
  int fd;

 public:
  BPTree(const std::string &filename, bool bTruncate = true);
  BPTree(int fd);
  virtual ~BPTree();
  void append(const NGram &key, const Serializer &obj);
  BPTree::ObjectStream find(const NGram &key);
  int getFileDescriptor() const {
    return fd;
  }
};

#endif //BPTREE_H_