/* Represents an undirected graph. * Also contains the vertex and edge classes * vertexes know their center point on the SDL Surface - * bad decoupling maybe, but not too bad, all things considered */ #ifndef _GRAPH_H_ #define _GRAPH_H_ #include using std::list; class Vertex { public: Vertex(int x, int y, int r, int colour = 0x000000); int x; int y; int r; int colour; }; struct Edge { Vertex* a; Vertex* b; }; class Graph { public: Graph(bool planar); virtual ~Graph(); list get_vertices() const { return vertices; } list get_edges() const { return edges; } bool point_in_vertex(int x, int y, int size); Vertex * vertex_at(int x, int y); virtual bool add_vertex(int x, int y, int r, int colour, Vertex* src=NULL); bool is_planar() const { return planar; } void set_planar(bool planar) { this->planar = planar; } private: bool vertex_would_overlap(int x, int y, int r); bool crosses_edge(Edge e); protected: list vertices; list edges; private: bool planar; }; #endif