From b6d1b1f45b9266104333fd440c8c18dac8c14abd Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Sat, 28 May 2022 13:21:43 +0000 Subject: [PATCH] added git-svn-id: http://moon:8086/svn/software/trunk/libsrc/cpp@880 b431acfa-c32f-4a4a-93f1-934dc6c82436 --- radio/processor/src/Block.cpp | 0 radio/processor/src/Block.hpp | 82 +++++++++++++++++++++++++++++ radio/processor/src/Processor.cpp | 11 ++++ radio/processor/src/Processor.hpp | 37 +++++++++++++ radio/processor/test/NullSink.cpp | 2 + radio/processor/test/NullSink.hpp | 37 +++++++++++++ radio/processor/test/NullSource.cpp | 2 + radio/processor/test/NullSource.hpp | 40 ++++++++++++++ radio/processor/test/main.cpp | 13 +++++ radio/processor/test/test02.cpp | 31 +++++++++++ 10 files changed, 255 insertions(+) create mode 100644 radio/processor/src/Block.cpp create mode 100644 radio/processor/src/Block.hpp create mode 100644 radio/processor/src/Processor.cpp create mode 100644 radio/processor/src/Processor.hpp create mode 100644 radio/processor/test/NullSink.cpp create mode 100644 radio/processor/test/NullSink.hpp create mode 100644 radio/processor/test/NullSource.cpp create mode 100644 radio/processor/test/NullSource.hpp create mode 100644 radio/processor/test/main.cpp create mode 100644 radio/processor/test/test02.cpp diff --git a/radio/processor/src/Block.cpp b/radio/processor/src/Block.cpp new file mode 100644 index 0000000..e69de29 diff --git a/radio/processor/src/Block.hpp b/radio/processor/src/Block.hpp new file mode 100644 index 0000000..c012956 --- /dev/null +++ b/radio/processor/src/Block.hpp @@ -0,0 +1,82 @@ +#ifndef __RADIO_BLOCK_H__ +#define __RADIO_BLOCK_H__ + +#include +#include "Buffer.hpp" + + +class Block +{ + + public: + enum DType + { + None, + Float, + Double + }; + + Block(size_t num_in, size_t num_out, DType dtype_in, DType dtype_out) + : m_num_in(num_in) + , m_num_out(num_out) + , m_dtype_in(dtype_in) + , m_dtype_out(dtype_out) + { + + } + 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) {}; + + size_t num_in() + { + return m_num_in; + } + + size_t num_out() + { + return m_num_out; + } + + DType dtype_in() + { + return m_dtype_in; + } + + DType dtype_out() + { + return m_dtype_out; + } + + void addBuffer(IBuffer *out) + { + m_buf_out.push_front(out); + } + + virtual IBuffer* buffer() + { + return nullptr; + } + + private: + size_t m_num_in; + size_t m_num_out; + DType m_dtype_in; + DType m_dtype_out; + std::forward_listm_buf_out; + +}; + +#endif // __RADIO_BLOCK_H__ + diff --git a/radio/processor/src/Processor.cpp b/radio/processor/src/Processor.cpp new file mode 100644 index 0000000..852e339 --- /dev/null +++ b/radio/processor/src/Processor.cpp @@ -0,0 +1,11 @@ +#include "Processor.hpp" + +Processor::Processor() +{ + +} + +Processor::~Processor() +{ + +} \ No newline at end of file diff --git a/radio/processor/src/Processor.hpp b/radio/processor/src/Processor.hpp new file mode 100644 index 0000000..896217d --- /dev/null +++ b/radio/processor/src/Processor.hpp @@ -0,0 +1,37 @@ +#ifndef __RADIO_PROCESSOR_HPP_ +#define __RADIO_PROCESSOR_HPP_ + +#include +#include + +#pragma once + +class Processor +{ +public: + Processor(); + ~Processor(); + + void blockAdd(Block &block) + { + m_blockList.push_front(&block); + } + + void blockRem(Block &block) + { + m_blockList.remove(&block); + } + + void run() + { + for (auto block : m_blockList) + { + block->process(); + } + } + +private: + std::forward_listm_blockList; +}; + +#endif \ No newline at end of file diff --git a/radio/processor/test/NullSink.cpp b/radio/processor/test/NullSink.cpp new file mode 100644 index 0000000..2ab1a21 --- /dev/null +++ b/radio/processor/test/NullSink.cpp @@ -0,0 +1,2 @@ +#include "NullSink.hpp" + diff --git a/radio/processor/test/NullSink.hpp b/radio/processor/test/NullSink.hpp new file mode 100644 index 0000000..2e468de --- /dev/null +++ b/radio/processor/test/NullSink.hpp @@ -0,0 +1,37 @@ +#ifndef NULLSINK_HPP +#define NULLSINK_HPP + +#pragma once + +#include + +class NullSink : public Block +{ +public: + NullSink(DType dt_in) + : Block(1, 0, dt_in, DType::None) + { + + } + + virtual ~NullSink() = default; + + void process(IBuffer &in) override + { + if (dtype_in() == DType::Double) + { + auto buf = reinterpret_cast&>(in); + process_double(buf); + } + } + + void process_double(Buffer &buf) + { + buf.consume(buf.len()); + } + +private: + +}; + +#endif \ No newline at end of file diff --git a/radio/processor/test/NullSource.cpp b/radio/processor/test/NullSource.cpp new file mode 100644 index 0000000..d12bb90 --- /dev/null +++ b/radio/processor/test/NullSource.cpp @@ -0,0 +1,2 @@ +#include "NullSource.hpp" + diff --git a/radio/processor/test/NullSource.hpp b/radio/processor/test/NullSource.hpp new file mode 100644 index 0000000..e3a3153 --- /dev/null +++ b/radio/processor/test/NullSource.hpp @@ -0,0 +1,40 @@ +#ifndef NULLSOURCE_HPP +#define NULLSOURCE_HPP + +#pragma once + +#include + +class NullSource : public Block +{ +public: + NullSource(DType dtype) + : Block(0, 1, DType::None, dtype) + { + + } + + 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_double(Buffer &out) + { + double d = 0; + for (int i=0; i < (out.capacity() - out.len()); i++) + { + out.write(&d, 1); + } + } +private: + +}; + +#endif // NULLSOURCE_HPP \ No newline at end of file diff --git a/radio/processor/test/main.cpp b/radio/processor/test/main.cpp new file mode 100644 index 0000000..e4da358 --- /dev/null +++ b/radio/processor/test/main.cpp @@ -0,0 +1,13 @@ +#include +#include + +int test01(); +int test02(); + +int main() +{ + printf("Hallooooooooooooooooooo Welt!\n"); + int result = test01(); + + return 0; +} \ No newline at end of file diff --git a/radio/processor/test/test02.cpp b/radio/processor/test/test02.cpp new file mode 100644 index 0000000..a486868 --- /dev/null +++ b/radio/processor/test/test02.cpp @@ -0,0 +1,31 @@ +#include +#include + +#include "Processor.hpp" +#include "NullSource.hpp" +#include "NullSink.hpp" +#include "TestBlock.hpp" + + +#ifndef LENGTH +#define LENGTH(a) (sizeof(a)/sizeof(a[0])) +#endif + +int test02() +{ + Processor processor; + NullSource nullSrc(Block::DType::Double); + NullSink nullSink(Block::DType::Double); + TestBlock testblock(1024); + + nullSrc.addBuffer(testblock.buffer()); + testblock.addBuffer(nullSink.buffer()); + + processor.blockAdd(nullSrc); + processor.blockAdd(testblock); + processor.blockAdd(nullSink); + + processor.run(); + + return 0; +} \ No newline at end of file