gStore/test/Btree.h

80 lines
1.8 KiB
C++

/*
* Btree.h
*
* Created on: 2014-4-18
* Author: liyouhuan
*/
#ifndef BTREE_H_
#define BTREE_H_
#include "CBtreeH.h"
#include<iostream>
#include<fstream>
#include<sstream>
using namespace std;
class bstr{
public:
char* str;
int len;
bstr(const char * _s, int _len){
str = new char[_len+1];
memcpy(str, _s, _len*sizeof(char));
str[_len] = '\0';
len = _len;
}
bstr(FILE*& _fp){
fread((char*)&len, sizeof(int), 1, _fp);
str = new char[len+1];
fread(str, sizeof(char), len, _fp);
str[len]='\0';
}
void b_write(ofstream& _of){
_of.write((char*)&len, sizeof(int));
_of.write(str, len*sizeof(char));
}
void b_write(FILE* _fp){
fwrite((char*)&len, sizeof(int), 1, _fp);
fwrite(str, sizeof(char), len, _fp);
}
const char* cstr()const{
return str;
}
~bstr(){
delete[] str;
}
};
class Btree{
public:
//mode = r w rw
Btree(const string& _store_path, const string& _file_name, const char* _mode);
~Btree();
bool insert(const bstr& _key, const bstr& _val);
bool insert(const char* _key, int _klen, const char* _val, int _vlen);
bool search(const char* _key, int _klen, char*& _val, int & _vlen)const;
bool search(const char* _key, int _klen);
const bstr* getValueTransfer();
bool remove(const bstr& _key);
bool remove(const char* _key, int _klen);
bool close();
bool flush();
bool release();
private:
string getBtreeFilePath(){
return storePath+"/"+fileName;
}
bool deleteifExistPath(const string& _path);
bool openRead(const string& _btree_path);
bool openWrite(const string& _btree_path);
bool openReadWrite(const string& _btree_path);
private:
BPlusTree* btree;
string storePath;
string fileName;
string mode;
bstr* value_transfer;
int value_transfer_max_len;
};
#endif /* BTREE_H_ */