TPIE

11a2c2d
tpie::pipelining::virtual_chunk_pull< Input, Output > Class Template Reference

Virtual chunk that has input and output. More...

#include <tpie/pipelining/virtual.h>

Public Member Functions

 virtual_chunk_pull ()
 Constructor that leaves the virtual chunk unassigned. More...
 
template<typename fact_t >
 virtual_chunk_pull (pullpipe_middle< fact_t > &&pipe, virtual_container *ctr=nullptr)
 Constructor that recursively constructs a node and takes ownership of it. More...
 
 virtual_chunk_pull (const virtual_chunk_pull_end< Input > &left, const virtual_chunk_pull_begin< Output > &right)
 Construct a virtual chunk pull from an end and a begin chunk. More...
 
template<typename fact_t >
virtual_chunk_pulloperator= (pullpipe_middle< fact_t > &&pipe)
 Construct a node and assign it to this virtual chunk. More...
 
template<typename NextOutput >
virtual_chunk_pull< Input, NextOutput > operator| (virtual_chunk_pull< Output, NextOutput > dest)
 Connect this virtual chunk to another chunk. More...
 
virtual_chunk_pull_end< Input > operator| (virtual_chunk_pull_end< Output > dest)
 Connect this virtual chunk to another chunk. More...
 
 operator bool () const noexcept
 Test if it is not an empty chunk. More...
 

Friends

class bits::access
 

Detailed Description

template<typename Input, typename Output = Input>
class tpie::pipelining::virtual_chunk_pull< Input, Output >

Virtual chunk that has input and output.

Definition at line 64 of file virtual.h.

Constructor & Destructor Documentation

◆ virtual_chunk_pull() [1/3]

template<typename Input , typename Output = Input>
tpie::pipelining::virtual_chunk_pull< Input, Output >::virtual_chunk_pull ( )
inline

Constructor that leaves the virtual chunk unassigned.

Definition at line 806 of file virtual.h.

807  : m_input(nullptr)
808  , m_output(nullptr)
809  {}

◆ virtual_chunk_pull() [2/3]

template<typename Input , typename Output = Input>
template<typename fact_t >
tpie::pipelining::virtual_chunk_pull< Input, Output >::virtual_chunk_pull ( pullpipe_middle< fact_t > &&  pipe,
virtual_container ctr = nullptr 
)
inline

Constructor that recursively constructs a node and takes ownership of it.

Definition at line 816 of file virtual.h.

816  {
817  *this = std::forward<pullpipe_middle<fact_t>>(pipe);
818  set_container(ctr);
819  }

◆ virtual_chunk_pull() [3/3]

template<typename Input , typename Output = Input>
tpie::pipelining::virtual_chunk_pull< Input, Output >::virtual_chunk_pull ( const virtual_chunk_pull_end< Input > &  left,
const virtual_chunk_pull_begin< Output > &  right 
)
inline

Construct a virtual chunk pull from an end and a begin chunk.

Items pushed into the virtual chunk are pushed into the left end chunk Items push out of the right begin chenk are pushed out of the virtual chunk

Definition at line 827 of file virtual.h.

829  : virtual_chunk_base(left.get_node_map(), bits::virt_node::combine(left.get_node(), right.get_node())) {
830  m_input = acc::get_input(left);
831  m_output = acc::get_output(right);
832  }

Member Function Documentation

◆ operator bool()

template<typename Input , typename Output = Input>
tpie::pipelining::virtual_chunk_pull< Input, Output >::operator bool ( ) const
inlineexplicitnoexcept

Test if it is not an empty chunk.

Definition at line 885 of file virtual.h.

885  {
886  return m_input != nullptr;
887  }

◆ operator=()

template<typename Input , typename Output = Input>
template<typename fact_t >
virtual_chunk_pull& tpie::pipelining::virtual_chunk_pull< Input, Output >::operator= ( pullpipe_middle< fact_t > &&  pipe)
inline

Construct a node and assign it to this virtual chunk.

Definition at line 838 of file virtual.h.

838  {
839  if (this->m_node) {
840  log_error() << "Virtual chunk assigned twice" << std::endl;
841  throw tpie::exception("Virtual chunk assigned twice");
842  }
843  typedef typename fact_t::template constructed_type<input_type> constructed_type;
844  input_type temp(m_input);
845  this->m_nodeMap = temp.get_node_map();
846  fact_t f = std::move(pipe.factory);
847  f.set_destination_kind_push();
848  m_output = new bits::virtpullsrc_impl<constructed_type, Output>(f.construct(std::move(temp)));
849  this->m_node = bits::virt_node::take_own(m_output);
850  return *this;
851  }

References tpie::pipelining::node::get_node_map(), tpie::log_error(), and tpie::pipelining::bits::virt_node::take_own().

◆ operator|() [1/2]

template<typename Input , typename Output = Input>
template<typename NextOutput >
virtual_chunk_pull<Input, NextOutput> tpie::pipelining::virtual_chunk_pull< Input, Output >::operator| ( virtual_chunk_pull< Output, NextOutput >  dest)
inline

Connect this virtual chunk to another chunk.

Definition at line 857 of file virtual.h.

857  {
858  if (empty()) {
859  return *bits::assert_types_equal_and_return<Input, Output, virtual_chunk_pull<Input, NextOutput> *>
860  ::go(&dest);
861  }
862  if (dest.empty()) {
863  return *bits::assert_types_equal_and_return<Output, NextOutput, virtual_chunk_pull<Input, NextOutput> *>
864  ::go(this);
865  }
866  acc::get_input(dest)->set_source(get_output());
867  return acc::construct<virtual_chunk_pull<Input, NextOutput>>(*this, dest);
868  }

◆ operator|() [2/2]

template<typename Input , typename Output = Input>
virtual_chunk_pull_end<Input> tpie::pipelining::virtual_chunk_pull< Input, Output >::operator| ( virtual_chunk_pull_end< Output >  dest)
inline

Connect this virtual chunk to another chunk.

Definition at line 873 of file virtual.h.

873  {
874  if (empty()) {
875  return *bits::assert_types_equal_and_return<Input, Output, virtual_chunk_pull_end<Input> *>
876  ::go(&dest);
877  }
878  acc::get_input(dest)->set_source(get_output());
879  return acc::construct<virtual_chunk_pull_end<Input>>(*this, dest);
880  }

The documentation for this class was generated from the following file:
tpie::pipelining::bits::virt_node::take_own
static ptr take_own(node *pipe)
Take std::new-ownership of given node.
Definition: virtual.h:309
tpie::log_error
logstream & log_error()
Return logstream for writing error log messages.
Definition: tpie_log.h:148
tpie::exception
Definition: exception.h:33
tpie::pipelining::bits::virt_node::combine
static ptr combine(ptr left, ptr right)
Aggregate ownership of virt_nodes.
Definition: virtual.h:319