summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Blum2012-08-22 22:40:28 -0700
committerJosh Blum2012-08-26 16:03:51 -0700
commit716b608fbace1397883f53e8d970bf87aacd6d1b (patch)
tree9450c388ff6e4eaf260f0f1657381dd1a6ccba6a
parente9e00f46429441a4aa455b35844271f32981fb4c (diff)
downloadsandhi-716b608fbace1397883f53e8d970bf87aacd6d1b.tar.gz
sandhi-716b608fbace1397883f53e8d970bf87aacd6d1b.tar.bz2
sandhi-716b608fbace1397883f53e8d970bf87aacd6d1b.zip
runtime: io signature looks like a shared ptr
-rw-r--r--include/gnuradio/element.hpp10
-rw-r--r--include/gnuradio/gr_block.h1
-rw-r--r--include/gnuradio/gr_io_signature.h13
-rw-r--r--include/gnuradio/io_signature.hpp15
-rw-r--r--lib/element.cpp15
-rw-r--r--lib/element_impl.hpp5
-rw-r--r--lib/hier_block.cpp1
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)