 |
Ginkgo
Generated from pipelines/2837190956 branch based on develop. Ginkgo version 2.0.0
A numerical linear algebra library targeting many-core architectures
|
5 #ifndef GKO_PUBLIC_CORE_BASE_INDEX_SET_HPP_
6 #define GKO_PUBLIC_CORE_BASE_INDEX_SET_HPP_
10 #include <initializer_list>
14 #include <ginkgo/core/base/array.hpp>
15 #include <ginkgo/core/base/exception_helpers.hpp>
16 #include <ginkgo/core/base/executor.hpp>
17 #include <ginkgo/core/base/types.hpp>
18 #include <ginkgo/core/base/utils.hpp>
54 template <
typename IndexType =
int32>
67 explicit index_set(std::shared_ptr<const Executor> exec) noexcept
68 : exec_(std::move(exec)),
70 num_stored_indices_{0},
71 subsets_begin_{array<index_type>(exec_)},
72 subsets_end_{array<index_type>(exec_)},
73 superset_cumulative_indices_{array<index_type>(exec_)}
85 explicit index_set(std::shared_ptr<const gko::Executor> exec,
86 std::initializer_list<IndexType> init_list,
87 const bool is_sorted =
false)
88 : exec_(std::move(exec)),
89 index_space_size_(init_list.size() > 0
90 ? *(std::max_element(std::begin(init_list),
91 std::end(init_list))) +
94 num_stored_indices_{static_cast<IndexType>(init_list.size())}
96 GKO_ASSERT(index_space_size_ > 0);
97 this->populate_subsets(
111 explicit index_set(std::shared_ptr<const gko::Executor> exec,
114 const bool is_sorted =
false)
115 : exec_(std::move(exec)), index_space_size_(size)
117 GKO_ASSERT(index_space_size_ >= indices.
get_size());
118 this->populate_subsets(indices, is_sorted);
150 *
this = std::move(other);
174 if (&other ==
this) {
177 this->index_space_size_ = other.index_space_size_;
178 this->num_stored_indices_ = other.num_stored_indices_;
179 this->subsets_begin_ = other.subsets_begin_;
180 this->subsets_end_ = other.subsets_end_;
181 this->superset_cumulative_indices_ = other.superset_cumulative_indices_;
198 if (&other ==
this) {
201 this->index_space_size_ = std::exchange(other.index_space_size_, 0);
202 this->num_stored_indices_ = std::exchange(other.num_stored_indices_, 0);
203 this->subsets_begin_ = std::move(other.subsets_begin_);
204 this->subsets_end_ = std::move(other.subsets_end_);
205 this->superset_cumulative_indices_ =
206 std::move(other.superset_cumulative_indices_);
220 this->index_space_size_ = 0;
221 this->num_stored_indices_ = 0;
222 this->subsets_begin_.
clear();
223 this->subsets_end_.
clear();
224 this->superset_cumulative_indices_.
clear();
232 std::shared_ptr<const Executor>
get_executor()
const {
return this->exec_; }
314 const bool is_sorted =
false)
const;
330 const bool is_sorted =
false)
const;
351 const bool is_sorted =
false)
const;
372 return this->subsets_begin_.
get_size();
409 const bool is_sorted);
411 std::shared_ptr<const Executor> exec_;
423 #endif // GKO_PUBLIC_CORE_BASE_INDEX_SET_HPP_
index_set(const index_set &other)
Creates a copy of the input index_set.
Definition: index_set.hpp:138
bool is_contiguous() const
Returns if the index set is contiguous.
Definition: index_set.hpp:246
index_set & operator=(index_set &&other)
Moves data from another index_set.
Definition: index_set.hpp:196
index_set(std::shared_ptr< const gko::Executor > exec, std::initializer_list< IndexType > init_list, const bool is_sorted=false)
Creates an index set on the specified executor from the initializer list.
Definition: index_set.hpp:85
IndexType index_type
The type of elements stored in the index set.
Definition: index_set.hpp:60
index_set(std::shared_ptr< const Executor > exec, index_set &&other)
Moves the input index_set to a different executor.
Definition: index_set.hpp:147
index_type get_local_index(index_type global_index) const
Return the local index given a global index.
array< bool > contains(const array< index_type > &global_indices, const bool is_sorted=false) const
Checks if the individual global indeices exist in the index set.
const index_type * get_subsets_end() const
Returns a pointer to the end indices of the subsets.
Definition: index_set.hpp:390
array< index_type > map_global_to_local(const array< index_type > &global_indices, const bool is_sorted=false) const
This is an array version of the scalar function above.
const index_type * get_subsets_begin() const
Returns a pointer to the beginning indices of the subsets.
Definition: index_set.hpp:380
index_set(index_set &&other)
Moves the input index_set.
Definition: index_set.hpp:158
const index_type * get_superset_indices() const
Returns a pointer to the cumulative indices of the superset of the subsets.
Definition: index_set.hpp:402
The Ginkgo namespace.
Definition: abstract_factory.hpp:19
index_set(std::shared_ptr< const gko::Executor > exec, const index_type size, const gko::array< index_type > &indices, const bool is_sorted=false)
Creates an index set on the specified executor and the given size.
Definition: index_set.hpp:111
index_type get_num_subsets() const
Returns the number of subsets stored in the index set.
Definition: index_set.hpp:370
index_set(std::shared_ptr< const Executor > exec, const index_set &other)
Creates a copy of the input index_set on a different executor.
Definition: index_set.hpp:127
An index set class represents an ordered set of intervals.
Definition: index_set.hpp:55
index_type get_num_elems() const
Return the actual number of indices stored in the index set.
Definition: index_set.hpp:253
array< index_type > map_local_to_global(const array< index_type > &local_indices, const bool is_sorted=false) const
This is an array version of the scalar function above.
void clear() noexcept
Deallocates all data used by the index_set.
Definition: index_set.hpp:218
array< index_type > to_global_indices() const
This function allows the user obtain a decompressed global_indices array from the indices stored in t...
index_set & operator=(const index_set &other)
Copies data from another index_set.
Definition: index_set.hpp:172
void clear() noexcept
Deallocates all data used by the array.
Definition: array.hpp:603
std::shared_ptr< const Executor > get_executor() const
Returns the executor of the index_set.
Definition: index_set.hpp:232
const value_type * get_const_data() const noexcept
Returns a constant pointer to the block of memory used to store the elements of the array.
Definition: array.hpp:695
size_type get_size() const noexcept
Returns the number of elements in the array.
Definition: array.hpp:669
index_type get_size() const
Returns the size of the index set space.
Definition: index_set.hpp:239
index_type get_global_index(index_type local_index) const
Return the global index given a local index.
index_set(std::shared_ptr< const Executor > exec) noexcept
Creates an empty index_set tied to the specified Executor.
Definition: index_set.hpp:67