CppGraph code
CppGraph Repository
Library for constructing Directed Graphs with Vertices and directed Edges
Quick Status
Code functions correctly
no known defects
Demonstration code
yes
Documentation
yes
Test cases
no, but planned
Static library
no, but planned
Build requires
C++17 option
Planned design changes
May change storage to support
move copy and move assignment
1.0 Concept
Graphs are very useful for capturing relationships, e.g., dependencies between packages.
This repository contains a Graph<V, E,>, where V is a Vertex class and E is an Edge
class. The intent of this design is to support Vertices and Edges that may contain information
as data members. For example, if we need to capture relationships between a set of classes,
each vertex contains a class name and each edge contains a relationship type, e.g., inheritence,
composition, aggregation, or using.
2.0 Design
Each vertex contains a std::vector<Edge> and each graph contains a std::vector<Vertex>.
Each edge has an associated int that is an index into graph's vertex collection to refer to
a specific child node.
It is much easier to ensure memory safety using indexes into the adjacency list as compared to
referencing with pointers. By safety we mean always pointing to owned memory and reclaiming
memory when no longer used.
3.0 Status
I'm considering changing the class definitions and their data structures, in order to
simplify the design.
Note that the current implementation is fully functional, so this redesign probably won't
happen for awhile.