aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ByteBuffer.cpp25
-rw-r--r--ByteBuffer.h14
-rw-r--r--CMakeLists.txt2
-rw-r--r--test/ByteBufferTest.cpp30
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);
}
-*/