From 9f5d959a3af3582a7b3fa1f7b4b2183c8f73b380 Mon Sep 17 00:00:00 2001 From: Marcin Chrzanowski Date: Tue, 3 Jan 2017 23:24:13 -0500 Subject: Implement graph parser --- src/parse.h | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/parse.h diff --git a/src/parse.h b/src/parse.h new file mode 100644 index 0000000..3f86eec --- /dev/null +++ b/src/parse.h @@ -0,0 +1,50 @@ +#ifndef PARSE_H +#define PARSE_H + +#include +#include +#include "graph.h" + +class Parser { +public: + Parser(std::string filename) : graph_(), input_file_(filename) { + parse_number_edges_(); + + for (int i = 0; i < number_edges_; i++) { + parse_edge_(); + } + } + + Graph get_graph() { + return graph_; + } +private: + Graph graph_; + std::ifstream input_file_; + int number_edges_; + std::set vertices_; + + void parse_number_edges_() { + input_file_ >> number_edges_; + } + + void parse_edge_() { + int from, to; + + input_file_ >> from >> to; + + if (vertices_.find(from) == vertices_.end()) { + graph_.add_vertex(from); + vertices_.insert(from); + } + + if (vertices_.find(to) == vertices_.end()) { + graph_.add_vertex(to); + vertices_.insert(to); + } + + graph_.add_edge(from, to); + } +}; + +#endif -- cgit v1.2.3