abg

Animated background for X11
git clone git://git.laack.co/abg.git
Log | Files | Refs | README | LICENSE

graph.hpp (1121B)


      1 #pragma once
      2 
      3 #include "edge.hpp"
      4 #include "vertex.hpp"
      5 #include <cstddef>
      6 #include <cstdint>
      7 #include <random>
      8 #include <string>
      9 #include <vector>
     10 
     11 class Graph {
     12 private:
     13     std::vector<std::vector<Edge>> edges{};
     14     std::vector<Vertex> vertices {};
     15     std::vector<Vertex*> verticesToRender {}; // these point to 
     16     std::vector<Edge*> edgesToRender {};      // elements in the other vectors.
     17                                              // past init, vertices and edges don't vary
     18 
     19 public:
     20   // based on the edgeCount and vertCount, random edges and vertices will be
     21   // created.
     22   Graph(std::size_t edgeCount, std::size_t vertCount, uint32_t xMax,
     23         uint32_t yMax, std::uint32_t seed = std::random_device{}());
     24   std::string toString() noexcept;
     25   void render() noexcept;
     26   void renderUnrenderedTraversed() noexcept;
     27   void traverseVertexIdx(std::size_t idx);
     28   std::vector<Edge> getEdgesOfVertexIdx(std::size_t idx);
     29   std::vector<Edge>* getEdgesWithUnvisitedVertices(std::size_t idx);
     30   void setEdgeTraversed(Edge e);
     31   Vertex getVertex(std::size_t idx);
     32   std::size_t getVertexCount() const noexcept;
     33 };