aboutsummaryrefslogtreecommitdiff
path: root/ByteBuffer.h
diff options
context:
space:
mode:
Diffstat (limited to 'ByteBuffer.h')
-rw-r--r--ByteBuffer.h62
1 files changed, 46 insertions, 16 deletions
diff --git a/ByteBuffer.h b/ByteBuffer.h
index 828ee4b..d1d02bb 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,37 @@ public:
class ByteBuffer {
public:
- ByteBuffer(uint8_t *bytes, size_t capacity, size_t size, size_t zero = 0);
-
- inline size_t getSize() {
- return size;
+ /**
+ * Wrapping constructor, the size will be equal to the capacity.
+ */
+ ByteBuffer(const uint8_t *bytes, size_t capacity);
+
+ /**
+ * Wrapping constructor.
+ */
+ ByteBuffer(const uint8_t *bytes, size_t capacity, size_t zero, size_t size);
+
+ inline size_t getSize() const {
+ DF << "end=" << (uint64_t)end << ", zero=" << (uint64_t)zero << ", size=" << (end - 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 = (uint8_t *) &zero[newCursor];
+ }
+
+ inline void skip(size_t length) {
+ checkAndUpdateEnd(length);
+ ptr += length;
}
ByteBuffer &add8(uint8_t value);
@@ -44,20 +62,32 @@ 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, const uint8_t *zero, const uint8_t *end);
+
+ ByteBuffer view(uint8_t *ptr, const uint8_t *end) const;
+
+ 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