Thrill  0.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
concat_to_dia.hpp
Go to the documentation of this file.
1 /*******************************************************************************
2  * thrill/api/concat_to_dia.hpp
3  *
4  * Part of Project Thrill - http://project-thrill.org
5  *
6  * Copyright (C) 2015 Timo Bingmann <[email protected]>
7  *
8  * All rights reserved. Published under the BSD-2 license in the LICENSE file.
9  ******************************************************************************/
10 
11 #pragma once
12 #ifndef THRILL_API_CONCAT_TO_DIA_HEADER
13 #define THRILL_API_CONCAT_TO_DIA_HEADER
14 
15 #include <thrill/api/dia.hpp>
17 #include <thrill/common/logger.hpp>
18 
19 #include <tlx/vector_free.hpp>
20 
21 #include <vector>
22 
23 namespace thrill {
24 namespace api {
25 
26 /*!
27  * \ingroup api_layer
28  */
29 template <typename ValueType>
30 class ConcatToDIANode final : public SourceNode<ValueType>
31 {
32 public:
34  using Super::context_;
35 
37  const std::vector<ValueType>& in_vector)
38  : Super(ctx, "ConcatToDIA"),
39  in_vector_(in_vector)
40  { }
41 
43  std::vector<ValueType>&& in_vector)
44  : Super(ctx, "ConcatToDIA"),
45  in_vector_(std::move(in_vector))
46  { }
47 
48  void PushData(bool /* consume */) final {
49  for (size_t i = 0; i < in_vector_.size(); ++i) {
50  this->PushItem(in_vector_[i]);
51  }
52  }
53 
54  void Dispose() final {
56  }
57 
58 private:
59  //! Vector pointer to read elements from.
60  std::vector<ValueType> in_vector_;
61 };
62 
63 /*!
64  * ConcatToDIA is a Source-DOp, which takes a vector of data on all workers, and
65  * CONCATENATES them into a DIA. Use Distribute to actually distribute data from
66  * a single worker, ConcatToDIA is a wrapper if the data is already distributed.
67  *
68  * \param ctx Reference to the Context object
69  *
70  * \param in_vector Vector to concatenate into a DIA, the contents is COPIED
71  * into the DIANode.
72  *
73  * \ingroup dia_sources
74  */
75 template <typename ValueType>
76 auto ConcatToDIA(Context& ctx,
77  const std::vector<ValueType>& in_vector) {
78 
80 
81  return DIA<ValueType>(tlx::make_counting<ConcatToDIANode>(ctx, in_vector));
82 }
83 
84 /*!
85  * ConcatToDIA is a Source-DOp, which takes a vector of data on all workers, and
86  * CONCATENATES them into a DIA. Use Distribute to actually distribute data from
87  * a single worker, ConcatToDIA is a wrapper if the data is already distributed.
88  *
89  * \param ctx Reference to the Context object
90  *
91  * \param in_vector Vector to concatenate into a DIA, the contents is MOVED into
92  * the DIANode.
93  */
94 template <typename ValueType>
95 auto ConcatToDIA(Context& ctx,
96  std::vector<ValueType>&& in_vector) {
97 
99 
100  return DIA<ValueType>(
101  tlx::make_counting<ConcatToDIANode>(ctx, std::move(in_vector)));
102 }
103 
104 } // namespace api
105 
106 //! imported from api namespace
107 using api::ConcatToDIA;
108 
109 } // namespace thrill
110 
111 #endif // !THRILL_API_CONCAT_TO_DIA_HEADER
112 
113 /******************************************************************************/
DIA is the interface between the user and the Thrill framework.
Definition: dia.hpp:141
ConcatToDIANode(Context &ctx, const std::vector< ValueType > &in_vector)
auto ConcatToDIA(Context &ctx, const std::vector< ValueType > &in_vector)
ConcatToDIA is a Source-DOp, which takes a vector of data on all workers, and CONCATENATES them into ...
The Context of a job is a unique instance per worker which holds references to all underlying parts o...
Definition: context.hpp:221
void Dispose() final
Virtual clear method. Triggers actual disposing in sub-classes.
void PushData(bool) final
Virtual method for pushing data. Triggers actual pushing in sub-classes.
void PushItem(const ValueType &item) const
Method for derived classes to Push a single item to all children.
Definition: dia_node.hpp:147
void vector_free(std::vector< Type > &v)
Definition: vector_free.hpp:21
std::vector< ValueType > in_vector_
Vector pointer to read elements from.
ConcatToDIANode(Context &ctx, std::vector< ValueType > &&in_vector)
Context & context_
associated Context
Definition: dia_base.hpp:293