{"id":22812182,"url":"https://github.com/sharoniv0x86/appledore","last_synced_at":"2025-04-13T22:23:24.454Z","repository":{"id":265622289,"uuid":"896352117","full_name":"SharonIV0x86/Appledore","owner":"SharonIV0x86","description":"A simple and efficient graph library in modern C++ Supports directed/undirected graphs with customizable edge types, designed for performance and ease of use.","archived":false,"fork":false,"pushed_at":"2025-03-16T07:10:49.000Z","size":7392,"stargazers_count":15,"open_issues_count":13,"forks_count":18,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-27T12:46:40.982Z","etag":null,"topics":["cpp","cpp-library","cpp17","graph","graph-algorithms","graphs","modern-cpp"],"latest_commit_sha":null,"homepage":"https://sharoniv0x86.github.io/testdocs/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SharonIV0x86.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-30T06:00:26.000Z","updated_at":"2025-03-16T07:10:52.000Z","dependencies_parsed_at":"2024-11-30T07:28:16.525Z","dependency_job_id":"9f0b348d-6975-47e4-a253-b411ed78d5f4","html_url":"https://github.com/SharonIV0x86/Appledore","commit_stats":null,"previous_names":["sharoniv0x86/appledore"],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SharonIV0x86%2FAppledore","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SharonIV0x86%2FAppledore/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SharonIV0x86%2FAppledore/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SharonIV0x86%2FAppledore/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SharonIV0x86","download_url":"https://codeload.github.com/SharonIV0x86/Appledore/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248789842,"owners_count":21161901,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","cpp-library","cpp17","graph","graph-algorithms","graphs","modern-cpp"],"created_at":"2024-12-12T12:11:05.000Z","updated_at":"2025-04-13T22:23:24.404Z","avatar_url":"https://github.com/SharonIV0x86.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Appledore\nA simple and efficient graph library in modern C++ Supports directed/undirected graphs with customizable edge type and vertices, designed for performance and ease of use.\n\n## Features\n- Adjacency matrix-based representation.\n- Adjacency list-based representation\n- Supports custom vertex and edge types\n- Efficient management of vertices and edges\n- Easy querying of graph structure and properties\n- Upcoming features: support for graph degrees, advanced graph algorithms (e.g., Dijkstra, BFS, DFS), and additional utilities for graph analysis.\n\n## Installation\n1. Clone the repository\n```\n git clone https://github.com/SharonIV0X86/Appledore\n```\n2. Include the ``GraphMatrix`` header in your project\n## Example Diragram 1\nCode below implements the Graph relationship between Airports and Distances.\n[Directed Graph Example](https://github.com/SharonIV0x86/Appledore/blob/main/examples/directedGraph.cpp)\n![graph3](https://github.com/user-attachments/assets/8044b80a-c43a-4b92-856d-737ad4b9af20)\n## Directed Weighted graph using Custom Structures/Classes\n```cpp\n#include \u003ciostream\u003e\n#include \"../include/GraphMatrix.hpp\"\n\nusing namespace Appledore;\n\nclass Airport : public GraphVertex\n{\npublic:\n    std::string name;\n\n    Airport(std::string name) : name(name) {};\n\n    friend std::ostream \u0026operator\u003c\u003c(std::ostream \u0026os, const Airport \u0026airport)\n    {\n        os \u003c\u003c airport.name;\n        return os;\n    }\n};\n\nclass Flight\n{\npublic:\n    int distance;\n    Flight(int dis) : distance(dis) {};\n\n    friend std::ostream \u0026operator\u003c\u003c(std::ostream \u0026os, const Flight \u0026flight)\n    {\n        os \u003c\u003c flight.distance \u003c\u003c \" miles\";\n        return os;\n    }\n};\n\nint main()\n{\n    GraphMatrix\u003cAirport, Flight, DirectedG\u003e AirportsGraph;\n\n    // Define airports\n    Airport LAX(\"Los Angeles Intl.\");\n    Airport JFK(\"John F. Kennedy\");\n    Airport DEN(\"Denver Intl.\");\n    Airport ATL(\"Atlanta Intl.\");\n\n    // Define flights\n    Flight flight1(761);\n    Flight flight2(1945);\n    Flight flight3(1199);\n    Flight flight4(1631);\n    Flight flight5(2475);\n\n    // Add vertices (airports)\n    AirportsGraph.addVertex(LAX, JFK, DEN, ATL);\n\n    // Add edges (flights)\n    AirportsGraph.addEdge(LAX, ATL, flight2);\n    AirportsGraph.addEdge(LAX, JFK, flight5);\n    AirportsGraph.addEdge(JFK, ATL, flight1);\n    AirportsGraph.addEdge(JFK, DEN, flight4);\n    AirportsGraph.addEdge(DEN, ATL, flight3);\n\n    // Display all vertices\n    std::cout \u003c\u003c \"Airports in the graph:\\n\";\n    for (const auto \u0026vertex : AirportsGraph.getVertices())\n    {\n        std::cout \u003c\u003c vertex \u003c\u003c \"\\n\";\n    }\n\n    std::cout \u003c\u003c \"\\nEdges in the graph:\\n\";\n\n    // Display all edges\n    for (const auto \u0026[src, dest, edge] : AirportsGraph.getAllEdges())\n    {\n        std::cout \u003c\u003c src \u003c\u003c \" -\u003e \" \u003c\u003c dest \u003c\u003c \" : \" \u003c\u003c edge \u003c\u003c \"\\n\";\n    }\n\n    // Check if specific edges exist\n    std::cout \u003c\u003c \"\\nChecking specific edges:\\n\";\n    std::cout \u003c\u003c \"LAX to ATL: \" \u003c\u003c (AirportsGraph(LAX, ATL) ? \"Exists\" : \"Does not exist\") \u003c\u003c \"\\n\";\n    std::cout \u003c\u003c \"JFK to DEN: \" \u003c\u003c (AirportsGraph(JFK, DEN) ? \"Exists\" : \"Does not exist\") \u003c\u003c \"\\n\";\n    std::cout \u003c\u003c \"ATL to LAX: \" \u003c\u003c (AirportsGraph(ATL, LAX) ? \"Exists\" : \"Does not exist\") \u003c\u003c \"\\n\";\n\n    // Remove an edge \n    std::cout \u003c\u003c \"\\nRemoving edge JFK -\u003e DEN...\\n\";\n    AirportsGraph.removeEdge(JFK, DEN);\n\n    std::cout \u003c\u003c \"\\nUpdated edges in the graph:\\n\";\n    for (const auto \u0026[src, dest, edge] : AirportsGraph.getAllEdges())\n    {\n        std::cout \u003c\u003c src \u003c\u003c \" -\u003e \" \u003c\u003c dest \u003c\u003c \" : \" \u003c\u003c edge \u003c\u003c \"\\n\";\n    }\n\n    return 0;\n}\n\n\n```\n## Example Diagram 2\nCode below implements the Graph relationship between Airports and Distances.\n[Undirected Graph Example](https://github.com/SharonIV0x86/Appledore/blob/main/examples/undirectedGraph.cpp)\n![graph2](https://github.com/user-attachments/assets/ff6a64d1-47fe-4589-a4bd-2f6a1a15de2c)\n## Undirected Weighted graph using Custom Structures/Classes\n```cpp\n#include \u003ciostream\u003e\n#include \"../include/GraphMatrix.hpp\"\nusing namespace Appledore;\n\nclass Airport : public GraphVertex\n{\npublic:\n    std::string name;\n\n    Airport(std::string name) : name(name) {};\n\n    friend std::ostream \u0026operator\u003c\u003c(std::ostream \u0026os, const Airport \u0026airport)\n    {\n        os \u003c\u003c airport.name;\n        return os;\n    }\n};\n\nclass Flight\n{\npublic:\n    int distance;\n    Flight(int dis) : distance(dis) {};\n\n    friend std::ostream \u0026operator\u003c\u003c(std::ostream \u0026os, const Flight \u0026flight)\n    {\n        os \u003c\u003c flight.distance \u003c\u003c \" miles\";\n        return os;\n    }\n};\n\nint main()\n{\n\n    GraphMatrix\u003cAirport, Flight, UndirectedG\u003e AirportGraph;\n    // Define airports\n    Airport LAX(\"Los Angeles Intl.\");\n    Airport JFK(\"John F. Kennedy\");\n    Airport DEN(\"Denver Intl.\");\n    Airport ATL(\"Atlanta Intl.\");\n\n    // Define flights\n    Flight flight1(862);\n    Flight flight2(1945);\n    Flight flight3(1199);\n    Flight flight4(1631);\n\n    // // Add vertices to the graph\n    AirportGraph.addVertex(LAX);\n    AirportGraph.addVertex(JFK, DEN, ATL);\n\n    // Add edges between airports\n    AirportGraph.addEdge(LAX, DEN, flight1);\n    AirportGraph.addEdge(LAX, ATL, flight2);\n    AirportGraph.addEdge(ATL, DEN, flight3);\n    AirportGraph.addEdge(DEN, JFK, flight4);\n\n    std::cout \u003c\u003c \"\\nCheck if there is a flight from \" \u003c\u003c LAX \u003c\u003c \" --\u003e \" \u003c\u003c DEN \u003c\u003c \":\\n\";\n    if (AirportGraph(LAX, DEN))\n    {\n        const Flight edge = AirportGraph.getEdge(LAX, DEN);\n        std::cout \u003c\u003c \"Yes, flight distance: \" \u003c\u003c edge \u003c\u003c \"\\n\";\n    }\n    else\n    {\n        std::cout \u003c\u003c \"No direct flight available.\\n\";\n    }\n\n    std::cout \u003c\u003c \"\\nCheck if there is a flight from \" \u003c\u003c ATL \u003c\u003c \" --\u003e \" \u003c\u003c LAX \u003c\u003c \":\\n\";\n    if (AirportGraph(ATL, LAX))\n    {\n        const Flight edge = AirportGraph.getEdge(ATL, LAX);\n        std::cout \u003c\u003c \"Yes, flight distance: \" \u003c\u003c edge \u003c\u003c \"\\n\";\n    }\n    else\n    {\n        std::cout \u003c\u003c \"No direct flight available.\\n\";\n    }\n\n    std::cout \u003c\u003c \"\\nCheck if there is a flight from \" \u003c\u003c JFK \u003c\u003c \" --\u003e \" \u003c\u003c LAX \u003c\u003c \":\\n\";\n    if (AirportGraph(JFK, LAX))\n    {\n        const Flight edge = AirportGraph.getEdge(JFK, LAX);\n        std::cout \u003c\u003c \"Yes, flight distance: \" \u003c\u003c edge \u003c\u003c \"\\n\";\n    }\n    else\n    {\n        try\n        {\n            const Flight edge = AirportGraph.getEdge(JFK, LAX);\n            std::cout \u003c\u003c \"Yes, flight distance: \" \u003c\u003c edge \u003c\u003c \"\\n\";\n        }\n        catch (std::exception \u0026e)\n        {\n            std::cout \u003c\u003c \"Error: \" \u003c\u003c e.what() \u003c\u003c \"\\n\";\n        }\n    }\n\n    AirportGraph.removeEdge(ATL, LAX);\n    if (!AirportGraph(ATL, LAX))\n    {\n        std::cout \u003c\u003c \"\\nFlight Route from: \" \u003c\u003c ATL.name \u003c\u003c \" to \" \u003c\u003c LAX.name \u003c\u003c \" doesnt exist\\n\";\n    }\n    AirportGraph.iss();\n    return 0;\n}\n\n\n```\n\n\n## Example Diagram 3\nCode below implements this Graph relationship between USA States and transport medium.\n[Flight Routes Example](https://github.com/SharonIV0x86/Appledore/blob/main/examples/flightRoutes.cpp)\n![Screenshot_20241205_124620-1](https://github.com/user-attachments/assets/1db263c6-1538-4b14-8b33-725bb68ebc06)\n## MixedGraph Example using Custom Structures/Classes\nBelow is an example of how to use the library with custom vertex and edge types.\n\n```cpp\n#include \u003ciostream\u003e\n#include \u003cstring\u003e\n#include \"./include/MixedGraph.hpp\"\n\n// Vertex class representing a state in the USA\nclass State\n{\npublic:\n    std::string stateName;\n    std::string capitalCity;\n    int population;\n\n    State(const std::string \u0026name, const std::string \u0026capital, int pop)\n        : stateName(name), capitalCity(capital), population(pop) {}\n\n    bool operator\u003c(const State \u0026other) const\n    {\n        return stateName \u003c other.stateName;\n    }\n};\n\nclass Connection\n{\npublic:\n    int distance;\n    std::string transportMode;\n\n    Connection(){}\n    Connection(int dist, const std::string \u0026mode)\n        : distance(dist), transportMode(mode) {}\n};\n\nint main()\n{\n    Appledore::MixedGraphMatrix\u003cState, Connection\u003e americaNetwork;\n\n    // American States\n    State california(\"California\", \"Sacramento\", 39538223);\n    State texas(\"Texas\", \"Austin\", 29145505);\n    State florida(\"Florida\", \"Tallahassee\", 21538187);\n    State newYork(\"New York\", \"Albany\", 20201249);\n\n    americaNetwork.addVertex(california);\n    americaNetwork.addVertex(texas);\n    americaNetwork.addVertex(florida);\n    americaNetwork.addVertex(newYork);\n\n    Connection roadConnection(1500, \"Road\");   // Distance: 1500 miles, Mode: Road\n    Connection trainConnection(1300, \"Train\"); // Distance: 1300 miles, Mode: Train\n    Connection airConnection(1000, \"Air\");     // Distance: 1000 miles, Mode: Air\n    Connection waterConnection(400, \"Water\");  // Distance: 400 miles,  Mode: Water\n    // Add edges (connections) between states\n    americaNetwork.addEdge(california, texas, roadConnection, false);   // California \u003c-\u003e Texas (Road)\n    americaNetwork.addEdge(florida, newYork, trainConnection, false);  // Florida \u003c-\u003e New York (Train)\n    americaNetwork.addEdge(texas, florida, airConnection, true);       // Texas \u003c-\u003e Florida (Air)\n    americaNetwork.addEdge(california, florida, waterConnection, true); // California -\u003e Florida (water)\n    // Print details of the states and connections\n    std::cout \u003c\u003c \"American States and Connections:\" \u003c\u003c std::endl;\n    std::vector\u003cState\u003e states = americaNetwork.getVertices();\n    for (const State \u0026st : states)\n    {\n        for (const State \u0026st2 : states)\n        {\n            if (americaNetwork(st, st2))\n            {\n                Connection edgeValue = americaNetwork.getEdgeValue(st, st2);\n                std::cout \u003c\u003c \"Edge Connection between \" \u003c\u003c st.stateName \u003c\u003c \" and \" \u003c\u003c st2.stateName \u003c\u003c \"\\n\";\n                std::cout \u003c\u003c \"Distance: \" \u003c\u003c edgeValue.distance \u003c\u003c \"\\n\";\n                std::cout \u003c\u003c \"Transport: \" \u003c\u003c edgeValue.transportMode \u003c\u003c \"\\n\";\n            }\n        }\n    }\n\n    return 0;\n}\n\n```\n# Contributions\nIf you'd like to contribute anything, any new feature, work on required features or submit a bug fix make sure to read the [contributing](https://github.com/SharonIV0x86/Appledore/blob/main/CONTRIBUTING.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsharoniv0x86%2Fappledore","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsharoniv0x86%2Fappledore","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsharoniv0x86%2Fappledore/lists"}