summaryrefslogtreecommitdiff
path: root/lib/element_impl.hpp
diff options
context:
space:
mode:
authorJosh Blum2013-06-06 11:55:53 -0700
committerJosh Blum2013-06-06 11:55:53 -0700
commit4f03a5c6264ba3cd888454360f4c6819fa38023d (patch)
tree080e9d41148ac911b745009c869f9da7a0475c4d /lib/element_impl.hpp
parent43c7ef3e7807ad3035a2882d237b0441e6102817 (diff)
downloadsandhi-4f03a5c6264ba3cd888454360f4c6819fa38023d.tar.gz
sandhi-4f03a5c6264ba3cd888454360f4c6819fa38023d.tar.bz2
sandhi-4f03a5c6264ba3cd888454360f4c6819fa38023d.zip
gras: changes for actor in worker Apology commit
Diffstat (limited to 'lib/element_impl.hpp')
-rw-r--r--lib/element_impl.hpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/lib/element_impl.hpp b/lib/element_impl.hpp
index 4e75375..ce274f3 100644
--- a/lib/element_impl.hpp
+++ b/lib/element_impl.hpp
@@ -4,6 +4,7 @@
#define INCLUDED_LIBGRAS_ELEMENT_IMPL_HPP
#include <gras_impl/block_actor.hpp>
+#include <Apology/Worker.hpp>
#include <Apology/Topology.hpp>
#include <Apology/Executor.hpp>
#include <gras/element.hpp>
@@ -42,6 +43,7 @@ struct ElementImpl
std::map<std::string, Element> children;
//things may be in this element
+ boost::shared_ptr<Apology::Worker> worker;
boost::shared_ptr<Apology::Topology> topology;
boost::shared_ptr<Apology::Executor> executor;
boost::shared_ptr<BlockActor> block;
@@ -49,19 +51,21 @@ struct ElementImpl
ThreadPool thread_pool;
Apology::Base *get_elem(void) const
{
- if (block) return block.get();
- return topology.get();
+ if (worker) return worker.get();
+ if (topology) return topology.get();
+ else throw std::runtime_error("ElementImpl::get_elem fail");
}
template <typename MessageType>
void bcast_prio_msg(const MessageType &msg)
{
Theron::Receiver receiver;
- BOOST_FOREACH(Apology::Worker *worker, this->executor->get_workers())
+ BOOST_FOREACH(Apology::Worker *w, this->executor->get_workers())
{
+ BlockActor *actor = dynamic_cast<BlockActor *>(w->get_actor());
MessageType message = msg;
- message.prio_token = dynamic_cast<BlockActor *>(worker)->prio_token;
- worker->GetFramework().Send(message, receiver.GetAddress(), worker->GetAddress());
+ message.prio_token = actor->prio_token;
+ actor->GetFramework().Send(message, receiver.GetAddress(), actor->GetAddress());
}
size_t outstandingCount(this->executor->get_workers().size());
while (outstandingCount != 0)