TPIE

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

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

#include <tpie/pipelining/virtual.h>

Public Member Functions

 virtual_chunk ()
 Constructor that leaves the virtual chunk unassigned. More...
 
template<typename fact_t >
 virtual_chunk (pipe_middle< fact_t > &&pipe, virtual_container *ctr=nullptr)
 Constructor that recursively constructs a node and takes ownership of it. More...
 
 virtual_chunk (const virtual_chunk_end< Input > &left, const virtual_chunk_begin< Output > &right)
 Construct a virtual chunk from an end and a begin chunk. More...
 
template<typename fact_t >
virtual_chunkoperator= (pipe_middle< fact_t > &&pipe)
 Construct a node and assign it to this virtual chunk. More...
 
template<typename NextOutput >
virtual_chunk< Input, NextOutput > operator| (virtual_chunk< Output, NextOutput > dest)
 Connect this virtual chunk to another chunk. More...
 
virtual_chunk_end< Input > operator| (virtual_chunk_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< Input, Output >

Virtual chunk that has input and output.

Definition at line 52 of file virtual.h.

Constructor & Destructor Documentation

◆ virtual_chunk() [1/3]

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

Constructor that leaves the virtual chunk unassigned.

Definition at line 517 of file virtual.h.

518  : m_input(nullptr)
519  , m_output(nullptr)
520  {}

◆ virtual_chunk() [2/3]

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

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

Definition at line 527 of file virtual.h.

527  {
528  *this = std::forward<pipe_middle<fact_t>>(pipe);
529  set_container(ctr);
530  }

◆ virtual_chunk() [3/3]

template<typename Input , typename Output = Input>
tpie::pipelining::virtual_chunk< Input, Output >::virtual_chunk ( const virtual_chunk_end< Input > &  left,
const virtual_chunk_begin< Output > &  right 
)
inline

Construct a virtual chunk 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 539 of file virtual.h.

541  : virtual_chunk_base(left.get_node_map(), bits::virt_node::combine(left.get_node(), right.get_node()))
542  {
543  m_input = acc::get_input(left);
544  m_output = acc::get_output(right);
545  }

Member Function Documentation

◆ operator bool()

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

Test if it is not an empty chunk.

Definition at line 601 of file virtual.h.

601  {
602  return m_input != nullptr;
603  }

◆ operator=()

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

Construct a node and assign it to this virtual chunk.

Definition at line 552 of file virtual.h.

552  {
553  if (this->m_node) {
554  log_error() << "Virtual chunk assigned twice" << std::endl;
555  throw tpie::exception("Virtual chunk assigned twice");
556  }
557  typedef typename fact_t::template constructed_type<output_type> constructed_type;
558  output_type temp(m_output);
559  this->m_nodeMap = temp.get_node_map();
560  fact_t f = std::move(pipe.factory);
561  f.set_destination_kind_push();
562  m_input = new bits::virtsrc_impl<constructed_type, Input>(f.construct(std::move(temp)));
563  this->m_node = bits::virt_node::take_own(m_input);
564 
565  return *this;
566  }

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<Input, NextOutput> tpie::pipelining::virtual_chunk< Input, Output >::operator| ( virtual_chunk< Output, NextOutput >  dest)
inline

Connect this virtual chunk to another chunk.

Definition at line 572 of file virtual.h.

572  {
573  if (empty()) {
574  return *bits::assert_types_equal_and_return<Input, Output, virtual_chunk<Input, NextOutput> *>
575  ::go(&dest);
576  }
577  bits::virtsrc<Output> * dst=acc::get_input(dest);
578  if (dest.empty() || !dst) {
579  return *bits::assert_types_equal_and_return<Output, NextOutput, virtual_chunk<Input, NextOutput> *>
580  ::go(this);
581  }
582  m_output->set_destination(dst);
583  return acc::construct<virtual_chunk<Input, NextOutput>>(*this, dest);
584  }

◆ operator|() [2/2]

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

Connect this virtual chunk to another chunk.

Definition at line 589 of file virtual.h.

589  {
590  if (empty()) {
591  return *bits::assert_types_equal_and_return<Input, Output, virtual_chunk_end<Input> *>
592  ::go(&dest);
593  }
594  m_output->set_destination(acc::get_input(dest));
595  return acc::construct<virtual_chunk_end<Input>>(*this, dest);
596  }

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