// Copyright (C) by Josh Blum. See LICENSE.txt for licensing information. #ifndef INCLUDED_LIBGRAS_ELEMENT_IMPL_HPP #define INCLUDED_LIBGRAS_ELEMENT_IMPL_HPP #include #include #include #include #include #include #include #include #include namespace gras { struct ElementImpl { //deconstructor stuff ~ElementImpl(void); void top_block_cleanup(void); void hier_block_cleanup(void); void block_cleanup(void); //common element properties std::string name; long unique_id; std::string id; //top block stuff SharedThreadGroup thread_group; Token token; GlobalBlockConfig top_config; //element tree stuff Element parent; std::map children; //things may be in this element boost::shared_ptr topology; boost::shared_ptr executor; boost::shared_ptr block; ThreadPool thread_pool; Apology::Base *get_elem(void) const { if (block) return block.get(); return topology.get(); } //call this before sending a high prio message to all workers void pre_post_all_set_prio(void) { BOOST_FOREACH(Apology::Worker *worker, this->executor->get_workers()) { dynamic_cast(worker)->highPrioPreNotify(); } } }; } //namespace gras #endif /*INCLUDED_LIBGRAS_ELEMENT_IMPL_HPP*/