20 #ifndef __TPIE_PIPELINING_FACTORY_HELPERS_H__
21 #define __TPIE_PIPELINING_FACTORY_HELPERS_H__
23 #include <tpie/pipelining/container.h>
24 #include <tpie/pipelining/factory_base.h>
25 #include <tpie/pipelining/node.h>
28 namespace pipelining {
34 template <
template <
typename dest_t>
class R,
typename... T>
42 template <
typename...
Args>
43 factory(
Args && ... v) : cont(std::forward<Args>(v)...) {}
45 template <
typename dest_t>
46 using constructed_type = R<typename bits::remove<dest_t>::type>;
48 template <
typename dest_t>
49 constructed_type<dest_t> construct(dest_t && dest) {
51 constructed_type<dest_t> r = container_construct<constructed_type<dest_t>>(cont, std::forward<dest_t>(dest));
54 this->add_node_set_edges(r);
58 template <
typename dest_t>
59 constructed_type<dest_t> construct_copy(dest_t && dest) {
61 constructed_type<dest_t> r = container_construct_copy<constructed_type<dest_t>>(cont, std::forward<dest_t>(dest));
64 this->add_node_set_edges(r);
77 template <
typename R,
typename... T>
80 typedef R constructed_type;
87 template<
typename...
Args>
91 R r = container_construct<R>(cont);
93 this->add_node_set_edges(r);
98 R r = container_construct_copy<R>(cont);
100 this->add_node_set_edges(r);
108 template <
typename ...>
115 template <
template <
typename dest_t,
typename ... X>
class R, typename
Args, typename... T>
118 template <
template <
typename dest_t,
typename ... X>
class R,
119 typename ...TT, typename... T>
127 template<
typename...
Args>
128 tfactory(
Args && ... v) : cont(std::forward<Args>(v)...) {}
130 template<
typename dest_t>
131 using constructed_type = R<typename bits::remove<dest_t>::type, TT...>;
133 template <
typename dest_t>
134 constructed_type<dest_t> construct(dest_t && dest) {
136 constructed_type<dest_t> r = container_construct<constructed_type<dest_t>>(cont, std::forward<dest_t>(dest));
138 this->add_default_edge(r, tok);
139 this->add_node_set_edges(r);
143 template <
typename dest_t>
144 constructed_type<dest_t> construct_copy(dest_t && dest) {
146 constructed_type<dest_t> r = container_construct_copy<constructed_type<dest_t>>(cont, std::forward<dest_t>(dest));
148 this->add_default_edge(r, tok);
149 this->add_node_set_edges(r);
165 template <
template <
typename item_type>
class I,
typename OB,
template<
typename dest_t>
class O>
168 template <
typename dest_t>
169 using constructed_type = I<typename push_type<dest_t>::type>;
171 template <
typename dest_t>
172 constructed_type<dest_t> construct(dest_t && dest)
const {
175 std::shared_ptr<OB> o = std::make_shared<O<dest_t> >(std::forward<dest_t>(dest), input_token);
176 return I<item_type>(input_token, std::move(o));
179 template <
typename dest_t>
180 constructed_type<dest_t> construct_copy(dest_t && dest)
const {
181 return construct(std::forward<dest_t>(dest));
188 #endif // __TPIE_PIPELINING_FACTORY_HELPERS_H__