diff options
author | Josh Blum | 2012-08-23 18:47:12 -0700 |
---|---|---|
committer | Josh Blum | 2012-08-26 16:03:51 -0700 |
commit | 4db3418d50068c0b869897128dc415fcbe055198 (patch) | |
tree | 018816b46e5f10c19ec12c4a3f6542fac1e71f24 | |
parent | 716b608fbace1397883f53e8d970bf87aacd6d1b (diff) | |
download | sandhi-4db3418d50068c0b869897128dc415fcbe055198.tar.gz sandhi-4db3418d50068c0b869897128dc415fcbe055198.tar.bz2 sandhi-4db3418d50068c0b869897128dc415fcbe055198.zip |
runtime: fixes for io signature to pass tests
-rw-r--r-- | include/gnuradio/gr_io_signature.h | 35 | ||||
-rw-r--r-- | include/gnuradio/io_signature.hpp | 32 |
2 files changed, 40 insertions, 27 deletions
diff --git a/include/gnuradio/gr_io_signature.h b/include/gnuradio/gr_io_signature.h index a3ab29a..aba4ae6 100644 --- a/include/gnuradio/gr_io_signature.h +++ b/include/gnuradio/gr_io_signature.h @@ -28,18 +28,15 @@ inline gr_io_signature_sptr gr_make_io_signature( int max_streams, int sizeof_stream_item ){ - gr_io_signature io_sig; + gnuradio::IOSignature io_sig(min_streams, max_streams); - io_sig->set_min_streams(min_streams); - io_sig->set_max_streams(max_streams); - - if (io_sig->max_streams() != gr_io_signature::IO_INFINITE) + if (io_sig.max_streams() != gr_io_signature::IO_INFINITE) { - io_sig->resize(io_sig->max_streams(), sizeof_stream_item); + io_sig.resize(io_sig.max_streams(), sizeof_stream_item); } else { - io_sig->resize(1, sizeof_stream_item); + io_sig.resize(1, sizeof_stream_item); } return io_sig; @@ -51,11 +48,9 @@ inline gr_io_signature_sptr gr_make_io_signature2( int sizeof_stream_item1, int sizeof_stream_item2 ){ - gr_io_signature io_sig; - io_sig->set_min_streams(min_streams); - io_sig->set_max_streams(max_streams); - io_sig->push_back(sizeof_stream_item1); - io_sig->push_back(sizeof_stream_item2); + gnuradio::IOSignature io_sig(min_streams, max_streams); + io_sig.push_back(sizeof_stream_item1); + io_sig.push_back(sizeof_stream_item2); return io_sig; } @@ -66,12 +61,10 @@ inline gr_io_signature_sptr gr_make_io_signature3( int sizeof_stream_item2, int sizeof_stream_item3 ){ - gr_io_signature io_sig; - io_sig->set_min_streams(min_streams); - io_sig->set_max_streams(max_streams); - io_sig->push_back(sizeof_stream_item1); - io_sig->push_back(sizeof_stream_item2); - io_sig->push_back(sizeof_stream_item3); + gnuradio::IOSignature io_sig(min_streams, max_streams); + io_sig.push_back(sizeof_stream_item1); + io_sig.push_back(sizeof_stream_item2); + io_sig.push_back(sizeof_stream_item3); return io_sig; } @@ -81,12 +74,10 @@ inline gr_io_signature_sptr gr_make_io_signaturev( int max_streams, const std::vector<T> &sizeof_stream_items ){ - gr_io_signature io_sig; - io_sig->set_min_streams(min_streams); - io_sig->set_max_streams(max_streams); + gnuradio::IOSignature io_sig(min_streams, max_streams); for (unsigned i = 0; i < sizeof_stream_items.size(); i++) { - io_sig->push_back(sizeof_stream_items[i]); + io_sig.push_back(sizeof_stream_items[i]); } return io_sig; } diff --git a/include/gnuradio/io_signature.hpp b/include/gnuradio/io_signature.hpp index 5473721..6cab2d6 100644 --- a/include/gnuradio/io_signature.hpp +++ b/include/gnuradio/io_signature.hpp @@ -18,30 +18,52 @@ #define INCLUDED_GNURADIO_IO_SIGNATURE_HPP #include <vector> +#include <stdexcept> namespace gnuradio { +/*! + * An IO signature describes the input or output specifications + * for the streaming input or output ports of a block. + * Properties are a maximum and minimum number of ports, + * and an item size in bytes for each port. + */ struct IOSignature : std::vector<int> { static const int IO_INFINITE = -1; + //! Create an empty signature with infinite IO IOSignature(void) { - this->set_min_streams(0); - this->set_max_streams(0); + this->set_min_streams(IO_INFINITE); + this->set_max_streams(IO_INFINITE); } + //! Create a signature with the specified min and max streams + IOSignature(const int min_streams, const int max_streams) + { + if (min_streams > max_streams and max_streams != IO_INFINITE) + { + throw std::invalid_argument("io signature fail: min_streams > max_streams"); + } + this->set_min_streams(min_streams); + this->set_max_streams(max_streams); + } + + //! Construct from pointer for backwards compatible shared_ptr usage. IOSignature(const IOSignature *sig) { *this = *sig; } + //! Overloaded arrow operator for backwards compatible shared_ptr usage. IOSignature* operator->(void) { return this; }; + //! Overloaded arrow operator for backwards compatible shared_ptr usage. const IOSignature* operator->(void) const { return this; @@ -69,11 +91,11 @@ struct IOSignature : std::vector<int> int sizeof_stream_item(const int index) const { - if (int(this->size()) >= index) + if (this->size() > unsigned(index)) { - return this->at(0); + return this->at(index); } - return this->at(index); + return this->back(); } std::vector<int> sizeof_stream_items(void) const |