18#ifndef PM_CHAIN_PAIRING_H
19#define PM_CHAIN_PAIRING_H
24template <
typename Master_matrix>
46template <
class Master_matrix>
50 using Barcode =
typename Master_matrix::Barcode;
51 using Dimension =
typename Master_matrix::Dimension;
70 pairing1.barcode_.swap(pairing2.barcode_);
71 pairing1.indexToBar_.swap(pairing2.indexToBar_);
75 using Pos_index =
typename Master_matrix::Pos_index;
76 using Index =
typename Master_matrix::Index;
78 void _update_barcode(Pos_index birth, Pos_index death);
79 void _add_bar(Dimension dim, Pos_index birth);
80 void _erase_bar(Pos_index event);
81 Pos_index _death(Index index)
const;
82 Pos_index _birth(Index index)
const;
86 using Dictionary =
typename Master_matrix::Bar_dictionary;
93 Dictionary indexToBar_;
96template <
class Master_matrix>
102template <
class Master_matrix>
103inline void Chain_pairing<Master_matrix>::_update_barcode(Pos_index birth, Pos_index death)
105 if constexpr (Master_matrix::Option_list::has_removable_columns) {
106 auto& barIt = indexToBar_.at(birth);
107 barIt->death = death;
108 indexToBar_.try_emplace(death, barIt);
110 barcode_[indexToBar_[birth]].death = death;
111 indexToBar_.push_back(indexToBar_[birth]);
115template <
class Master_matrix>
116inline void Chain_pairing<Master_matrix>::_add_bar(Dimension dim, Pos_index birth)
118 barcode_.emplace_back(birth, Master_matrix::template get_null_value<Pos_index>(), dim);
119 if constexpr (Master_matrix::Option_list::has_removable_columns) {
120 indexToBar_.try_emplace(birth, --barcode_.end());
122 indexToBar_.push_back(barcode_.size() - 1);
126template <
class Master_matrix>
127inline void Chain_pairing<Master_matrix>::_erase_bar(Pos_index event)
129 auto it = indexToBar_.find(event);
130 typename Barcode::iterator bar = it->second;
132 if (bar->death == Master_matrix::template get_null_value<Pos_index>())
135 bar->death = Master_matrix::template get_null_value<Pos_index>();
137 indexToBar_.erase(it);
140template <
class Master_matrix>
141inline typename Chain_pairing<Master_matrix>::Pos_index Chain_pairing<Master_matrix>::_death(Index index)
const
143 if constexpr (Master_matrix::Option_list::has_removable_columns) {
144 return indexToBar_.at(index)->death;
146 return barcode_.at(indexToBar_.at(index)).death;
150template <
class Master_matrix>
151inline typename Chain_pairing<Master_matrix>::Pos_index Chain_pairing<Master_matrix>::_birth(Index index)
const
153 if constexpr (Master_matrix::Option_list::has_removable_columns) {
154 return indexToBar_.at(index)->birth;
156 return barcode_.at(indexToBar_.at(index)).birth;
160template <
class Master_matrix>
161inline void Chain_pairing<Master_matrix>::_reset()
Class managing the barcode for Chain_vine_swap.
Definition chain_vine_swap.h:89
friend void swap(Chain_pairing &pairing1, Chain_pairing &pairing2) noexcept
Swap operator.
Definition chain_pairing.h:68
const Barcode & get_current_barcode() const
Returns the current barcode which is maintained at any insertion, removal or vine swap.
Definition chain_pairing.h:97
typename Master_matrix::Dimension Dimension
Definition chain_pairing.h:51
Chain_pairing()=default
Default constructor.
typename Master_matrix::Barcode Barcode
Definition chain_pairing.h:50
Persistence matrix namespace.
Definition FieldOperators.h:18
Gudhi namespace.
Definition SimplicialComplexForAlpha.h:14
Empty structure. Inherited instead of Chain_pairing, when the computation of the barcode was not enab...
Definition chain_pairing.h:34