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>
31 namespace pipelining {
46 set_name(
"Store items", PRIORITY_SIGNIFICANT);
59 void push(
const item_type & t) {
68 std::shared_ptr<node> m_output;
83 set_name(
"Store items", PRIORITY_SIGNIFICANT);
89 m_stack = tpie_new<std::stack<item_type> >();
96 void push(
const item_type & t) {
100 std::stack<item_type> * m_stack;
101 std::shared_ptr<node> m_output;
107 template <
typename dest_t>
113 : dest(std::move(dest))
117 set_name(
"Output reversed", PRIORITY_INSIGNIFICANT);
124 m_stack_ptr = fetch<tpie::maybe<stack<item_type> > *>(
"stack");
125 m_stack = &**m_stack_ptr;
126 forward(
"items", m_stack->size());
131 while (!m_stack->
empty()) {
132 dest.push(m_stack->
pop());
138 m_stack_ptr->destruct();
149 template <
typename dest_t>
155 : dest(std::move(dest))
159 set_name(
"Output reversed", PRIORITY_INSIGNIFICANT);
165 m_stack = fetch<std::stack<item_type> *>(
"stack");
166 forward(
"items", m_stack->size());
170 virtual void go()
override {
171 while (!m_stack->empty()) {
172 dest.push(m_stack->pop());
177 virtual void end()
override {
182 std::stack<item_type> * m_stack;
188 template <
typename T>
195 set_name(
"Input items to reverse", PRIORITY_INSIGNIFICANT);
201 m_stack_ptr = fetch<tpie::maybe<stack<item_type> > *>(
"stack");
202 m_stack = &**m_stack_ptr;
203 forward(
"items", m_stack->size());
210 return !m_stack->
empty();
217 return m_stack->
pop();
221 m_stack_ptr->destruct();
231 template <
typename T>
238 set_name(
"Input items to reverse", PRIORITY_INSIGNIFICANT);
244 m_stack = fetch<std::stack<item_type> *>(
"stack");
245 forward(
"items", m_stack->size());
252 return !m_stack->empty();
259 T r = m_stack->top();
264 virtual void end()
override {
268 std::stack<item_type> * m_stack;
277 template <
typename T>
324 template <
typename T>
382 #endif // __TPIE_PIPELINING_REVERSE_H__
virtual void go() override
For initiator nodes, execute this phase by pushing all items to be pushed.
Output node for reverser stored in internal memory.
bool can_pull() const
Whether an item can be pulled from the node.
virtual void end() override
End pipeline processing phase.
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.
Output node for reverser stored in external memory.
A passive reverser stored in external memory.
outputpipe_t output()
Returns a termfactory for the output nodes.
const T & pop()
Pops one item from the stack.
pipe_middle< split_factory< bits::reverser_input_t, node, bits::reverser_output_t > > reverser
Constructs a reverser node stored in external memory.
An implementation of an external-memory stack.
void end() override
End pipeline processing phase.
void go() override
For initiator nodes, execute this phase by pushing all items to be pushed.
T pull()
Pulls an item from the node.
inputpipe_t input()
Returns a termfactory for the input nodes.
void propagate() override
Propagate stream metadata.
void add_push_destination(const node_token &dest)
Called by implementers to declare a push destination.
Class to deduce the item_type of a node of type T.
virtual void propagate() override
Propagate stream metadata.
virtual void propagate() override
Propagate stream metadata.
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 set_name(const std::string &name, priority_type priority=PRIORITY_USER)
Set this node's name.
void set_minimum_resource_usage(resource_type type, memory_size_type usage)
Called by implementers to declare minimum resource requirements.
void set_minimum_memory(memory_size_type minimumMemory)
Called by implementers to declare minimum memory requirements.
Node factory for variadic argument terminators.
void set_plot_options(flags< PLOT > options)
Set options specified for plot(), as a combination of node::PLOT values.
void add_dependency(const node_token &dest)
Called by implementers to declare a node dependency, that is, a requirement that another node has end...
void propagate() override
Propagate stream metadata.
void end() override
End pipeline processing phase.
void step(stream_size_type steps=1)
Step the progress indicator.
A passive reverser stored in internal memory.
bool empty() const
Returns whether the stack is empty or not.
Output node for passive reverser stored in external memory.
A pipe_middle class pushes input down the pipeline.
Output node for passive reverser stored in internal memory.
static memory_size_type memory_usage(float blockFactor=1.0)
Compute the memory used by a stack.
void tpie_delete(T *p)
Delete an object allocated with tpie_new.
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.
T pull()
Pull an item from the node.
void set_steps(stream_size_type steps)
Called by implementers that intend to call step().
outputpipe_t output()
Returns a termfactory for the output nodes.
node()
Default constructor, using a new node_token.
inputpipe_t input()
Returns a termfactory for the input nodes.
bool can_pull() const
Whether an item can be pulled from the node.
virtual void end() override
End pipeline processing phase.