Horizon
track_graph.hpp
1 #pragma once
2 #include <memory>
3 #include "board/track.hpp"
4 
5 namespace horizon {
6 class TrackGraph {
7 public:
8  class Edge;
9 
10  class Node {
11  public:
12  bool keep = false;
13  std::list<Edge *> edges;
14  };
15 
16  class Edge {
17  public:
18  Edge(Node &f, Node &t, const Track &tr) : from(&f), to(&t), tracks({tr.uuid})
19  {
20  }
21 
22  Node *from = nullptr;
23  Node *to = nullptr;
24 
25  Node *get_other_node(Node *n) const;
26 
27  std::set<UUID> tracks;
28  };
29 
30  void merge_edges();
31  void dump(const class Board &brd, const std::string &filename) const;
32 
33  Node &get_or_create_node(const Track::Connection &conn);
34  void add_track(const Track &track);
35  std::map<std::pair<UUID, UUID>, Node> nodes;
36  std::list<Edge> edges;
37 };
38 } // namespace horizon
Definition: board.hpp:47
Definition: track_graph.hpp:16
Definition: track_graph.hpp:10
Definition: track_graph.hpp:6
Definition: track.hpp:32
Definition: track.hpp:14