#include <iostream>
#include <ostream>
#include <fstream>
#include <string>
 
 
 
enum lineType : int { INCLUSION, REMOVAL, COMMENT };
 
lineType read_operation(std::string& line, std::vector<ID_handle>& cells, double& timestamp) {
  lineType type;
  cells.clear();
  ID_handle num;
 
  size_t current = line.find_first_not_of(' ', 0);
  if (current == std::string::npos) return COMMENT;
 
  if (line[current] == 'i')
    type = INCLUSION;
  else if (line[current] == 'r')
    type = REMOVAL;
  else if (line[current] == '#')
    return COMMENT;
  else {
    std::clog << "(1) Syntaxe error in file." << std::endl;
    exit(0);
  }
 
  current = line.find_first_not_of(' ', current + 1);
  if (current == std::string::npos) {
    std::clog << "(2) Syntaxe error in file." << std::endl;
    exit(0);
  }
  size_t next = line.find_first_of(' ', current);
  timestamp = std::stod(line.substr(current, next - current));
 
  current = line.find_first_not_of(' ', next);
  while (current != std::string::npos) {
    next = line.find_first_of(' ', current);
    num = std::stoi(line.substr(current, next - current));
    cells.push_back(num);
    current = line.find_first_not_of(' ', next);
  }
 
  return type;
}
 
int main(int argc, char* const argv[]) {
  if (argc != 2) {
    if (argc < 2)
      std::clog << "Missing argument: input file name is needed." << std::endl;
    else
      std::clog << "Too many arguments: only input file name is needed." << std::endl;
    return 0;
  }
 
  std::string line;
  std::ifstream file(argv[1]);
 
  
    std::cout << "[" << dim << "] ";
    std::cout << birth << " - " << death;
    std::cout << std::endl;
  });
 
  if (file.is_open()) {
    std::vector<ID_handle> data;
    unsigned int id = 0;
    double timestamp;
    lineType type;
 
    while (getline(file, line, '\n') && read_operation(line, data, timestamp) == COMMENT);
    double lastTimestamp = timestamp;
    
 
    while (getline(file, line, '\n')) {
      type = read_operation(line, data, timestamp);
      if (type != COMMENT && lastTimestamp != timestamp) {
        lastTimestamp = timestamp;
      }
 
      if (type == INCLUSION) {
        ++id;
        int dim = data.size() == 0 ? 0 : data.size() - 1;
        zp.insert_cell(id, data, dim, timestamp);
      } else if (type == REMOVAL) {
        ++id;
        zp.remove_cell(data[0], timestamp);
      }
    }
 
    file.close();
  } else {
    std::clog << "Unable to open input file." << std::endl;
    file.setstate(std::ios::failbit);
  }
 
  
  
    std::cout << "[" << dim << "] ";
    std::cout << birth << " - inf";
    std::cout << std::endl;
  });
 
  return 0;
}
Class computing the zigzag persistent homology of a zigzag filtration. Algorithm based on ....
Definition: filtered_zigzag_persistence.h:121
 
typename Options::Filtration_value Filtration_value
Definition: filtered_zigzag_persistence.h:126
 
typename Options::Dimension Dimension
Definition: filtered_zigzag_persistence.h:127
 
typename Options::Cell_key Cell_key
Definition: filtered_zigzag_persistence.h:125
 
Internal_key insert_cell(Cell_key cellID, const BoundaryRange &boundary, Dimension dimension, Filtration_value filtrationValue)
Updates the zigzag persistence diagram after the insertion of the given cell.
Definition: filtered_zigzag_persistence.h:180
 
Class computing the zigzag persistent homology of a zigzag filtration. Algorithm based on .
Definition: filtered_zigzag_persistence.h:442
 
Contains the implementation of the Gudhi::zigzag_persistence::Default_filtered_zigzag_options structu...
 
Value type for a filtration function on a cell complex.
Definition: FiltrationValue.h:20