43 auto it = begin(input);
44 auto stop = end(input);
45 if (it == stop)
return;
46 typedef std::decay_t<
decltype(*it)> Filtration;
47 std::vector<Filtration> data;
49 auto le = [<](
auto& x,
auto& y){
return !lt(y, x); };
50 auto ge = [<](
auto& x,
auto& y){
return !lt(x, y); };
51 auto gt = [<](
auto& x,
auto& y){
return lt(y, x); };
52 data.push_back(*it++);
54 if (it == stop)
goto infinite;
64 if (it == stop)
goto endup;
72 out(data[0], data[1]);
80 if (it == stop)
goto enddown;
82 if (le(v, data.back())) {
83 if (gt(v,data.end()[-3])) {
84 data.back() = v;
goto state132;
86 out(data.end()[-3], data.end()[-2]);
87 data.erase(data.end()-3, data.end());
88 if (data.empty()) { data.push_back(v);
goto state1; }
93 if (ge(v, data.end()[-2])) {
94 out(data.end()[-1], data.end()[-2]);
95 data.erase(data.end()-2, data.end());
103 if (it == stop)
goto endup;
105 if (ge(v, data.back())) {
106 if (lt(v,data.end()[-3])) {
107 data.back() = v;
goto state312;
109 out(data.end()[-2], data.end()[-3]);
110 data.erase(data.end()-3, data.end());
111 GUDHI_CHECK (!data.empty(), std::logic_error(
"Bug in Gudhi"));
116 if (le(v, data.end()[-2])) {
117 out(data.end()[-2], data.end()[-1]);
118 data.erase(data.end()-2, data.end());
126 if (data.size() == 1) { data.push_back(v);
goto state12; }
129 switch (data.size()) {
142 if (data.size() > 1) {
143 out(data.end()[-1], data.end()[-2]);
144 data.erase(data.end()-2, data.end());
149 out(data[0], std::numeric_limits<Filtration>::infinity());
void compute_persistence_of_function_on_line(FiltrationRange const &input, OutputFunctor &&out, Compare &<={})
Computes the persistent homology of the sublevelsets of a PL function defined on in linear time.
Definition Persistence_on_a_line.h:37