diff options
Diffstat (limited to 'ByteBuffer.h')
-rw-r--r-- | ByteBuffer.h | 52 |
1 files changed, 37 insertions, 15 deletions
diff --git a/ByteBuffer.h b/ByteBuffer.h index 828ee4b..ee54a0a 100644 --- a/ByteBuffer.h +++ b/ByteBuffer.h @@ -6,6 +6,9 @@ #include <string> #include <stdexcept> +// For now +#include "log.h" + class ByteBufferException : public std::runtime_error { public: ByteBufferException(std::string const &what) : std::runtime_error(what) { @@ -14,22 +17,31 @@ public: class ByteBuffer { public: - ByteBuffer(uint8_t *bytes, size_t capacity, size_t size, size_t zero = 0); + ByteBuffer(uint8_t *bytes, size_t capacity); + + ByteBuffer(uint8_t *bytes, size_t capacity, size_t zero, size_t size); - inline size_t getSize() { - return size; + inline size_t getSize() const { + DF << "end=" << (uint64_t)end << ", zero=" << (uint64_t)zero; + return end - zero; } - inline size_t getCapacity() { + inline size_t getCapacity() const { return capacity; } - inline size_t getCursor() { - return cursor; + inline size_t getCursor() const { + return ptr - zero; } inline void setCursor(size_t newCursor) { - cursor = newCursor; + assertCanAccessRelative(newCursor); + ptr = ptr + newCursor; + } + + inline void skip(size_t length) { + checkAndUpdateEnd(length); + ptr += length; } ByteBuffer &add8(uint8_t value); @@ -44,20 +56,30 @@ public: void copy(uint8_t *bytes, size_t length); - ByteBuffer view(size_t length); + /** + * Creates a view from cursor to size. + */ + ByteBuffer view() const; + + // TODO: should return const + ByteBuffer view(size_t length) const; std::string toString() const; private: - void checkAndUpdateSize(size_t count); + ByteBuffer(const uint8_t *bytes, size_t capacity, uint8_t *zero, uint8_t *end); + + void checkAndUpdateEnd(size_t count); + + void assertCanAccessRelative(size_t diff) const; - void canAccessIndex(size_t count); + void assertCanAccessIndex(uint8_t *p) const; - uint8_t *bytes; - size_t zero; - size_t size; - size_t capacity; - size_t cursor; + const uint8_t *bytes; + const size_t capacity; + const uint8_t *zero; + const uint8_t *end; + uint8_t *ptr; }; #endif |