52 #ifndef HAVOQGT_MPI_VISITOR_QUEUE_HPP_INCLUDED
53 #define HAVOQGT_MPI_VISITOR_QUEUE_HPP_INCLUDED
62 namespace havoqgt {
namespace mpi {
67 template <
typename TVisitor,
template<
typename T>
class Queue,
typename TGraph>
116 :
public std::iterator<std::output_iterator_tag, void, void, void, void> {
126 bool ret = __value.
m_visitor.pre_visit();
161 visitor_type this_visitor =
pop_top();
162 vertex_locator v = this_visitor.vertex;
181 vertex_locator v = this_visitor.vertex;
193 typename TGraph::controller_iterator citr =
m_ptr_graph->controller_begin();
194 for(; citr !=
m_ptr_graph->controller_end(); ++citr) {
195 visitor_type v(*citr);
201 typename TGraph::vertex_iterator vitr =
m_ptr_graph->vertices_begin();
202 for(; vitr !=
m_ptr_graph->vertices_end(); ++vitr) {
203 visitor_type v(*vitr);
214 visitor_type this_visitor =
pop_top();
224 if(v.vertex.is_delegate()) {
260 uint32_t master_rank =
m_ptr_graph->master(v.vertex);
355 void push(
const visitor_type& v) {
366 visitor_type to_return;
445 #endif //HAVOQGT_MPI_VISITOR_QUEUE_HPP_INCLUDED
void set_bcast(uint32_t bcast)
void inc_queued(size_t _i=1)
termination_detection< uint64_t > termination_detection_type
void receive(OutputIterator _oitr, bool aggregsive=false)
std::queue< TVisitor > m_local_controller_queue
void inc_completed(size_t _i=1)
visitor_queue_inserter & operator++()
Simply returns *this. (This iterator does not "move".)
void set_dest(uint32_t dest)
TGraph::vertex_locator vertex_locator
Queue< visitor_type > local_queue_type
void queue_visitor(const visitor_type &v)
mailbox_routed< visitor_wrapper > mailbox_type
void local_delegate_visit(const visitor_type &v)
void process_pending_controllers()
void flush_buffers_if_idle()
void do_visit(visitor_type &this_visitor)
void bcast(TMsg _raw_msg, OutputIterator _oitr)
bool is_intercept() const
void set_intercept(bool intercept)
uint32_t get_bcast() const
visitor_queue(TGraph *_graph)
visitor_queue_inserter & operator=(const visitor_wrapper &__value)
local_queue_type m_localqueue_delegates
void handle_mailbox_receive(visitor_wrapper vw)
visitor_queue_inserter & operator*()
Simply returns *this.
visitor_queue_inserter(visitor_queue *_vq)
bool intercept(const visitor_wrapper &__value)
void send(int raw_dest, const TMsg &_raw_msg, OutputIterator _oitr, bool fast=true)
void init_visitor_traversal(vertex_locator _source_v)
bool test_for_termination()
termination_detection_type m_termination_detection
visitor_queue_inserter operator++(int)
Simply returns *this. (This iterator does not "move".)
local_queue_type m_localqueue_owned
void push(const visitor_type &v)
void init_visitor_traversal()