Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,12 @@
*.out
*.app

# ignore the build folder contents from git
# ignore the build folder contents
build/
# ignore ctest files
Testing/
# ignore cmake generated files
include/CXXGraph/CXXGraphConfig.h
# ignore the packaging folder contents from git
packaging/
# ignore vscode files
Expand Down
55 changes: 54 additions & 1 deletion CXXGraphConfig.h.in
Original file line number Diff line number Diff line change
@@ -1,4 +1,57 @@
// the configured options and settings for CXXGraph
#define CXXGraph_VERSION_MAJOR @CXXGraph_VERSION_MAJOR@
#define CXXGraph_VERSION_MINOR @CXXGraph_VERSION_MINOR@
#define CXXGraph_VERSION_PATCH @CXXGraph_VERSION_PATCH@
#define CXXGraph_VERSION_PATCH @CXXGraph_VERSION_PATCH@

#pragma once
#if defined(CXXGraph_CUSTOM_MAP_HEADER)
// Very custom types, not explictly supported.
// Should be usable as a replacement std::unordered_map and set.
# if defined(CXXGraph_NO_CUSTOM_MAP_HEADER_INCLUDE)
// User does not want us to include the custom map header
// They might not want to define lots of macros
// They will have to do all the includes themselves
# elif !__has_include( CXXGraph_CUSTOM_MAP_HEADER )
# error "CXXGraph_CUSTOM_MAP_HEADER is defined but is not a valid include path. \
Use CXXGraph_NO_CUSTOM_MAP_HEADER_INCLUDE to disable this check"
# else
// If one include is fine, assume the rest are also fine.
# include CXXGraph_CUSTOM_MAP_HEADER
# include CXXGraph_CUSTOM_SET_HEADER
# include CXXGraph_CUSTOM_ORDERED_SET_HEADER
# include CXXGraph_CUSTOM_ORDERED_MAP_HEADER
// Users are expected to declare types in our namespace (saves us gessing what they are)
# endif
#elif __has_include(<frozen/set.h>)
// Frozen library is available, use it for better performance
# include <frozen/set.h>
# include <frozen/unordered_set.h>
# include <frozen/unordered_map.h>
# include <frozen/map.h>

