source: src/Graph/Graph6Reader.hpp

Candidate_v1.6.1
Last change on this file was c52abd, checked in by Frederik Heber <frederik.heber@…>, 7 years ago

Added unit test for Graph6Reader.

  • Property mode set to 100644
File size: 1.6 KB
RevLine 
[f5ea10]1/*
2 * Graph6Reader.hpp
3 *
4 * Created on: Sep 26, 2017
5 * Author: heber
6 */
7
8
9#ifndef GRAPH_GRAPH6READER_HPP_
10#define GRAPH_GRAPH6READER_HPP_
11
12// include config.h
13#ifdef HAVE_CONFIG_H
14#include <config.h>
15#endif
16
17#include <istream>
[99c705]18#include <iterator>
[f5ea10]19#include <string>
20#include <vector>
21
[c52abd]22class Graph6ReaderUnitTest;
23
[f5ea10]24/** This functor parses graph6 formatted strings and returns number of nodes
25 * and a edge list.
26 *
27 * This is inspired by https://github.com/adrianN/graph6/, only I found the code
28 * there quite ugly and unnecessarily complicated: inheriting from std::iterator,
29 * overriding all the operators (++, *, ...) for no apparent reason instead of
30 * adding normal functions, ...
31 *
32 */
33struct Graph6Reader
34{
[c52abd]35 //!> grant unit test access to private parts
36 friend class Graph6ReaderUnitTest;
37
[f5ea10]38 typedef std::pair<int, int> edge_t;
39 typedef std::vector< edge_t > edges_t;
40
41 Graph6Reader() :
[99c705]42 column(1),
43 row(-1),
44 eos(false),
45 bit_pos(-1),
[f5ea10]46 num_nodes(0)
47 {}
48
49 void operator()(std::istream &_graph_string);
50
51 int get_num_nodes() const
52 { return num_nodes; }
53
54 const edges_t& get_edges() const
55 { return edges; }
56
57private:
58
59 void scan_num_nodes(std::istream_iterator<unsigned char> &_it);
60 void scan_edges(std::istream_iterator<unsigned char> &_it);
61 void next_edge(std::istream_iterator<unsigned char> &_it);
62
63private:
64 int column;
65 int row;
[99c705]66 bool eos;
[f5ea10]67 int bit_pos;
68 static const int packet_size;
69
70 //!> contains number of edges
71 int num_nodes;
72 //!> contains edge list
73 std::vector< edge_t > edges;
74};
75
76
77#endif /* GRAPH_GRAPH6READER_HPP_ */
Note: See TracBrowser for help on using the repository browser.