From a47b94c3a9036b545f9c57d2800afdb837ae2055 Mon Sep 17 00:00:00 2001 From: jaby Date: Fri, 16 Dec 2022 21:54:01 +0100 Subject: [PATCH] Prepare CircularBuffer --- include/PSX/Auxiliary/circular_buffer.hpp | 54 +++++++++++++++++++ .../PSX/File/Processor/cd_file_processor.hpp | 1 + .../src/File/Processor/cd_file_processor.cpp | 3 +- 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 include/PSX/Auxiliary/circular_buffer.hpp diff --git a/include/PSX/Auxiliary/circular_buffer.hpp b/include/PSX/Auxiliary/circular_buffer.hpp new file mode 100644 index 00000000..4dc8ca32 --- /dev/null +++ b/include/PSX/Auxiliary/circular_buffer.hpp @@ -0,0 +1,54 @@ +#ifndef __JABYENGINE_CIRCULAR_BUFFER_HPP__ +#define __JABYENGINE_CIRCULAR_BUFFER_HPP__ +#include "../../stddef.h" + +namespace JabyEngine { + class CircularBuffer { + private: + typedef uint32_t T; + + T* start_adr = nullptr; + size_t end_idx = 0; + size_t read_idx = 0; + size_t write_idx = 0; + + static size_t increment(size_t cur_idx, size_t end_idx) { + static constexpr size_t Step = 1; + + cur_idx += Step; + if(cur_idx >= end_idx) { + return (end_idx - cur_idx); + } + + return cur_idx; + } + + public: + CircularBuffer() = default; + + void setup(T* buffer_start_adr, size_t element_count) { + this->start_adr = buffer_start_adr; + this->end_idx = element_count; + this->read_idx = 0; + this->write_idx = 0; + } + + T* push() { + const auto new_idx = CircularBuffer::increment(this->write_idx, this->end_idx); + if(new_idx != this->read_idx) { + auto* dst = (this->start_adr + this->write_idx); + + this->write_idx = new_idx; + return dst; + } + + return nullptr; + } + + constexpr bool has_data() const { + return (this->read_idx != this->write_idx); + } + }; +} + +#endif //!__JABYENGINE_CIRCULAR_BUFFER_HPP__ \ No newline at end of file diff --git a/include/PSX/File/Processor/cd_file_processor.hpp b/include/PSX/File/Processor/cd_file_processor.hpp index 3fe9f0ae..cb0b3b1b 100644 --- a/include/PSX/File/Processor/cd_file_processor.hpp +++ b/include/PSX/File/Processor/cd_file_processor.hpp @@ -24,6 +24,7 @@ namespace CDFileProcessor { const auto& lba_info = overlay_lbas[file.rel_lba_idx]; state.setup(lba_info.lba, lba_info.size, file.payload); + //while(state.process());??? } } } diff --git a/src/Library/src/File/Processor/cd_file_processor.cpp b/src/Library/src/File/Processor/cd_file_processor.cpp index f7e77451..10c19829 100644 --- a/src/Library/src/File/Processor/cd_file_processor.cpp +++ b/src/Library/src/File/Processor/cd_file_processor.cpp @@ -1 +1,2 @@ -#include \ No newline at end of file +#include +