diff --git a/radio/processor/src/Block.hpp b/radio/processor/src/Block.hpp index 76a1528..3f3dc8d 100644 --- a/radio/processor/src/Block.hpp +++ b/radio/processor/src/Block.hpp @@ -2,9 +2,9 @@ #define __RADIO_BLOCK_H__ #include +#include #include "Buffer.hpp" - namespace Processor { class Block @@ -24,16 +24,6 @@ class Block virtual void process() = 0; - IBuffer* buffer_in(size_t index=0) const - { - return m_buf_in; - } - - IBuffer* buffer_out(size_t index=0) const - { - return m_buf_out; - } - size_t num_in() const { return m_num_in; @@ -54,6 +44,36 @@ class Block m_buf_out = buf; } + template + Buffer* buffer_in(size_t index=0) + { + Buffer *buf = nullptr; + if (m_buf_in) + { + buf = dynamic_cast*>(m_buf_in); + } + if (!buf) + { + throw Exception("buffer_in() failed!"); + } + return buf; + } + + template + Buffer* buffer_out(size_t index=0) + { + Buffer *buf = nullptr; + if (m_buf_out) + { + buf = dynamic_cast*>(m_buf_out); + } + if (!buf) + { + throw Exception("buffer_out() failed!"); + } + return buf; + } + protected: size_t m_num_in; size_t m_num_out; @@ -62,6 +82,8 @@ class Block bool m_isBypass; }; + + } // Processor #endif // __RADIO_BLOCK_H__ diff --git a/radio/processor/src/Buffer.hpp b/radio/processor/src/Buffer.hpp index ea972f1..260de62 100644 --- a/radio/processor/src/Buffer.hpp +++ b/radio/processor/src/Buffer.hpp @@ -5,9 +5,7 @@ #include #include #include - -#define EXC_MSG(code) (std::string(__PRETTY_FUNCTION__) + ", line " + std::to_string(__LINE__) + ", code " + std::to_string(code)) -#define EXC_EXCEPT(code) throw Buffer::Exception(EXC_MSG(code)) +#include "Exception.hpp" #ifdef PROCESSOR_BUFFER_USE_EXCEPTIONS #define RETURN_OR_EXCEPT(code) EXC_EXCEPT(code) @@ -17,6 +15,25 @@ namespace Processor { + +class Exception : public std::exception +{ + std::string m_msg; + + public: + Exception(std::string msg) + : std::exception() + , m_msg(msg) + { + + } + const char* what() const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW + { + return m_msg.c_str(); + } + +}; + class IBuffer { public: @@ -33,23 +50,6 @@ class Buffer : public IBuffer Err_InvalidSize=1 }; - class Exception : public std::exception - { - std::string m_msg; - - public: - Exception(std::string msg) - : std::exception() - , m_msg(msg) - { - - } - const char* what() const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW - { - return m_msg.c_str(); - } - - }; Buffer(size_t capacity=0); ~Buffer(); Buffer(const Buffer &rhs) = delete;