Loading...
Searching...
No Matches
chain_column_extra_properties.h
Go to the documentation of this file.
1/* This file is part of the Gudhi Library - https://gudhi.inria.fr/ - which is released under MIT.
2 * See file LICENSE or go to https://gudhi.inria.fr/licensing/ for full license details.
3 * Author(s): Hannah Schreiber
4 *
5 * Copyright (C) 2022 Inria
6 *
7 * Modification(s):
8 * - YYYY/MM Author: Description of the modification
9 */
10
17
18#ifndef PM_CHAIN_COLUMN_PROP_H
19#define PM_CHAIN_COLUMN_PROP_H
20
21#include <utility> //std::swap
22
23namespace Gudhi {
24namespace persistence_matrix {
25
33struct Dummy_chain_properties {
34 Dummy_chain_properties([[maybe_unused]] int pivot = 0, [[maybe_unused]] int pair = 0) {}
35
36 friend void swap([[maybe_unused]] Dummy_chain_properties& col1,
37 [[maybe_unused]] Dummy_chain_properties& col2) noexcept
38 {}
39};
40
56template <class Master_matrix>
58{
59 public:
60 using Index = typename Master_matrix::Index;
61 using ID_index = typename Master_matrix::ID_index;
62
68 : pivot_(Master_matrix::template get_null_value<ID_index>()),
69 pairedColumn_(Master_matrix::template get_null_value<Index>())
70 {}
71
80 : pivot_(pivot), pairedColumn_(Master_matrix::template get_null_value<Index>())
81 {}
82
90 Chain_column_extra_properties(ID_index pivot, Index pair) : pivot_(pivot), pairedColumn_(pair) {}
91
98
105 : pivot_(std::exchange(col.pivot_, Master_matrix::template get_null_value<ID_index>())),
106 pairedColumn_(std::exchange(col.pairedColumn_, Master_matrix::template get_null_value<Index>()))
107 {}
108
110
118 Index get_paired_chain_index() const { return pairedColumn_; }
119
126 bool is_paired() const { return pairedColumn_ != Master_matrix::template get_null_value<Index>(); }
127
133 void assign_paired_chain(Index other_col) { pairedColumn_ = other_col; }
134
138 void unassign_paired_chain() { pairedColumn_ = Master_matrix::template get_null_value<Index>(); };
139
144
149 {
150 if (this == &other) return *this;
151
152 pivot_ = std::exchange(other.pivot_, Master_matrix::template get_null_value<ID_index>());
153 pairedColumn_ = std::exchange(other.pairedColumn_, Master_matrix::template get_null_value<Index>());
154 return *this;
155 }
156
161 {
162 std::swap(col1.pivot_, col2.pivot_);
163 std::swap(col1.pairedColumn_, col2.pairedColumn_);
164 }
165
166 protected:
167 ID_index _get_pivot() const { return pivot_; }
168
169 void _swap_pivots(Chain_column_extra_properties& other) { std::swap(pivot_, other.pivot_); }
170
171 private:
172 ID_index pivot_;
173 Index pairedColumn_;
177};
178
179} // namespace persistence_matrix
180} // namespace Gudhi
181
182#endif // PM_CHAIN_COLUMN_PROP_H
Class managing the pivot and partitioning of columns in Chain_matrix.
Definition chain_column_extra_properties.h:58
friend void swap(Chain_column_extra_properties &col1, Chain_column_extra_properties &col2) noexcept
Swap operator.
Definition chain_column_extra_properties.h:160
Chain_column_extra_properties(ID_index pivot, Index pair)
Constructor setting the pivot and the pair at the given values.
Definition chain_column_extra_properties.h:90
void assign_paired_chain(Index other_col)
Sets the value of the pair.
Definition chain_column_extra_properties.h:133
void unassign_paired_chain()
Un-pairs a column.
Definition chain_column_extra_properties.h:138
bool is_paired() const
Indicates if the column is paired or not.
Definition chain_column_extra_properties.h:126
Index get_paired_chain_index() const
Returns null index if the column is not paired, the MatIdx of the pair otherwise.
Definition chain_column_extra_properties.h:118
Chain_column_extra_properties(const Chain_column_extra_properties &col)=default
Copy constructor.
Chain_column_extra_properties(Chain_column_extra_properties &&col) noexcept
Move constructor.
Definition chain_column_extra_properties.h:104
Chain_column_extra_properties(ID_index pivot)
Constructor setting the pivot at the given value and the pair to null index (i.e. not paired).
Definition chain_column_extra_properties.h:79
typename Master_matrix::Index Index
Definition chain_column_extra_properties.h:60
Chain_column_extra_properties & operator=(const Chain_column_extra_properties &other)=default
Assign operator.
typename Master_matrix::ID_index ID_index
Definition chain_column_extra_properties.h:61
Chain_column_extra_properties & operator=(Chain_column_extra_properties &&other) noexcept
Move assign operator.
Definition chain_column_extra_properties.h:148
Chain_column_extra_properties()
Default constructor. Sets the pivot and pair to null index, which means "not existing".
Definition chain_column_extra_properties.h:67
Persistence matrix namespace.
Definition FieldOperators.h:18
Gudhi namespace.
Definition SimplicialComplexForAlpha.h:14