Thrill  0.1
equal_to_dia.hpp
Go to the documentation of this file.
1 /*******************************************************************************
2  * thrill/api/equal_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_EQUAL_TO_DIA_HEADER
13 #define THRILL_API_EQUAL_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 EqualToDIANode final : public SourceNode<ValueType>
31 {
32 public:
34  using Super::context_;
35 
37  const std::vector<ValueType>& in_vector)
38  : Super(ctx, "EqualToDIA"),
39  in_vector_(in_vector)
40  { }
41 
43  std::vector<ValueType>&& in_vector)
44  : Super(ctx, "EqualToDIA"),
45  in_vector_(std::move(in_vector))
46  { }
47 
48  void PushData(bool /* consume */) final {
50 
51  for (size_t i = local.begin; i < local.end; ++i) {
52  this->PushItem(in_vector_[i]);
53  }
54  }
55 
56  void Dispose() final {
58  }
59 
60 private:
61  //! Vector pointer to read elements from.
62  std::vector<ValueType> in_vector_;
63 };
64 
65 /*!
66  * EqualToDIA is a Source-DOp, which takes a vector of data EQUAL on all
67  * workers, and returns the data in a DIA. Use Distribute to actually distribute
68  * data from a single worker, EqualToDIA is a wrapper if the data is already
69  * distributed.
70  *
71  * \image html dia_ops/EqualToDIA.svg
72  *
73  * \param ctx Reference to the Context object
74  *
75  * \param in_vector Vector to convert to a DIA, the contents is COPIED into the
76  * DIANode.
77  *
78  * \ingroup dia_sources
79  */
80 template <typename ValueType>
81 auto EqualToDIA(Context& ctx,
82  const std::vector<ValueType>& in_vector) {
83 
85 
86  return DIA<ValueType>(tlx::make_counting<EqualToDIANode>(ctx, in_vector));
87 }
88 
89 /*!
90  * EqualToDIA is an Source-DOp, which takes a vector of data EQUAL on all
91  * workers, and returns the data in a DIA. Use Distribute to actually distribute
92  * data from a single worker, EqualToDIA is a wrapper if the data is already
93  * distributed.
94  *
95  * \image html dia_ops/EqualToDIA.svg
96  *
97  * \param ctx Reference to the Context object
98  *
99  * \param in_vector Vector to convert to a DIA, the contents is MOVED into the
100  * DIANode.
101  *
102  * \ingroup dia_sources
103  */
104 template <typename ValueType>
105 auto EqualToDIA(Context& ctx,
106  std::vector<ValueType>&& in_vector) {
107 
109 
110  return DIA<ValueType>(
111  tlx::make_counting<EqualToDIANode>(ctx, std::move(in_vector)));
112 }
113 
114 } // namespace api
115 
116 //! imported from api namespace
117 using api::EqualToDIA;
118 
119 } // namespace thrill
120 
121 #endif // !THRILL_API_EQUAL_TO_DIA_HEADER
122 
123 /******************************************************************************/
void PushData(bool) final
Virtual method for pushing data. Triggers actual pushing in sub-classes.
DIA is the interface between the user and the Thrill framework.
Definition: dia.hpp:141
void PushItem(const ValueType &item) const
Method for derived classes to Push a single item to all children.
Definition: dia_node.hpp:147
std::vector< ValueType > in_vector_
Vector pointer to read elements from.
common::Range CalculateLocalRange(size_t global_size) const
Definition: context.hpp:339
auto EqualToDIA(Context &ctx, const std::vector< ValueType > &in_vector)
EqualToDIA is a Source-DOp, which takes a vector of data EQUAL on all workers, and returns the data i...
STL namespace.
EqualToDIANode(Context &ctx, const std::vector< ValueType > &in_vector)
represents a 1 dimensional range (interval) [begin,end)
Definition: math.hpp:41
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.
size_t end
end index
Definition: math.hpp:58
void vector_free(std::vector< Type > &v)
Definition: vector_free.hpp:21
EqualToDIANode(Context &ctx, std::vector< ValueType > &&in_vector)
size_t begin
begin index
Definition: math.hpp:56
Context & context_
associated Context
Definition: dia_base.hpp:293