namespace CXXGraph {
template<typename Key, typename Value, typename... Args>
using Map = frozen::unordered_map<Key, Value, Args...>;
template<typename Key, typename Value, typename... Args>
using OrderedMap = frozen::map<Key, Value, Args...>;
template<typename Key, typename... Args>
using OrderedSet = frozen::set<Key, Args...>;
template<typename Key, typename... Args>
using Set = frozen::set<Key, Args...>;
}
#else
# include <unordered_map>
# include <set>
# include <unordered_set>
# include <map>
namespace CXXGraph {
template<typename Key, typename Value, typename... Args>
using Map = std::unordered_map<Key, Value, Args...>;
template<typename Key, typename Value, typename... Args>
using OrderedMap = std::map<Key, Value, Args...>;
template<typename Key, typename... Args>
using Set = std::unordered_set<Key, Args...>;
template<typename Key, typename... Args>
using OrderedSet = std::set<Key, Args...>;
}
#endif
6 changes: 3 additions & 3 deletions benchmark/BFS_BM.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ static void BFS_X(benchmark::State &state) {
CXXGraph::Graph<int> g;
auto range_start = edges.begin();
auto range_end = edges.find(state.range(0));
std::unordered_map<unsigned long, CXXGraph::Edge<int> *> edgesX;
CXXGraph::Map<unsigned long, CXXGraph::Edge<int> *> edgesX;
edgesX.insert(range_start, range_end);
for (auto e : edgesX) {
g.addEdge(&(*e.second));
Expand Down Expand Up @@ -39,7 +39,7 @@ static void PSEUDO_CONCURRENCY_BFS_X(benchmark::State &state) {
CXXGraph::Graph<int> g;
auto range_start = edges.begin();
auto range_end = edges.find(state.range(0));
std::unordered_map<unsigned long, CXXGraph::Edge<int> *> edgesX;
CXXGraph::Map<unsigned long, CXXGraph::Edge<int> *> edgesX;
edgesX.insert(range_start, range_end);
for (auto e : edgesX) {
g.addEdge(&(*e.second));
Expand Down Expand Up @@ -70,7 +70,7 @@ static void CONCURRENCY_BFS_X(benchmark::State &state) {
CXXGraph::Graph<int> g;
auto range_start = edges.begin();
auto range_end = edges.find(state.range(0));
std::unordered_map<unsigned long, CXXGraph::Edge<int> *> edgesX;
CXXGraph::Map<unsigned long, CXXGraph::Edge<int> *> edgesX;
edgesX.insert(range_start, range_end);
for (auto e : edgesX) {
g.addEdge(&(*e.second));
Expand Down
2 changes: 1 addition & 1 deletion benchmark/BellmanFord_BM.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ static void BellmanFord_X(benchmark::State &state) {
CXXGraph::Graph<int> g;
auto range_start = edges.begin();
auto range_end = edges.find(state.range(0));
std::unordered_map<unsigned long, CXXGraph::Edge<int> *> edgesX;
CXXGraph::Map<unsigned long, CXXGraph::Edge<int> *> edgesX;
edgesX.insert(range_start, range_end);
for (auto e : edgesX) {
g.addEdge(&(*e.second));
Expand Down
2 changes: 1 addition & 1 deletion benchmark/Boruvka_BM.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ static void Boruvka_X(benchmark::State &state) {
CXXGraph::Graph<int> g;
auto range_start = edges.begin();
auto range_end = edges.find(state.range(0));
std::unordered_map<unsigned long, CXXGraph::Edge<int> *> edgesX;
CXXGraph::Map<unsigned long, CXXGraph::Edge<int> *> edgesX;
edgesX.insert(range_start, range_end);
for (auto e : edgesX) {
g.addEdge(&(*e.second));
Expand Down
4 changes: 2 additions & 2 deletions benchmark/Connectivity_BM.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ static void Connectivity_X(benchmark::State &state) {
CXXGraph::Graph<int> g;
auto range_start = edges.begin();
auto range_end = edges.find(state.range(0));
std::unordered_map<unsigned long, CXXGraph::Edge<int> *> edgesX;
CXXGraph::Map<unsigned long, CXXGraph::Edge<int> *> edgesX;
edgesX.insert(range_start, range_end);
for (auto e : edgesX) {
g.addEdge(&(*e.second));
Expand Down Expand Up @@ -36,7 +36,7 @@ static void StrongConnectivity_X(benchmark::State &state) {
CXXGraph::Graph<int> g;
auto range_start = edges.begin();
auto range_end = edges.find(state.range(0));
std::unordered_map<unsigned long, CXXGraph::Edge<int> *> edgesX;
CXXGraph::Map<unsigned long, CXXGraph::Edge<int> *> edgesX;
edgesX.insert(range_start, range_end);
for (auto e : edgesX) {
g.addEdge(&(*e.second));
Expand Down
4 changes: 2 additions & 2 deletions benchmark/CycleCheck_BM.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ static void CycleCheckBFS_X(benchmark::State &state) {
CXXGraph::Graph<int> g;
auto range_start = edges.begin();
auto range_end = edges.find(state.range(0));
std::unordered_map<unsigned long, CXXGraph::Edge<int> *> edgesX;
CXXGraph::Map<unsigned long, CXXGraph::Edge<int> *> edgesX;
edgesX.insert(range_start, range_end);
for (auto e : edgesX) {
g.addEdge(&(*e.second));
Expand Down Expand Up @@ -36,7 +36,7 @@ static void CycleCheckDFS_X(benchmark::State &state) {
CXXGraph::Graph<int> g;
auto range_start = edges.begin();
auto range_end = edges.find(state.range(0));
std::unordered_map<unsigned long, CXXGraph::Edge<int> *> edgesX;
CXXGraph::Map<unsigned long, CXXGraph::Edge<int> *> edgesX;
edgesX.insert(range_start, range_end);
for (auto e : edgesX) {
g.addEdge(&(*e.second));
Expand Down
2 changes: 1 addition & 1 deletion benchmark/DFS_BM.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ static void DFS_X(benchmark::State &state) {
CXXGraph::Graph<int> g;
auto range_start = edges.begin();
auto range_end = edges.find(state.range(0));
std::unordered_map<unsigned long, CXXGraph::Edge<int> *> edgesX;
CXXGraph::Map<unsigned long, CXXGraph::Edge<int> *> edgesX;
edgesX.insert(range_start, range_end);
for (auto e : edgesX) {
g.addEdge(&(*e.second));
Expand Down
2 changes: 1 addition & 1 deletion benchmark/Dial_BM.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ static void Dial_X(benchmark::State &state) {
CXXGraph::Graph<int> g;
auto range_start = edges.begin();
auto range_end = edges.find(state.range(0));
std::unordered_map<unsigned long, CXXGraph::Edge<int> *> edgesX;
CXXGraph::Map<unsigned long, CXXGraph::Edge<int> *> edgesX;
edgesX.insert(range_start, range_end);
for (auto e : edgesX) {
g.addEdge(&(*e.second));
Expand Down
2 changes: 1 addition & 1 deletion benchmark/Dijkstra_BM.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ static void Dijkstra_X(benchmark::State &state) {
CXXGraph::Graph<int> g;
auto range_start = edges.begin();
auto range_end = edges.find(state.range(0));
std::unordered_map<unsigned long, CXXGraph::Edge<int> *> edgesX;
CXXGraph::Map<unsigned long, CXXGraph::Edge<int> *> edgesX;
edgesX.insert(range_start, range_end);
for (auto e : edgesX) {
g.addEdge(&(*e.second));
Expand Down
2 changes: 1 addition & 1 deletion benchmark/EulerPath_BM.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ static void EulerPath_X(benchmark::State &state) {
CXXGraph::Graph<int> g;
auto range_start = undirectedEdges.begin();
auto range_end = undirectedEdges.find(state.range(0));
std::unordered_map<unsigned long, CXXGraph::Edge<int> *> edgesX;
CXXGraph::Map<long, CXXGraph::Edge<int> *> edgesX;
edgesX.insert(range_start, range_end);
for (auto e : edgesX) {
g.addEdge(&(*e.second));
Expand Down
2 changes: 1 addition & 1 deletion benchmark/FordFulkerson_BM.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ static void FordFulkerson_X(benchmark::State &state) {
CXXGraph::Graph<int> g;
auto range_start = edges.begin();
auto range_end = edges.find(state.range(0));
std::unordered_map<unsigned long, CXXGraph::Edge<int> *> edgesX;
CXXGraph::Map<unsigned long, CXXGraph::Edge<int> *> edgesX;
edgesX.insert(range_start, range_end);
for (auto e : edgesX) {
g.addEdge(&(*e.second));
Expand Down
2 changes: 1 addition & 1 deletion benchmark/GraphSlicing_BM.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ static void GraphSlicing_X(benchmark::State &state) {
CXXGraph::Graph<int> g;
auto range_start = edges.begin();
auto range_end = edges.find(state.range(0));
std::unordered_map<unsigned long, CXXGraph::Edge<int> *> edgesX;
CXXGraph::Map<unsigned long, CXXGraph::Edge<int> *> edgesX;
edgesX.insert(range_start, range_end);
for (auto e : edgesX) {
g.addEdge(&(*e.second));
Expand Down
8 changes: 4 additions & 4 deletions benchmark/Graph_BM.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ static void AddEdgeX(benchmark::State &state) {
CXXGraph::Graph<int> g;
auto range_start = edges.begin();
auto range_end = edges.find(state.range(0));
std::unordered_map<unsigned long, CXXGraph::Edge<int> *> edgesX;
CXXGraph::Map<unsigned long, CXXGraph::Edge<int> *> edgesX;
edgesX.insert(range_start, range_end);
for (auto _ : state) {
for (auto e : edgesX) {
Expand Down Expand Up @@ -58,7 +58,7 @@ static void getEdgeSetX(benchmark::State &state) {
CXXGraph::Graph<int> g;
auto range_start = edges.begin();
auto range_end = edges.find(state.range(0));
std::unordered_map<unsigned long, CXXGraph::Edge<int> *> edgesX;
CXXGraph::Map<unsigned long, CXXGraph::Edge<int> *> edgesX;
edgesX.insert(range_start, range_end);
for (auto e : edgesX) {
g.addEdge(&(*e.second));
Expand All @@ -78,7 +78,7 @@ static void getNodeSetX(benchmark::State &state) {
CXXGraph::Graph<int> g;
auto range_start = edges.begin();
auto range_end = edges.find(state.range(0));
std::unordered_map<unsigned long, CXXGraph::Edge<int> *> edgesX;
CXXGraph::Map<unsigned long, CXXGraph::Edge<int> *> edgesX;
edgesX.insert(range_start, range_end);
for (auto e : edgesX) {
g.addEdge(&(*e.second));
Expand Down Expand Up @@ -116,7 +116,7 @@ static void getAdjMatrixX(benchmark::State &state) {
CXXGraph::Graph<int> g;
auto range_start = undirectedEdges.begin();
auto range_end = undirectedEdges.find(state.range(0));
std::unordered_map<unsigned long, CXXGraph::UndirectedEdge<int> *> edgesX;
CXXGraph::Map<unsigned long, CXXGraph::UndirectedEdge<int> *> edgesX;
edgesX.insert(range_start, range_end);
for (auto e : edgesX) {
g.addEdge(&(*e.second));
Expand Down
2 changes: 1 addition & 1 deletion benchmark/Kosaraju_BM.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ static void Kosaraju_X(benchmark::State &state) {
CXXGraph::Graph<int> g;
auto range_start = edges.begin();
auto range_end = edges.find(state.range(0));
std::unordered_map<unsigned long, CXXGraph::Edge<int> *> edgesX;
CXXGraph::Map<unsigned long, CXXGraph::Edge<int> *> edgesX;
edgesX.insert(range_start, range_end);
for (auto e : edgesX) {
g.addEdge(&(*e.second));
Expand Down
2 changes: 1 addition & 1 deletion benchmark/Kruskal_BM.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ static void Kruskal_X(benchmark::State &state) {
CXXGraph::Graph<int> g;
auto range_start = edges.begin();
auto range_end = edges.find(state.range(0));
std::unordered_map<unsigned long, CXXGraph::Edge<int> *> edgesX;
CXXGraph::Map<unsigned long, CXXGraph::Edge<int> *> edgesX;
edgesX.insert(range_start, range_end);
for (auto e : edgesX) {
g.addEdge(&(*e.second));
Expand Down
8 changes: 4 additions & 4 deletions benchmark/Partition_BM.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ static void PartitionHDRF_X(benchmark::State &state) {
CXXGraph::Graph<int> g;
auto range_start = edges.begin();
auto range_end = edges.find(state.range(0));
std::unordered_map<unsigned long, CXXGraph::Edge<int> *> edgesX;
CXXGraph::Map<unsigned long, CXXGraph::Edge<int> *> edgesX;
edgesX.insert(range_start, range_end);
for (auto e : edgesX) {
g.addEdge(&(*e.second));
Expand Down Expand Up @@ -38,7 +38,7 @@ static void PartitionEBVC_X(benchmark::State &state) {
CXXGraph::Graph<int> g;
auto range_start = edges.begin();
auto range_end = edges.find(state.range(0));
std::unordered_map<unsigned long, CXXGraph::Edge<int> *> edgesX;
CXXGraph::Map<unsigned long, CXXGraph::Edge<int> *> edgesX;
edgesX.insert(range_start, range_end);
for (auto e : edgesX) {
g.addEdge(&(*e.second));
Expand Down Expand Up @@ -70,7 +70,7 @@ static void PartitionGVC_X(benchmark::State &state) {
CXXGraph::Graph<int> g;
auto range_start = edges.begin();
auto range_end = edges.find(state.range(0));
std::unordered_map<unsigned long, CXXGraph::Edge<int> *> edgesX;
CXXGraph::Map<unsigned long, CXXGraph::Edge<int> *> edgesX;
edgesX.insert(range_start, range_end);
for (auto e : edgesX) {
g.addEdge(&(*e.second));
Expand Down Expand Up @@ -102,7 +102,7 @@ static void PartitionEBV_X(benchmark::State &state) {
CXXGraph::Graph<int> g;
auto range_start = edges.begin();
auto range_end = edges.find(state.range(0));
std::unordered_map<unsigned long, CXXGraph::Edge<int> *> edgesX;
CXXGraph::Map<unsigned long, CXXGraph::Edge<int> *> edgesX;
edgesX.insert(range_start, range_end);
for (auto e : edgesX) {
g.addEdge(&(*e.second));
Expand Down
2 changes: 1 addition & 1 deletion benchmark/Prim_BM.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ static void Prim_X(benchmark::State &state) {
CXXGraph::Graph<int> g;
auto range_start = edges.begin();
auto range_end = edges.find(state.range(0));
std::unordered_map<unsigned long, CXXGraph::Edge<int> *> edgesX;
CXXGraph::Map<unsigned long, CXXGraph::Edge<int> *> edgesX;
edgesX.insert(range_start, range_end);
for (auto e : edgesX) {
g.addEdge(&(*e.second));
Expand Down
2 changes: 1 addition & 1 deletion benchmark/TopologicalSort_BM.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ static void TopologicalSort_X(benchmark::State &state) {
CXXGraph::Graph<int> g;
auto range_start = edges.begin();
auto range_end = edges.find(state.range(0));
std::unordered_map<unsigned long, CXXGraph::Edge<int> *> edgesX;
CXXGraph::Map<unsigned long, CXXGraph::Edge<int> *> edgesX;
edgesX.insert(range_start, range_end);
for (auto e : edgesX) {
g.addEdge(&(*e.second));
Expand Down
8 changes: 5 additions & 3 deletions include/CXXGraph/CXXGraph.hpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#ifndef __CXXGRAPH_H__
#define __CXXGRAPH_H__
#ifndef CXXGRAPH_H_
#define CXXGRAPH_H_

#pragma once

#include "CXXGraph/CXXGraphConfig.h"
#include "CXXGraph/Edge/DirectedEdge.h"
Expand All @@ -25,4 +27,4 @@
#include "CXXGraph/Partitioning/PartitioningStats.hpp"
#include "CXXGraph/Partitioning/Record.hpp"

#endif // __CXXGRAPH_H__
#endif // CXXGRAPH_H_
4 changes: 0 additions & 4 deletions include/CXXGraph/CXXGraphConfig.h

This file was deleted.

2 changes: 1 addition & 1 deletion include/CXXGraph/Graph/Algorithm/BellmanFord_impl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ const BellmanFordResult Graph<T>::bellmanford(const Node<T> &source,
return result;
}
// setting all the distances initially to INF_DOUBLE
std::unordered_map<shared<const Node<T>>, double, nodeHash<T>> dist,
CXXGraph::Map<shared<const Node<T>>, double, nodeHash<T>> dist,
currentDist;
// n denotes the number of vertices in graph
auto n = nodeSet.size();
Expand Down
2 changes: 1 addition & 1 deletion include/CXXGraph/Graph/Algorithm/BestFirstSearch_impl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ const std::vector<Node<T>> Graph<T>::concurrency_breadth_first_search(
return bfs_result;
}

std::unordered_map<shared<const Node<T>>, size_t, nodeHash<T>> node_to_index;
CXXGraph::Map<shared<const Node<T>>, size_t, nodeHash<T>> node_to_index;
for (const auto &node : nodeSet) {
node_to_index[node] = node_to_index.size();
}
Expand Down
Loading
Loading