Loading...
Searching...
No Matches
persistence_interval.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) 2024 Inria
6 *
7 * Modification(s):
8 * - YYYY/MM Author: Description of the modification
9 */
10
16
17#ifndef PM_INTERVAL_INCLUDED
18#define PM_INTERVAL_INCLUDED
19
20#include <ostream> //std::ostream
21#include <limits> //std::numeric_limits
22#include <tuple>
23#include <utility> //std::move
24
25namespace Gudhi {
26namespace persistence_matrix {
27
39template <typename Dimension, typename Event_value>
50 static constexpr Event_value inf = std::numeric_limits<Event_value>::has_infinity
51 ? std::numeric_limits<Event_value>::infinity()
52 : static_cast<Event_value>(-1);
53
61 Persistence_interval(Event_value birth = inf, Event_value death = inf, Dimension dim = -1)
63 {}
64
65 Dimension dim;
66 Event_value birth;
67 Event_value death;
68
75 friend std::ostream& operator<<(std::ostream& stream, const Persistence_interval& interval)
76 {
77 stream << "[" << interval.dim << "] ";
78 if constexpr (std::numeric_limits<Event_value>::has_infinity) {
79 stream << interval.birth << " - " << interval.death;
80 } else {
81 if (interval.birth == inf)
82 stream << "inf";
83 else
84 stream << interval.birth;
85 stream << " - ";
86 if (interval.death == inf)
87 stream << "inf";
88 else
89 stream << interval.death;
90 }
91 return stream;
92 }
93
100 template <std::size_t I>
101 constexpr auto& get() & noexcept
102 {
103 static_assert(I < 3, "Value mismatch at argument 1 in template parameter list. Maximal possible value is 2.");
104
105 if constexpr (I == 0) return birth;
106 if constexpr (I == 1) return death;
107 if constexpr (I == 2) return dim;
108 }
109
116 template <std::size_t I>
117 constexpr const auto& get() const& noexcept
118 {
119 static_assert(I < 3, "Value mismatch at argument 1 in template parameter list. Maximal possible value is 2.");
120
121 if constexpr (I == 0) return birth;
122 if constexpr (I == 1) return death;
123 if constexpr (I == 2) return dim;
124 }
125
132 template <std::size_t I>
133 constexpr auto&& get() && noexcept
134 {
135 static_assert(I < 3, "Value mismatch at argument 1 in template parameter list. Maximal possible value is 2.");
136
137 if constexpr (I == 0) return std::move(birth);
138 if constexpr (I == 1) return std::move(death);
139 if constexpr (I == 2) return std::move(dim);
140 }
141
148 template <std::size_t I>
149 constexpr const auto&& get() const&& noexcept
150 {
151 static_assert(I < 3, "Value mismatch at argument 1 in template parameter list. Maximal possible value is 2.");
152
153 if constexpr (I == 0) return std::move(birth);
154 if constexpr (I == 1) return std::move(death);
155 if constexpr (I == 2) return std::move(dim);
156 }
157};
158
159} // namespace persistence_matrix
160} // namespace Gudhi
161
162namespace std {
163
172template <typename Dimension, typename Event_value>
173struct tuple_size<Gudhi::persistence_matrix::Persistence_interval<Dimension, Event_value> >
174 : integral_constant<size_t, 3> {};
175
186template <size_t I, typename Dimension, typename Event_value>
187struct tuple_element<I, Gudhi::persistence_matrix::Persistence_interval<Dimension, Event_value> > {
188 static_assert(I < 3, "Value mismatch at argument 1 in template parameter list. Maximal possible value is 2.");
189
190 using type = conditional_t < I<2, Event_value, Dimension>;
191};
192
204template <size_t I, typename Dimension, typename Event_value>
206{
207 return i.template get<I>();
208}
209
221template <size_t I, typename Dimension, typename Event_value>
223{
224 return i.template get<I>();
225}
226
238template <size_t I, typename Dimension, typename Event_value>
240{
241 return std::move(i).template get<I>();
242}
243
255template <size_t I, typename Dimension, typename Event_value>
257{
258 return std::move(i).template get<I>();
259}
260
261} // namespace std
262
263#endif // PM_INTERVAL_INCLUDED
constexpr auto & get(Gudhi::persistence_matrix::Persistence_interval< Dimension, Event_value > &i) noexcept
Partial specialization of get for Gudhi::persistence_matrix::Persistence_interval.
Definition persistence_interval.h:205
Persistence matrix namespace.
Definition FieldOperators.h:18
Gudhi namespace.
Definition SimplicialComplexForAlpha.h:14
STL namespace.
Type for an interval in a persistent diagram or barcode. Stores the birth, death and dimension of the...
Definition persistence_interval.h:40
constexpr const auto && get() const &&noexcept
Specialization of get for Gudhi::persistence_matrix::Persistence_interval.
Definition persistence_interval.h:149
static constexpr Internal_key inf
Definition persistence_interval.h:50
constexpr auto && get() &&noexcept
Specialization of get for Gudhi::persistence_matrix::Persistence_interval.
Definition persistence_interval.h:133
Internal_key death
Definition persistence_interval.h:67
constexpr auto & get() &noexcept
Specialization of get for Gudhi::persistence_matrix::Persistence_interval.
Definition persistence_interval.h:101
constexpr const auto & get() const &noexcept
Specialization of get for Gudhi::persistence_matrix::Persistence_interval.
Definition persistence_interval.h:117
Internal_key birth
Definition persistence_interval.h:66
friend std::ostream & operator<<(std::ostream &stream, const Persistence_interval &interval)
operator<<
Definition persistence_interval.h:75
Persistence_interval(Event_value birth=inf, Event_value death=inf, Dimension dim=-1)
Constructor.
Definition persistence_interval.h:61