20 #ifndef __TPIE_PIPELINING_REVERSE_H__
21 #define __TPIE_PIPELINING_REVERSE_H__
23 #include <tpie/pipelining/node.h>
24 #include <tpie/pipelining/pipe_base.h>
25 #include <tpie/pipelining/factory_helpers.h>
43 set_name(
"Store items", PRIORITY_SIGNIFICANT);
56 void push(
const item_type & t) {
65 std::shared_ptr<node> m_output;
80 set_name(
"Store items", PRIORITY_SIGNIFICANT);
86 m_stack = tpie_new<std::stack<item_type> >();
93 void push(
const item_type & t) {
97 std::stack<item_type> * m_stack;
98 std::shared_ptr<node> m_output;
104 template <
typename dest_t>
110 : dest(std::move(dest))
114 set_name(
"Output reversed", PRIORITY_INSIGNIFICANT);
121 m_stack_ptr = fetch<tpie::maybe<stack<item_type> > *>(
"stack");
122 m_stack = &**m_stack_ptr;
123 forward(
"items", m_stack->size());
128 while (!m_stack->
empty()) {
129 dest.push(m_stack->
pop());
135 m_stack_ptr->destruct();
146 template <
typename dest_t>
152 : dest(std::move(dest))
156 set_name(
"Output reversed", PRIORITY_INSIGNIFICANT);
162 m_stack = fetch<std::stack<item_type> *>(
"stack");
163 forward(
"items", m_stack->size());
168 while (!m_stack->empty()) {
169 dest.push(m_stack->pop());
179 std::stack<item_type> * m_stack;
185 template <
typename T>
192 set_name(
"Input items to reverse", PRIORITY_INSIGNIFICANT);
198 m_stack_ptr = fetch<tpie::maybe<stack<item_type> > *>(
"stack");
199 m_stack = &**m_stack_ptr;
200 forward(
"items", m_stack->size());
207 return !m_stack->
empty();
214 return m_stack->
pop();
218 m_stack_ptr->destruct();
228 template <
typename T>
235 set_name(
"Input items to reverse", PRIORITY_INSIGNIFICANT);
241 m_stack = fetch<std::stack<item_type> *>(
"stack");
242 forward(
"items", m_stack->size());
249 return !m_stack->empty();
256 T r = m_stack->top();
265 std::stack<item_type> * m_stack;
274 template <
typename T>
321 template <
typename T>
377 #endif // __TPIE_PIPELINING_REVERSE_H__
bool empty() const
Returns whether the stack is empty or not.
pipelining/factory_base.h Base class of pipelining factories
const T & pop()
Pops one item from the stack.
bool can_pull() const
Whether an item can be pulled from the node.
T pull()
Pulls an item from the node.
inputpipe_t input()
Returns a termfactory for the input nodes.
bool can_pull() const
Whether an item can be pulled from the node.
pipe_middle< split_factory< bits::reverser_input_t, node, bits::reverser_output_t > > reverser
Constructs a reverser node stored in external memory.
A passive reverser stored in external memory.
void go() override
For initiator nodes, execute this phase by pushing all items to be pushed.
static memory_size_type memory_usage(float blockFactor=1.0)
Compute the memory used by a stack.
outputpipe_t output()
Returns a termfactory for the output nodes.
void propagate() override
Propagate stream metadata.
Output node for passive reverser stored in internal memory.
void set_minimum_memory(memory_size_type minimumMemory)
Called by implementers to declare minimum memory requirements.
An implementation of an external-memory stack.
Class to deduce the item_type of a node of type T.
void set_plot_options(flags< PLOT > options)
Set options specified for plot(), as a combination of node::PLOT values.
void go() override
For initiator nodes, execute this phase by pushing all items to be pushed.
void forward(std::string key, T value, memory_size_type k=std::numeric_limits< memory_size_type >::max())
Called by implementers to forward auxiliary data to successors.
void add_push_destination(const node_token &dest)
Called by implementers to declare a push destination.
void propagate() override
Propagate stream metadata.
Output node for passive reverser stored in external memory.
void end() override
End pipeline processing phase.
Output node for reverser stored in internal memory.
void set_name(const std::string &name, priority_type priority=PRIORITY_USER)
Set this node's name.
A passive reverser stored in internal memory.
inputpipe_t input()
Returns a termfactory for the input nodes.
void end() override
End pipeline processing phase.
void set_minimum_resource_usage(resource_type type, memory_size_type usage)
Called by implementers to declare minimum resource requirements.
Output node for reverser stored in external memory.
void step(stream_size_type steps=1)
Step the progress indicator.
void set_steps(stream_size_type steps)
Called by implementers that intend to call step().
void tpie_delete(T *p)
Delete an object allocated with tpie_new.
void add_dependency(const node_token &dest)
Called by implementers to declare a node dependency, that is, a requirement that another node has end...
outputpipe_t output()
Returns a termfactory for the output nodes.
void propagate() override
Propagate stream metadata.
T pull()
Pull an item from the node.
pipe_middle< split_factory< bits::internal_reverser_input_t, node, bits::internal_reverser_output_t > > internal_reverser
Constructs a reverser node stored in internal memory.
pipe_end< termfactory< bits::output_t< T >, file_stream< T > & > > output(file_stream< T > &fs)
A pipelining node that writes the pushed items to a file stream.
node()
Default constructor, using a new node_token.
void propagate() override
Propagate stream metadata.
void end() override
End pipeline processing phase.
void end() override
End pipeline processing phase.