summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/gnuradio/gr_io_signature.h35
-rw-r--r--include/gnuradio/io_signature.hpp32
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