52 using Barcode =
typename Master_matrix::Barcode;
71 pairing1.barcode_.swap(pairing2.barcode_);
72 pairing1.indexToBar_.swap(pairing2.indexToBar_);
73 pairing1.idToPosition_.swap(pairing2.idToPosition_);
77 using Pos_index =
typename Master_matrix::Pos_index;
78 using ID_index =
typename Master_matrix::ID_index;
79 using Dimension =
typename Master_matrix::Dimension;
81 void _reserve(
unsigned int numberOfColumns) { indexToBar_.reserve(numberOfColumns); }
83 void _update_barcode(ID_index birthPivot, Pos_index death)
85 auto it = idToPosition_.find(birthPivot);
86 Pos_index pivotBirth = it == idToPosition_.end() ? birthPivot : it->second;
87 if constexpr (Master_matrix::hasFixedBarcode || !Master_matrix::Option_list::has_removable_columns) {
88 barcode_[indexToBar_[pivotBirth]].death = death;
89 indexToBar_.push_back(indexToBar_[pivotBirth]);
91 auto& barIt = indexToBar_.at(pivotBirth);
93 indexToBar_.try_emplace(death, barIt);
97 void _add_bar(Dimension dim, Pos_index birth)
99 barcode_.emplace_back(birth, Master_matrix::template get_null_value<Pos_index>(), dim);
100 if constexpr (Master_matrix::hasFixedBarcode || !Master_matrix::Option_list::has_removable_columns) {
101 indexToBar_.push_back(barcode_.size() - 1);
103 indexToBar_.try_emplace(birth, --barcode_.end());
107 void _remove_last(Pos_index eventIndex)
109 static_assert(Master_matrix::Option_list::has_removable_columns,
"_remove_last not available.");
110 constexpr const Pos_index nullDeath = Master_matrix::template get_null_value<Pos_index>();
112 if constexpr (Master_matrix::hasFixedBarcode) {
113 auto& bar = barcode_[indexToBar_[eventIndex]];
114 if (bar.death == nullDeath) {
117 bar.death = nullDeath;
119 indexToBar_.pop_back();
121 auto it = indexToBar_.find(eventIndex);
122 typename Barcode::iterator bar = it->second;
124 if (bar->death == nullDeath)
127 bar->death = nullDeath;
129 indexToBar_.erase(it);
132 auto& map =
static_cast<typename Master_matrix::Master_RU_matrix*
>(
this)->positionToID_;
133 auto it = map.find(eventIndex);
134 if (it != map.end()) {
135 idToPosition_.erase(it->second);
140 void _insert_id_position(ID_index
id, Pos_index pos) { idToPosition_.emplace(
id, pos); }
149 using Dictionary =
typename Master_matrix::Bar_dictionary;
153 friend RU_barcode_swap<Master_matrix>;
156 Dictionary indexToBar_;
160 std::unordered_map<ID_index, Pos_index> idToPosition_;