summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorcjamin <cjamin@636b058d-ea47-450e-bf9e-a15bfbe3eedb>2017-05-23 09:10:41 +0000
committercjamin <cjamin@636b058d-ea47-450e-bf9e-a15bfbe3eedb>2017-05-23 09:10:41 +0000
commit269fa842c2eaeb7ddf8040abfd6c18d23ac767e9 (patch)
tree13a22e532e4d5dd61fba8f4e9734b3f9f335ecb0 /src
parentf8992aa852dc1a5ef1392837581f55650cccaebf (diff)
read_persistence_diagram_from_file now uses an output iterator
git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/read_persistence_from_file@2455 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 3969666dcde3581a75789c5a4b62817dea553f9f
Diffstat (limited to 'src')
-rw-r--r--src/Bottleneck_distance/example/bottleneck_read_file_example.cpp15
-rw-r--r--src/common/include/gudhi/reader_utils.h17
2 files changed, 21 insertions, 11 deletions
diff --git a/src/Bottleneck_distance/example/bottleneck_read_file_example.cpp b/src/Bottleneck_distance/example/bottleneck_read_file_example.cpp
index 67bd27db..74c8d1ab 100644
--- a/src/Bottleneck_distance/example/bottleneck_read_file_example.cpp
+++ b/src/Bottleneck_distance/example/bottleneck_read_file_example.cpp
@@ -31,14 +31,25 @@
#include <sstream>
#include <string>
+struct Persistence_interval
+ : std::pair<double, double>
+{
+ Persistence_interval(std::tuple<int, double, double> data)
+ : std::pair<double, double>(std::make_pair(std::get<1>(data), std::get<2>(data)))
+ {}
+};
+
int main(int argc, char** argv) {
if (argc < 3) {
std::cout << "To run this program please provide as an input two files with persistence diagrams. Each file " <<
"should contain a birth-death pair per line. Third, optional parameter is an error bound on a bottleneck" <<
" distance (set by default to zero). The program will now terminate \n";
}
- std::vector< std::pair< double, double > > diag1 = read_persistence_diagram_from_file(argv[1]);
- std::vector< std::pair< double, double > > diag2 = read_persistence_diagram_from_file(argv[2]);
+ std::vector<Persistence_interval> diag1;
+ std::vector<Persistence_interval> diag2;
+ read_persistence_diagram_from_file(argv[1], std::back_inserter(diag1));
+ read_persistence_diagram_from_file(argv[2], std::back_inserter(diag2));
+
double tolerance = 0.;
if (argc == 4) {
tolerance = atof(argv[3]);
diff --git a/src/common/include/gudhi/reader_utils.h b/src/common/include/gudhi/reader_utils.h
index ceee8daf..019a3db2 100644
--- a/src/common/include/gudhi/reader_utils.h
+++ b/src/common/include/gudhi/reader_utils.h
@@ -298,11 +298,11 @@ std::vector< std::vector< Filtration_value > > read_lower_triangular_matrix_from
/**
Reads a file containing persistance intervals.
Each line might contain 2, 3 or 4 values: [field] [dimension] birth death
+The output iterator `out` is used this way: `*out++ = std::make_tuple(dim, birth, death);`
+where `dim` is an `int`, `birth` a `double`, and `death` a `double`.
**/
-
-std::vector< std::pair<double, double> > read_persistence_diagram_from_file(std::string const& filename) {
-
- std::vector< std::pair<double, double> > result;
+template <typename OutputIterator>
+void read_persistence_diagram_from_file(std::string const& filename, OutputIterator out) {
std::ifstream in;
in.open(filename);
@@ -310,7 +310,6 @@ std::vector< std::pair<double, double> > read_persistence_diagram_from_file(std:
#ifdef DEBUG_TRACES
std::cerr << "File \"" << filename << "\" does not exist.\n";
#endif // DEBUG_TRACES
- return result;
}
std::string line;
@@ -319,7 +318,9 @@ std::vector< std::pair<double, double> > read_persistence_diagram_from_file(std:
if (line.length() != 0 && line[0] != '#') {
double numbers[4];
int n = sscanf(line.c_str(), "%lf %lf %lf %lf", &numbers[0], &numbers[1], &numbers[2], &numbers[3]);
- result.push_back(std::make_pair(numbers[n - 2], numbers[n - 1]));
+ //int field = (n == 4 ? static_cast<int>(numbers[0]) : -1);
+ int dim = (n >= 3 ? static_cast<int>(numbers[n - 3]) : -1);
+ *out++ = std::make_tuple(dim, numbers[n - 2], numbers[n - 1]);
#ifdef DEBUG_TRACES
std::cerr << numbers[n - 2] << " - " << numbers[n - 1] << "\n";
#endif // DEBUG_TRACES
@@ -327,8 +328,6 @@ std::vector< std::pair<double, double> > read_persistence_diagram_from_file(std:
}
in.close();
- return result;
-} // read_diagram_from_file
-
+} // read_persistence_diagram_from_file
#endif // READER_UTILS_H_