Thrill  0.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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  * \param ctx Reference to the Context object
72  *
73  * \param in_vector Vector to convert to a DIA, the contents is COPIED into the
74  * DIANode.
75  *
76  * \ingroup dia_sources
77  */
78 template <typename ValueType>
79 auto EqualToDIA(Context& ctx,
80  const std::vector<ValueType>& in_vector) {
81 
83 
84  return DIA<ValueType>(tlx::make_counting<EqualToDIANode>(ctx, in_vector));
85 }
86 
87 /*!
88  * EqualToDIA is an Source-DOp, which takes a vector of data EQUAL on all
89  * workers, and returns the data in a DIA. Use Distribute to actually distribute
90  * data from a single worker, EqualToDIA is a wrapper if the data is already
91  * distributed.
92  *
93  * \param ctx Reference to the Context object
94  *
95  * \param in_vector Vector to convert to a DIA, the contents is MOVED into the
96  * DIANode.
97  *
98  * \ingroup dia_sources
99  */
100 template <typename ValueType>
101 auto EqualToDIA(Context& ctx,
102  std::vector<ValueType>&& in_vector) {
103 
105 
106  return DIA<ValueType>(
107  tlx::make_counting<EqualToDIANode>(ctx, std::move(in_vector)));
108 }
109 
110 } // namespace api
111 
112 //! imported from api namespace
113 using api::EqualToDIA;
114 
115 } // namespace thrill
116 
117 #endif // !THRILL_API_EQUAL_TO_DIA_HEADER
118 
119 /******************************************************************************/
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
std::vector< ValueType > in_vector_
Vector pointer to read elements from.
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...
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.
void PushItem(const ValueType &item) const
Method for derived classes to Push a single item to all children.
Definition: dia_node.hpp:147
size_t end
end index
Definition: math.hpp:58
common::Range CalculateLocalRange(size_t global_size) const
Definition: context.hpp:339
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