long readVarInt() { byte b; long res = 0; for (b = readByte(); b & 0x80; b = readByte()) { res = (res | (b & 0x7F)) << 8; } return res | b; } string readString() { long len = readVarInt(); if (len < 0 || len > 100000) { std::stringstream e; e << "Requested reading a string of length " << len; throw e.str(); } char buf[len]; len = fread(buf, 1, len, data->file); return string(buf, len); }