#include "db-leveldb.h" #include #include #include "types.h" inline int64_t stoi64(const std::string &s) { std::stringstream tmp(s); long long t; tmp >> t; return t; } inline std::string i64tos(int64_t i) { std::ostringstream o; o< DBLevelDB::getBlockPos() { std::vector vec; leveldb::Iterator* it = m_db->NewIterator(leveldb::ReadOptions()); for (it->SeekToFirst(); it->Valid(); it->Next()) { vec.push_back(stoi64(it->key().ToString())); } delete it; return vec; } DBBlock DBLevelDB::getBlockOnPos(int x, int y, int z) { int64_t iPos; DBBlock block(0,(const unsigned char *)""); std::string datastr; leveldb::Status status; iPos = static_cast(x); iPos += static_cast(y) << 12; iPos += static_cast(z) << 24; status = m_db->Get(leveldb::ReadOptions(), i64tos(iPos), &datastr); if(status.ok()) { block = DBBlock( iPos, ustring( (const unsigned char*) datastr.c_str(), datastr.size() ) ); m_blocksReadCount++; m_blocksUnCachedCount++; } return block; }