diff options
-rw-r--r-- | ByteBuffer.cpp | 25 | ||||
-rw-r--r-- | ByteBuffer.h | 14 | ||||
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rw-r--r-- | test/ByteBufferTest.cpp | 30 |
4 files changed, 36 insertions, 35 deletions
diff --git a/ByteBuffer.cpp b/ByteBuffer.cpp index 07672ec..2b2f33b 100644 --- a/ByteBuffer.cpp +++ b/ByteBuffer.cpp @@ -3,23 +3,25 @@ #include <sstream> #include <iomanip> #include <cassert> +#include <elf.h> +#include <stdint-gcc.h> using namespace std; -ByteBuffer::ByteBuffer(uint8_t *bytes, size_t capacity) : - bytes(bytes), capacity(capacity), zero(&bytes[0]), end(&bytes[capacity]) { - ptr = &bytes[0]; +ByteBuffer::ByteBuffer(const uint8_t *bytes, size_t capacity) : + bytes(bytes), capacity(capacity), zero(&bytes[0]), end(&bytes[0]) { + ptr = (uint8_t *) &bytes[0]; } -ByteBuffer::ByteBuffer(uint8_t *bytes, size_t capacity, size_t zero, size_t size) : +ByteBuffer::ByteBuffer(const uint8_t *bytes, size_t capacity, size_t zero, size_t size) : bytes(bytes), capacity(capacity), zero(&bytes[0]), end(&bytes[size]) { assert(zero <= size); assert(size <= capacity); - ptr = &bytes[0]; + ptr = (uint8_t *) &bytes[0]; } -ByteBuffer::ByteBuffer(const uint8_t *bytes, size_t capacity, uint8_t *zero, uint8_t *end) : - bytes(bytes), capacity(capacity), zero(zero), end(end), ptr(zero) { +ByteBuffer::ByteBuffer(const uint8_t *bytes, size_t capacity, const uint8_t *zero, const uint8_t *end) : + bytes(bytes), capacity(capacity), zero(zero), end(end), ptr((uint8_t *) zero) { } ByteBuffer &ByteBuffer::add8(uint8_t value) { @@ -61,15 +63,18 @@ void ByteBuffer::copy(uint8_t *bytes, size_t length) { } ByteBuffer ByteBuffer::view() const { - DF << "cursor=" << getCursor() << ", size=" << getSize(); - return view(end - ptr); +// DF << "cursor=" << getCursor() << ", size=" << getSize() << ", new size=" << end - ptr << ", ptr=" << (uint64_t) ptr << ", zero=" << (uint64_t) zero; + return view(ptr, end); } ByteBuffer ByteBuffer::view(size_t length) const { - assertCanAccessRelative(length); return ByteBuffer(bytes, length, ptr, ptr + length); } +ByteBuffer ByteBuffer::view(uint8_t *ptr, const uint8_t *end) const { + return ByteBuffer(bytes, end - ptr, ptr, end); +} + void ByteBuffer::checkAndUpdateEnd(size_t newBytes) { uint8_t *newPtr = ptr + newBytes; if (newPtr >= end) { diff --git a/ByteBuffer.h b/ByteBuffer.h index ee54a0a..479a227 100644 --- a/ByteBuffer.h +++ b/ByteBuffer.h @@ -17,12 +17,12 @@ public: class ByteBuffer { public: - ByteBuffer(uint8_t *bytes, size_t capacity); + ByteBuffer(const uint8_t *bytes, size_t capacity); - ByteBuffer(uint8_t *bytes, size_t capacity, size_t zero, size_t size); + 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; + DF << "end=" << (uint64_t)end << ", zero=" << (uint64_t)zero << ", size=" << (end - zero); return end - zero; } @@ -35,8 +35,8 @@ public: } inline void setCursor(size_t newCursor) { - assertCanAccessRelative(newCursor); - ptr = ptr + newCursor; +// assertCanAccessRelative(newCursor); + ptr = (uint8_t *) &zero[newCursor]; } inline void skip(size_t length) { @@ -67,7 +67,9 @@ public: std::string toString() const; private: - ByteBuffer(const uint8_t *bytes, size_t capacity, uint8_t *zero, uint8_t *end); + 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); diff --git a/CMakeLists.txt b/CMakeLists.txt index 0f2cbf2..82dcfc8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 2.8.4) project(ble_toys) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14") set(Boost_USE_STATIC_LIBS OFF) set(Boost_USE_MULTITHREADED OFF) diff --git a/test/ByteBufferTest.cpp b/test/ByteBufferTest.cpp index 4c51bcc..ed842f2 100644 --- a/test/ByteBufferTest.cpp +++ b/test/ByteBufferTest.cpp @@ -10,9 +10,9 @@ #define checkBuffer(buffer, size, capacity, cursor) \ D << "size=" << buffer.getSize() << ", capacity=" << buffer.getCapacity() << ", cursor=" << buffer.getCursor(); \ - BOOST_REQUIRE_EQUAL(buffer.getSize(), size); \ - BOOST_REQUIRE_EQUAL(buffer.getCapacity(), capacity); \ - BOOST_REQUIRE_EQUAL(buffer.getCursor(), cursor) + BOOST_CHECK_EQUAL(buffer.getSize(), size); \ + BOOST_CHECK_EQUAL(buffer.getCapacity(), capacity); \ + BOOST_CHECK_EQUAL(buffer.getCursor(), cursor) using namespace std; @@ -50,34 +50,31 @@ BOOST_AUTO_TEST_CASE(empty_buffer) { } */ -#include <iostream> BOOST_AUTO_TEST_CASE(basic) { Bytes b(1000); - ByteBuffer buffer(b.bytes, 1000); + ByteBuffer buffer(b.bytes, 1000, 0, 1000); checkBuffer(buffer, 1000, 1000, 0); - BOOST_REQUIRE_EQUAL(buffer.get8(), 0); + BOOST_CHECK_EQUAL(buffer.get8(), 0); checkBuffer(buffer, 1000, 1000, 1); for (int i = 1; i < b.capacity; i++) { - cout << "i=" << i << endl; - BOOST_REQUIRE_EQUAL(buffer.get8(), b.bytes[i]); + BOOST_CHECK_EQUAL(buffer.get8(), b.bytes[i]); } } -/* BOOST_AUTO_TEST_CASE(setCursor) { Bytes b(1000); ByteBuffer buffer(b.bytes, 1000, 0, 10); checkBuffer(buffer, 10, 1000, 0); - BOOST_REQUIRE_EQUAL(buffer.get8(), 0); + BOOST_CHECK_EQUAL(buffer.get8(), 0); checkBuffer(buffer, 10, 1000, 1); buffer.setCursor(0); checkBuffer(buffer, 10, 1000, 0); - BOOST_REQUIRE_EQUAL(buffer.get8(), 0); + BOOST_CHECK_EQUAL(buffer.get8(), 0); checkBuffer(buffer, 10, 1000, 1); buffer.setCursor(9); @@ -88,18 +85,15 @@ BOOST_AUTO_TEST_CASE(view) { Bytes b(1000); ByteBuffer buffer(b.bytes, b.capacity, 0, 10); - BOOST_REQUIRE_EQUAL(buffer.get8(), 0); - checkBuffer(buffer, 10, 1000, 1); - + BOOST_CHECK_EQUAL(buffer.get8(), 0); ByteBuffer view1 = buffer.view(); checkBuffer(view1, 9, 9, 0); - BOOST_REQUIRE_EQUAL(view1.get8(), 1); - BOOST_REQUIRE_EQUAL(view1.get8(), 2); + BOOST_CHECK_EQUAL(view1.get8(), 1); + BOOST_CHECK_EQUAL(view1.get8(), 2); ByteBuffer view2 = view1.view(); checkBuffer(view2, 7, 7, 0); - BOOST_REQUIRE_EQUAL(view1.get8(), 3); + BOOST_CHECK_EQUAL(view1.get8(), 3); } -*/ |