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 | 
