示例#1
0
void MockReadonlyStore::load(PathRef fpath) {
	FileStream fp(fpath.string().c_str(), "rb");
	fp.disbuf();
	NativeDataInput<InputBuffer> dio; dio.attach(&fp);
	uint64_t fixlen, rows, strSize;
	dio >> fixlen;
	dio >> rows;
	dio >> strSize;
	m_fixedLen = size_t(fixlen);
	m_rows.strpool.resize_no_init(size_t(strSize));
	if (0 == m_fixedLen) {
		m_rows.offsets.resize_no_init(size_t(rows + 1));
		dio.ensureRead(m_rows.offsets.data(), m_rows.offsets.used_mem_size());
	#if !defined(NDEBUG)
		assert(m_rows.strpool.size() == m_rows.offsets.back());
		for (size_t i = 0; i < rows; ++i) {
			assert(m_rows.offsets[i] < m_rows.offsets[i+1]);
		}
	#endif
	} else {
		assert(m_rows.strpool.size() % m_fixedLen == 0);
		assert(m_rows.strpool.size() / m_fixedLen == rows);
	}
	dio.ensureRead(m_rows.strpool.data(), m_rows.strpool.used_mem_size());
}
示例#2
0
DFA_Interface* DFA_Interface::load_from(FILE* fp) {
	using namespace febird;
	FileStream file;
	file.attach(fp);
	file.disbuf();
	std::string className;
	try {
		NativeDataInput<InputBuffer> dio; dio.attach(&file);
		dio >> className;
#define ON_CLASS_IO(Class) \
		if (BOOST_STRINGIZE(Class) == className) { \
			std::auto_ptr<Class> au(new Class); \
			dio >> *au; \
			file.detach(); \
			return au.release(); \
		}
#include "dfa_class_io.hpp"
	}
	catch (...) {
		file.detach();
		throw;
	}
	file.detach();
	string_appender<> msg;
	msg << BOOST_CURRENT_FUNCTION << ": unknown Automata class: " << className;
	throw std::invalid_argument(msg);
}
示例#3
0
void MockWritableSegment::loadRecordStore(PathRef dir) {
	fs::path fpath = dir / "rows";
	FileStream fp(fpath.string().c_str(), "rb");
	fp.disbuf();
	NativeDataInput<InputBuffer> dio; dio.attach(&fp);
	dio >> m_rows;
}
示例#4
0
	Logged(Tab* tab, const std::string& dir) {
		assert(NULL != tab);
		this->tab = tab;
		fmain = dir + "/main";
		flog  = dir + "/log";
		FileStream file;
		if (file.xopen(fmain.c_str(), "rb")) {
			NativeDataInput<InputBuffer> dio; dio.attach(&file);
			dio >> *tab; // load the check point
			file.close();
		}
示例#5
0
void MockReadonlyIndex::load(PathRef fpath) {
	FileStream fp(fpath.string().c_str(), "rb");
	fp.disbuf();
	NativeDataInput<InputBuffer> dio; dio.attach(&fp);
	uint64_t fixlen, rows, keylen;
	dio >> fixlen;
	dio >> rows;
	dio >> keylen;
	m_ids.resize_no_init(size_t(rows));
	dio.ensureRead(m_ids.data(), m_ids.used_mem_size());
	if (0 == fixlen) {
		m_keys.offsets.resize_no_init(size_t(rows + 1));
		dio.ensureRead(m_keys.offsets.data(), m_keys.offsets.used_mem_size());
	}
	else {
		assert(fixlen * rows == keylen);
	}
	m_keys.strpool.resize_no_init(size_t(keylen));
	dio.ensureRead(m_keys.strpool.data(), size_t(keylen));
	m_fixedLen = size_t(fixlen);
}
示例#6
0
void MockWritableIndex<Key>::load(PathRef fpath) {
	FileStream fp(fpath.string().c_str(), "rb");
	fp.disbuf();
	NativeDataInput<InputBuffer> dio; dio.attach(&fp);
	dio >> m_kv;
}