summaryrefslogtreecommitdiff
path: root/modules/core
diff options
context:
space:
mode:
authorClaudius 'keldu' Holeksa <mail@keldu.de>2024-08-01 17:51:07 +0200
committerClaudius 'keldu' Holeksa <mail@keldu.de>2024-08-01 17:51:07 +0200
commit2ed110ed2d0ef093ba6cc14771b6387eff70c866 (patch)
tree9a06d9939584d821a394c6af5bc17ee32f6c6b38 /modules/core
parentb2d802af5cb449f11664a21e5f6b6dc02584e295 (diff)
Broken implementation of chain array_buffer done
Diffstat (limited to 'modules/core')
-rw-r--r--modules/core/c++/buffer.cpp31
-rw-r--r--modules/core/c++/buffer.hpp6
-rw-r--r--modules/core/tests/array_buffer.cpp65
-rw-r--r--modules/core/tests/chain_array_buffer.cpp10
4 files changed, 106 insertions, 6 deletions
diff --git a/modules/core/c++/buffer.cpp b/modules/core/c++/buffer.cpp
index d48297c..3793226 100644
--- a/modules/core/c++/buffer.cpp
+++ b/modules/core/c++/buffer.cpp
@@ -467,18 +467,27 @@ size_t chain_array_buffer::read_segment_length(size_t offset) const {
return buffer_.at(searched_read_i).read_segment_length(offset);
}
+void chain_array_buffer::read_advance(uint64_t len) {
+
+}
+
uint8_t& chain_array_buffer::read(uint64_t i) {
uint64_t search_read_i = read_index_;
uint64_t search_read_pos = read_position_;
- return buffer_.at(search_read_i).at(search_read_pos);
+ return buffer_.at(search_read_i).read();
/// @TODO
while( i >= buffer_.at(search_read_i).read_segment_length() ){
}
- return buffer_.at(search_read_i).at(search_read_pos);
+ return buffer_.at(search_read_i).read(search_read_pos);
+}
+
+const uint8_t& chain_array_buffer::read(uint64_t i) const {
+ static uint8_t foo{};
+ return foo;
}
size_t chain_array_buffer::write_position() const {
@@ -510,6 +519,24 @@ size_t chain_array_buffer::write_segment_length(size_t offset) const {
return buffer_.at(searched_write_i).write_segment_length(offset);
}
+void chain_array_buffer::write_advance(uint64_t len) {
+
+}
+
+uint8_t& chain_array_buffer::write(uint64_t i){
+ static uint8_t foo{};
+ return foo;
+}
+
+const uint8_t& chain_array_buffer::write(uint64_t i)const{
+ static uint8_t foo{};
+ return foo;
+}
+
+error chain_array_buffer::write_require_length(uint64_t len) {
+
+ return make_error<err::not_implemented>();
+}
diff --git a/modules/core/c++/buffer.hpp b/modules/core/c++/buffer.hpp
index 47f55e3..2c8fcde 100644
--- a/modules/core/c++/buffer.hpp
+++ b/modules/core/c++/buffer.hpp
@@ -138,7 +138,7 @@ public:
/*
* One time buffer
*/
-class array_buffer : public buffer {
+class array_buffer final : public buffer {
private:
std::vector<uint8_t> buffer_;
@@ -167,7 +167,7 @@ public:
error write_require_length(size_t bytes) override;
};
-class chain_array_buffer : public buffer {
+class chain_array_buffer final : public buffer {
private:
std::deque<array_buffer> buffer_;
@@ -198,8 +198,6 @@ public:
error write_require_length(size_t bytes) override;
- /**
- */
error_or<array_buffer> extract_front(uint64_t size) {
if(buffer_.empty()){
return make_error<err::recoverable>("Chain Array buffer is empty.");
diff --git a/modules/core/tests/array_buffer.cpp b/modules/core/tests/array_buffer.cpp
new file mode 100644
index 0000000..bc9bffd
--- /dev/null
+++ b/modules/core/tests/array_buffer.cpp
@@ -0,0 +1,65 @@
+#include "../c++/test/suite.hpp"
+#include "../c++/buffer.hpp"
+
+namespace {
+void do_array_consistency_checks(const saw::array_buffer& buff){
+ SAW_EXPECT(buff.write_segment_length() == buff.write_composite_length(), "Unexpected segmented write size.");
+ SAW_EXPECT(buff.read_segment_length() == buff.read_composite_length(), "Unexpected segmented read size.");
+}
+
+SAW_TEST("Array Buffer Construct") {
+ using namespace saw;
+
+ uint64_t size = 1024u;
+ array_buffer buff{size};
+
+ SAW_EXPECT(buff.read_position() == 0u, "Unexpected read position");
+ SAW_EXPECT(buff.write_position() == 0u, "Unexpected write position");
+ SAW_EXPECT(buff.write_composite_length() == size, "Unexpected write size.");
+ SAW_EXPECT(buff.read_composite_length() == 0u, "Unexpected read size.");
+ do_array_consistency_checks(buff);
+}
+
+SAW_TEST("Array Buffer Write Advance") {
+ using namespace saw;
+
+ uint64_t size = 1024u;
+ array_buffer buff{size};
+
+ uint64_t advance = 256u;
+ buff.write_advance(advance);
+
+ SAW_EXPECT(buff.read_position() == 0u, "Unexpected read position");
+ SAW_EXPECT(buff.write_position() == advance, "Unexpected write position");
+ SAW_EXPECT(buff.read_composite_length() == advance, "Unexpected Read composite length.");
+ SAW_EXPECT(buff.write_composite_length() == (size-advance), "Unexpected Write composite length.");
+ do_array_consistency_checks(buff);
+}
+
+SAW_TEST("Array Buffer Write and Read Advance") {
+ using namespace saw;
+
+ uint64_t size = 1024u;
+ array_buffer buff{size};
+
+ uint64_t advance = 256u;
+ buff.write_advance(advance);
+
+ uint64_t read_advance = 128u;
+ buff.read_advance(read_advance);
+
+ SAW_EXPECT(buff.read_position() == read_advance, "Unexpected read position");
+ SAW_EXPECT(buff.write_position() == advance, "Unexpected write position");
+ SAW_EXPECT(buff.read_composite_length() == advance-read_advance, "Unexpected Read composite length.");
+ SAW_EXPECT(buff.write_composite_length() == (size-advance), "Unexpected Write composite length.");
+ do_array_consistency_checks(buff);
+
+ buff.read_advance(read_advance);
+
+ SAW_EXPECT(buff.read_position() == advance, "Unexpected read position");
+ SAW_EXPECT(buff.write_position() == advance, "Unexpected write position");
+ SAW_EXPECT(buff.read_composite_length() == 0u, "Unexpected Read composite length.");
+ SAW_EXPECT(buff.write_composite_length() == (size-advance), "Unexpected Write composite length.");
+ do_array_consistency_checks(buff);
+}
+}
diff --git a/modules/core/tests/chain_array_buffer.cpp b/modules/core/tests/chain_array_buffer.cpp
new file mode 100644
index 0000000..9e984d1
--- /dev/null
+++ b/modules/core/tests/chain_array_buffer.cpp
@@ -0,0 +1,10 @@
+#include "../c++/test/suite.hpp"
+#include "../c++/buffer.hpp"
+
+namespace {
+SAW_TEST("Chain Array Buffer Construct") {
+ using namespace saw;
+
+ chain_array_buffer buff;
+}
+}