From fb89ad3864f3821b74b43dc6056b173a855eb7ec Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Sat, 28 May 2022 16:23:17 +0000 Subject: [PATCH] Na endlich :/ git-svn-id: http://moon:8086/svn/software/trunk/libsrc/cpp@884 b431acfa-c32f-4a4a-93f1-934dc6c82436 --- radio/processor/src/Block.hpp | 20 +++++--------- radio/processor/src/Buffer.hpp | 5 ++-- radio/processor/src/Buffer.tcc | 1 + radio/processor/src/Processor.hpp | 6 ++--- radio/processor/test/NullSink.hpp | 39 +++++++++++++++------------ radio/processor/test/NullSource.hpp | 42 ++++++++++++++--------------- radio/processor/test/TestBlock.cpp | 11 +++----- radio/processor/test/TestBlock.hpp | 26 ++++++++++++------ radio/processor/test/main.cpp | 2 +- radio/processor/test/test02.cpp | 8 +++--- 10 files changed, 84 insertions(+), 76 deletions(-) diff --git a/radio/processor/src/Block.hpp b/radio/processor/src/Block.hpp index c012956..38fab36 100644 --- a/radio/processor/src/Block.hpp +++ b/radio/processor/src/Block.hpp @@ -21,23 +21,13 @@ class Block , m_num_out(num_out) , m_dtype_in(dtype_in) , m_dtype_out(dtype_out) + , m_buf_out(nullptr) { } virtual ~Block() = default; - void process() - { - if (dtype_in() == 0 and dtype_out() > 0) - { - for (auto buf : m_buf_out) - { - process(*buf); - } - } - } - virtual void process(IBuffer &in, IBuffer &out) {}; - virtual void process(IBuffer &in_or_out) {}; + virtual void process() = 0; size_t num_in() { @@ -61,7 +51,7 @@ class Block void addBuffer(IBuffer *out) { - m_buf_out.push_front(out); + m_buf_out = out; } virtual IBuffer* buffer() @@ -74,7 +64,9 @@ class Block size_t m_num_out; DType m_dtype_in; DType m_dtype_out; - std::forward_listm_buf_out; + + protected: + IBuffer* m_buf_out; }; diff --git a/radio/processor/src/Buffer.hpp b/radio/processor/src/Buffer.hpp index f5db9c8..487cc0f 100644 --- a/radio/processor/src/Buffer.hpp +++ b/radio/processor/src/Buffer.hpp @@ -14,7 +14,8 @@ class IBuffer { - + public: + virtual ~IBuffer() = default; }; template @@ -64,8 +65,8 @@ class Buffer : public IBuffer size_t m_len; size_t m_wi; size_t m_ri; - T *m_data[2]; size_t m_bid; + T *m_data[2]; void make_contigious() { if (m_len == 0) diff --git a/radio/processor/src/Buffer.tcc b/radio/processor/src/Buffer.tcc index 1654ef3..754f8ad 100644 --- a/radio/processor/src/Buffer.tcc +++ b/radio/processor/src/Buffer.tcc @@ -8,6 +8,7 @@ Buffer::Buffer(size_t capacity) , m_len(0) , m_wi(0) , m_ri(0) +, m_bid(0) , m_data{nullptr, nullptr} { m_data[0] = new T[capacity]; diff --git a/radio/processor/src/Processor.hpp b/radio/processor/src/Processor.hpp index 896217d..fd2c7bc 100644 --- a/radio/processor/src/Processor.hpp +++ b/radio/processor/src/Processor.hpp @@ -1,7 +1,7 @@ #ifndef __RADIO_PROCESSOR_HPP_ #define __RADIO_PROCESSOR_HPP_ -#include +#include #include #pragma once @@ -14,7 +14,7 @@ public: void blockAdd(Block &block) { - m_blockList.push_front(&block); + m_blockList.push_back(&block); } void blockRem(Block &block) @@ -31,7 +31,7 @@ public: } private: - std::forward_listm_blockList; + std::listm_blockList; }; #endif \ No newline at end of file diff --git a/radio/processor/test/NullSink.hpp b/radio/processor/test/NullSink.hpp index 2e468de..eda420a 100644 --- a/radio/processor/test/NullSink.hpp +++ b/radio/processor/test/NullSink.hpp @@ -5,32 +5,37 @@ #include +template class NullSink : public Block { public: - NullSink(DType dt_in) - : Block(1, 0, dt_in, DType::None) - { + NullSink(size_t bufSize) + : Block(1, 0, DType::Double, DType::None) + , m_buf_in(bufSize) + { - } + } - virtual ~NullSink() = default; + virtual ~NullSink() = default; - void process(IBuffer &in) override - { - if (dtype_in() == DType::Double) - { - auto buf = reinterpret_cast&>(in); - process_double(buf); - } - } + void process() override + { + process(m_buf_in); + } - void process_double(Buffer &buf) - { - buf.consume(buf.len()); - } + void process(Buffer &in) + { + in.print("NullSink: "); + in.consume(in.len()); + } + + IBuffer* buffer() + { + return &m_buf_in; + } private: + Buffer m_buf_in; }; diff --git a/radio/processor/test/NullSource.hpp b/radio/processor/test/NullSource.hpp index e3a3153..7d9e136 100644 --- a/radio/processor/test/NullSource.hpp +++ b/radio/processor/test/NullSource.hpp @@ -5,34 +5,34 @@ #include +template class NullSource : public Block { public: - NullSource(DType dtype) - : Block(0, 1, DType::None, dtype) - { + NullSource(size_t bufSize) + : Block(0, 1, DType::None, DType::Double) + { - } + } - virtual ~NullSource() = default; + virtual ~NullSource() = default; - void process(IBuffer &out) override - { - if (dtype_out() == DType::Double) - { - auto buf_out = reinterpret_cast&>(out); - process_double(buf_out); - } - } + void process() + { + Buffer *buf_out = dynamic_cast*>(m_buf_out); + process(*buf_out); + } - void process_double(Buffer &out) - { - double d = 0; - for (int i=0; i < (out.capacity() - out.len()); i++) - { - out.write(&d, 1); - } - } + void process(Buffer &out) + { + double d = 0; + size_t toWrite = out.capacity() - out.len(); + + for (int i=0; i < toWrite; i++) + { + out.write(&d, 1); + } + } private: }; diff --git a/radio/processor/test/TestBlock.cpp b/radio/processor/test/TestBlock.cpp index 1963df4..e307236 100644 --- a/radio/processor/test/TestBlock.cpp +++ b/radio/processor/test/TestBlock.cpp @@ -1,12 +1,9 @@ #include "TestBlock.hpp" -void TestBlock::process(IBuffer &in, IBuffer &out) +void TestBlock::process(Buffer &in, Buffer &out) { - auto buf_in = reinterpret_cast&>(in); - auto buf_out = reinterpret_cast&>(out); - - size_t toCopy = buf_in.len(); - buf_out.write(buf_in.data_r(), toCopy); - buf_in.consume(toCopy); + size_t toCopy = in.len(); + out.write(in.data_r(), toCopy); + in.consume(toCopy); } diff --git a/radio/processor/test/TestBlock.hpp b/radio/processor/test/TestBlock.hpp index 5858119..fad7d13 100644 --- a/radio/processor/test/TestBlock.hpp +++ b/radio/processor/test/TestBlock.hpp @@ -11,18 +11,28 @@ using DTOUT = double; class TestBlock : public Block { public: - TestBlock(size_t bufSize) - : Block(1, 1, DType::Double, DType::Double) - , m_buf_in(bufSize) - { + TestBlock(size_t bufSize) + : Block(1, 1, DType::Double, DType::Double) + , m_buf_in(bufSize) + { - } - virtual ~TestBlock() = default; + } + virtual ~TestBlock() = default; - void process(IBuffer &in, IBuffer &out) override; + void process() override + { + Buffer *buf_out = dynamic_cast*>(m_buf_out); + process(m_buf_in, *buf_out); + } + void process(Buffer &in, Buffer &out); + IBuffer* buffer() + { + return &m_buf_in; + } + private: - Buffer m_buf_in; + Buffer m_buf_in; }; #endif \ No newline at end of file diff --git a/radio/processor/test/main.cpp b/radio/processor/test/main.cpp index e4da358..9ce036e 100644 --- a/radio/processor/test/main.cpp +++ b/radio/processor/test/main.cpp @@ -7,7 +7,7 @@ int test02(); int main() { printf("Hallooooooooooooooooooo Welt!\n"); - int result = test01(); + int result = test02(); return 0; } \ No newline at end of file diff --git a/radio/processor/test/test02.cpp b/radio/processor/test/test02.cpp index a486868..23e9bc4 100644 --- a/radio/processor/test/test02.cpp +++ b/radio/processor/test/test02.cpp @@ -11,12 +11,14 @@ #define LENGTH(a) (sizeof(a)/sizeof(a[0])) #endif +const size_t BUFSIZE = 16; + int test02() { Processor processor; - NullSource nullSrc(Block::DType::Double); - NullSink nullSink(Block::DType::Double); - TestBlock testblock(1024); + NullSource nullSrc(BUFSIZE); + NullSink nullSink(BUFSIZE); + TestBlock testblock(BUFSIZE); nullSrc.addBuffer(testblock.buffer()); testblock.addBuffer(nullSink.buffer());