summaryrefslogtreecommitdiffstats
path: root/src/Buffer.hpp
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2015-02-01 04:14:42 +0100
committerMatthias Schiffer <mschiffer@universe-factory.net>2015-02-01 04:14:42 +0100
commit8a8a41a800dfe9bdcab934d6b53d9c6defd4a457 (patch)
treef9d40b96ee3413cbe7a402a4b4abad607b2a1c7c /src/Buffer.hpp
parentfc1fc8fbbc9dd9534f40de348210ea66b6defe42 (diff)
downloadMinedMap-8a8a41a800dfe9bdcab934d6b53d9c6defd4a457.tar
MinedMap-8a8a41a800dfe9bdcab934d6b53d9c6defd4a457.zip
Parse chunk data on demand
Diffstat (limited to 'src/Buffer.hpp')
-rw-r--r--src/Buffer.hpp43
1 files changed, 28 insertions, 15 deletions
diff --git a/src/Buffer.hpp b/src/Buffer.hpp
index c7fa9c7..3bf1ef0 100644
--- a/src/Buffer.hpp
+++ b/src/Buffer.hpp
@@ -40,34 +40,47 @@ private:
size_t len;
public:
- Buffer(const uint8_t *data0, size_t len0) : data(data0), len(len0) {}
+ static uint16_t parse16(const uint8_t *buf) {
+ return (buf[0] << 8) | buf[1];
+ }
- uint8_t get() {
- if (!len)
- throw std::runtime_error("Buffer::get(): buffer underrun");
+ static uint32_t parse32(const uint8_t *buf) {
+ return (uint32_t(buf[0]) << 24) | (uint32_t(buf[1]) << 16) | (uint32_t(buf[2]) << 8) | uint32_t(buf[3]);
+ }
- data++;
- len--;
- return data[-1];
+ static uint64_t parse64(const uint8_t *buf) {
+ return (uint64_t(buf[0]) << 56) | (uint64_t(buf[1]) << 48) | (uint64_t(buf[2]) << 40) | (uint64_t(buf[3]) << 32)
+ | (uint64_t(buf[4]) << 24) | (uint64_t(buf[5]) << 16) | (uint64_t(buf[6]) << 8) | uint64_t(buf[7]);
}
- std::string getString(size_t n) {
+
+ Buffer(const uint8_t *data0, size_t len0) : data(data0), len(len0) {}
+
+ const uint8_t * get(size_t n) {
if (n > len)
throw std::runtime_error("Buffer::get(): buffer underrun");
data += n;
len -= n;
- return std::string(reinterpret_cast<const char *>(data - n), n);
+ return (data - n);
}
- void getData(void *buf, size_t n) {
- if (n > len)
- throw std::runtime_error("Buffer::get(): buffer underrun");
+ uint8_t get8() {
+ return *get(1);
+ }
- data += n;
- len -= n;
- std::memcpy(buf, data - n, n);
+ uint16_t get16() {
+ return parse16(get(2));
+ }
+
+ uint32_t get32() {
+ return parse32(get(4));
+ }
+
+ uint64_t get64() {
+ return parse64(get(8));
}
+
};
}