diff options
author | Claudius 'keldu' Holeksa <mail@keldu.de> | 2024-08-01 17:51:07 +0200 |
---|---|---|
committer | Claudius 'keldu' Holeksa <mail@keldu.de> | 2024-08-01 17:51:07 +0200 |
commit | 2ed110ed2d0ef093ba6cc14771b6387eff70c866 (patch) | |
tree | 9a06d9939584d821a394c6af5bc17ee32f6c6b38 /modules/core | |
parent | b2d802af5cb449f11664a21e5f6b6dc02584e295 (diff) |
Broken implementation of chain array_buffer done
Diffstat (limited to 'modules/core')
-rw-r--r-- | modules/core/c++/buffer.cpp | 31 | ||||
-rw-r--r-- | modules/core/c++/buffer.hpp | 6 | ||||
-rw-r--r-- | modules/core/tests/array_buffer.cpp | 65 | ||||
-rw-r--r-- | modules/core/tests/chain_array_buffer.cpp | 10 |
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; +} +} |