diff options
author | Josh Blum | 2012-11-02 23:20:03 -0700 |
---|---|---|
committer | Josh Blum | 2012-11-02 23:20:03 -0700 |
commit | a7912fd8a50a1a2dad436d36a69efd238354e30b (patch) | |
tree | 60e42fc0607f82c37a31f2d5cac8e67eb96415ac | |
parent | 279f29edb6b48e57e5bd71f9a9dce20dc911aef2 (diff) | |
download | sandhi-a7912fd8a50a1a2dad436d36a69efd238354e30b.tar.gz sandhi-a7912fd8a50a1a2dad436d36a69efd238354e30b.tar.bz2 sandhi-a7912fd8a50a1a2dad436d36a69efd238354e30b.zip |
store a reference to the element, even when its not in a sptr
-rw-r--r-- | lib/hier_block.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/hier_block.cpp b/lib/hier_block.cpp index 6c95e9b..36e1b9d 100644 --- a/lib/hier_block.cpp +++ b/lib/hier_block.cpp @@ -45,6 +45,13 @@ void HierBlock::disconnect(const Element &elem) (*this)->topology->remove_topology(elem->topology.get()); } +static Apology::Wax get_elem_ref(const Element &elem) +{ + boost::shared_ptr<Element> shared_elem = elem.weak_self.lock(); + if (shared_elem) return shared_elem; + return elem; +} + void HierBlock::connect( const Element &src, const size_t src_index, @@ -53,8 +60,8 @@ void HierBlock::connect( ){ //TODO, this is the perfect place to validate IO sigs const Apology::Flow flow( - Apology::Port(src->get_elem(), src_index, src.weak_self.lock()), - Apology::Port(sink->get_elem(), sink_index, sink.weak_self.lock()) + Apology::Port(src->get_elem(), src_index, get_elem_ref(src)), + Apology::Port(sink->get_elem(), sink_index, get_elem_ref(sink)) ); (*this)->topology->add_flow(flow); } |