20 #ifndef __TPIE_PIPELINING_MAP_H__
21 #define __TPIE_PIPELINING_MAP_H__
23 #include <tpie/pipelining/node.h>
24 #include <tpie/pipelining/pipe_base.h>
25 #include <tpie/pipelining/factory_helpers.h>
26 #include <tpie/pipelining/node_name.h>
27 #include <type_traits>
30 namespace pipelining {
36 template <
typename C,
typename R,
typename A>
38 typedef A argument_type;
39 typedef R return_type;
42 template <
typename C,
typename R,
typename A>
44 typedef A argument_type;
45 typedef R return_type;
48 template <
typename R,
typename A>
50 typedef A argument_type;
51 typedef R return_type;
60 template <
typename dest_t>
66 typedef typename std::decay<typename unary_traits<F>::argument_type>
::type item_type;
68 type(dest_t dest,
const F & functor):
69 functor(functor), dest(std::move(dest)) {
70 set_name(bits::extract_pipe_name(
typeid(F).name()), PRIORITY_NO_NAME);
73 void push(
const item_type & item) {
74 dest.push(functor(item));
82 template <
typename dest_t>
88 type(dest_t dest,
const F & functor):
89 functor(functor), dest(std::move(dest)) {
90 set_name(bits::extract_pipe_name(
typeid(F).name()), PRIORITY_NO_NAME);
94 void push(
const T & item) {
95 dest.push(functor(item));
101 template <
typename F>
106 typedef typename std::decay<typename unary_traits<F>::argument_type>::type item_type;
110 set_name(bits::extract_pipe_name(
typeid(F).name()), PRIORITY_NO_NAME);
113 void push(
const item_type & item) {
118 template <
typename T>
127 template <
typename C>
128 static yes& test(decltype(&C::operator()) *);
131 static no& test(...);
132 static const bool value =
sizeof(test<T>(
nullptr)) ==
sizeof(yes);
142 template <typename F, typename = typename std::enable_if<bits::has_argument_type<F>::value>::type>
147 template <typename F, typename = typename std::enable_if<!bits::has_argument_type<F>::value>::type>
148 pipe_middle<tempfactory<bits::map_temp_t<F>, F> >
map(
const F & functor) {
149 return tempfactory<bits::map_temp_t<F>, F >(functor);
152 template <
typename F>
153 pipe_end<termfactory<bits::map_sink_t<F>, F> > map_sink(
const F & functor) {
154 return termfactory<bits::map_sink_t<F>, F >(functor);
160 #endif //__TPIE_PIPELINING_MAP_H__
pipe_middle< tempfactory< bits::map_t< F >, F > > map(const F &functor)
Pipelining nodes that applies to given functor to items in the stream.
Node factory for variadic argument templated generators.
void set_name(const std::string &name, priority_type priority=PRIORITY_USER)
Set this node's name.
A pipe_middle class pushes input down the pipeline.