diff options
-rw-r--r-- | include/gnuradio/element.hpp | 10 | ||||
-rw-r--r-- | include/gnuradio/gr_block.h | 1 | ||||
-rw-r--r-- | include/gnuradio/gr_io_signature.h | 13 | ||||
-rw-r--r-- | include/gnuradio/io_signature.hpp | 15 | ||||
-rw-r--r-- | lib/element.cpp | 15 | ||||
-rw-r--r-- | lib/element_impl.hpp | 5 | ||||
-rw-r--r-- | lib/hier_block.cpp | 1 |
7 files changed, 40 insertions, 20 deletions
diff --git a/include/gnuradio/element.hpp b/include/gnuradio/element.hpp index 849323a..0deee5c 100644 --- a/include/gnuradio/element.hpp +++ b/include/gnuradio/element.hpp @@ -19,7 +19,7 @@ #include <gnuradio/runtime_api.h> #include <gruel/pmt.h> -#include <gr_io_signature.h> +#include <gnuradio/io_signature.hpp> namespace gnuradio { @@ -45,13 +45,13 @@ struct GR_RUNTIME_API Element : boost::shared_ptr<ElementImpl> std::string name(void) const; - void set_output_signature(gr_io_signature_sptr); + void set_output_signature(const gnuradio::IOSignature &sig); - void set_input_signature(gr_io_signature_sptr); + void set_input_signature(const gnuradio::IOSignature &sig); - gr_io_signature_sptr input_signature(void) const; + const gnuradio::IOSignature &input_signature(void) const; - gr_io_signature_sptr output_signature(void) const; + const gnuradio::IOSignature &output_signature(void) const; }; diff --git a/include/gnuradio/gr_block.h b/include/gnuradio/gr_block.h index 9682010..c264a0d 100644 --- a/include/gnuradio/gr_block.h +++ b/include/gnuradio/gr_block.h @@ -19,6 +19,7 @@ #include <gnuradio/runtime_api.h> #include <gnuradio/block.hpp> +#include <gr_io_signature.h> #include <gr_sptr_magic.h> #include <gr_types.h> #include <gr_tags.h> diff --git a/include/gnuradio/gr_io_signature.h b/include/gnuradio/gr_io_signature.h index 870c1f5..a3ab29a 100644 --- a/include/gnuradio/gr_io_signature.h +++ b/include/gnuradio/gr_io_signature.h @@ -18,18 +18,17 @@ #define INCLUDED_GNURADIO_GR_IO_SIGNATURE_H #include <gnuradio/io_signature.hpp> -#include <boost/shared_ptr.hpp> #include <vector> typedef gnuradio::IOSignature gr_io_signature; -typedef boost::shared_ptr<gr_io_signature> gr_io_signature_sptr; +typedef gr_io_signature gr_io_signature_sptr; inline gr_io_signature_sptr gr_make_io_signature( int min_streams, int max_streams, int sizeof_stream_item ){ - gr_io_signature_sptr io_sig(new gnuradio::IOSignature()); + gr_io_signature io_sig; io_sig->set_min_streams(min_streams); io_sig->set_max_streams(max_streams); @@ -52,7 +51,7 @@ inline gr_io_signature_sptr gr_make_io_signature2( int sizeof_stream_item1, int sizeof_stream_item2 ){ - gr_io_signature_sptr io_sig(new gnuradio::IOSignature()); + 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); @@ -67,7 +66,7 @@ inline gr_io_signature_sptr gr_make_io_signature3( int sizeof_stream_item2, int sizeof_stream_item3 ){ - gr_io_signature_sptr io_sig(new gnuradio::IOSignature()); + 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); @@ -82,10 +81,10 @@ inline gr_io_signature_sptr gr_make_io_signaturev( int max_streams, const std::vector<T> &sizeof_stream_items ){ - gr_io_signature_sptr io_sig(new gnuradio::IOSignature()); + gr_io_signature io_sig; io_sig->set_min_streams(min_streams); io_sig->set_max_streams(max_streams); - for (size_t i = 0; i < sizeof_stream_items.size(); i++) + for (unsigned i = 0; i < sizeof_stream_items.size(); i++) { io_sig->push_back(sizeof_stream_items[i]); } diff --git a/include/gnuradio/io_signature.hpp b/include/gnuradio/io_signature.hpp index 3075797..5473721 100644 --- a/include/gnuradio/io_signature.hpp +++ b/include/gnuradio/io_signature.hpp @@ -32,6 +32,21 @@ struct IOSignature : std::vector<int> this->set_max_streams(0); } + IOSignature(const IOSignature *sig) + { + *this = *sig; + } + + IOSignature* operator->(void) + { + return this; + }; + + const IOSignature* operator->(void) const + { + return this; + }; + void set_min_streams(const int val) { _min_streams = val; diff --git a/lib/element.cpp b/lib/element.cpp index d73d68b..464ad94 100644 --- a/lib/element.cpp +++ b/lib/element.cpp @@ -32,6 +32,11 @@ Element::Element(const std::string &name) this->reset(new ElementImpl()); (*this)->name = name; (*this)->unique_id = ++unique_id_pool; + + //default io signature to something + IOSignature sig; sig.push_back(1); + this->set_input_signature(sig); + this->set_output_signature(sig); } long Element::unique_id(void) const @@ -45,22 +50,22 @@ std::string Element::name(void) const } -void Element::set_output_signature(gr_io_signature_sptr sig) +void Element::set_output_signature(const IOSignature &sig) { - (*this)->output_signature= sig; + (*this)->output_signature = sig; } -void Element::set_input_signature(gr_io_signature_sptr sig) +void Element::set_input_signature(const IOSignature &sig) { (*this)->input_signature = sig; } -gr_io_signature_sptr Element::input_signature(void) const +const IOSignature &Element::input_signature(void) const { return (*this)->input_signature; } -gr_io_signature_sptr Element::output_signature(void) const +const IOSignature &Element::output_signature(void) const { return (*this)->output_signature; } diff --git a/lib/element_impl.hpp b/lib/element_impl.hpp index 6f787c8..6f35b80 100644 --- a/lib/element_impl.hpp +++ b/lib/element_impl.hpp @@ -23,7 +23,6 @@ #include <gnuradio/element.hpp> #include <gnuradio/block.hpp> #include <gr_types.h> -#include <gr_io_signature.h> #include <vector> static const int STATE_INERT = 0; @@ -46,8 +45,8 @@ struct ElementImpl //per port properties std::vector<size_t> input_items_sizes; std::vector<size_t> output_items_sizes; - gr_io_signature_sptr input_signature; - gr_io_signature_sptr output_signature; + IOSignature input_signature; + IOSignature output_signature; std::vector<size_t> input_history_items; std::vector<size_t> output_multiple_items; diff --git a/lib/hier_block.cpp b/lib/hier_block.cpp index c067ab6..3184595 100644 --- a/lib/hier_block.cpp +++ b/lib/hier_block.cpp @@ -47,6 +47,7 @@ void HierBlock::connect( const Element &sink, const size_t sink_index ){ + //TODO, this is the perfect place to validate IO sigs const tsbe::Connection conn( tsbe::Port(src->get_elem(), src_index), tsbe::Port(sink->get_elem(), sink_index) |