Fishnet 2.0.1
Framework for Graph-Based Analysis of GIS Vector Data
Loading...
Searching...
No Matches
Graph.hpp
Go to the documentation of this file.
1#pragma once
6#include "WeightedGraph.hpp"
7#include "BaseGraph.hpp"
8
9namespace fishnet::graph{
10
19template<Node N, util::HashFunction<N> Hash = std::hash<N>, util::BiPredicate<N> Equal = std::equal_to<N>, AdjacencyContainer<N> AdjContainer = AdjacencyMap<N,Hash,Equal>>
20using UndirectedGraph = graph::__impl::BaseGraph<UndirectedEdge<N,Hash,Equal>,AdjContainer>;
21
30template<Node N, util::HashFunction<N> Hash = std::hash<N>, util::BiPredicate<N> Equal = std::equal_to<N>, AdjacencyContainer<N> AdjContainer = AdjacencyMap<N,Hash,Equal>>
31using DirectedGraph = graph::__impl::BaseGraph<DirectedEdge<N,Hash,Equal>,AdjContainer>;
32
34public:
35 template<Node N, util::HashFunction<N> Hash = std::hash<N>,util::BiPredicate<N> Equal = std::equal_to<N>>
36 static auto UndirectedGraph(){
37 return graph::__impl::BaseGraph<UndirectedEdge<N,Hash,Equal>,AdjacencyMap<N,Hash,Equal>>();
38 }
39
40 static auto UndirectedGraph(AdjacencyContainer auto && adjContainer){
41 using AdjacencyContainer_t = std::remove_cvref_t<decltype(adjContainer)>;
42 using N = typename AdjacencyContainer_t::node_type;
43 using Hash = typename AdjacencyContainer_t::hash_function;
44 using Equal = typename AdjacencyContainer_t::equality_predicate;
45 return graph::__impl::BaseGraph<UndirectedEdge<N,Hash,Equal>,AdjacencyContainer_t>(std::move(adjContainer));
46 }
47
48
49 template<Node N, util::HashFunction<N> Hash = std::hash<N>,util::BiPredicate<N> Equal = std::equal_to<N>>
50 static auto DirectedGraph(){
51 return graph::__impl::BaseGraph<DirectedEdge<N,Hash,Equal>,AdjacencyMap<N,Hash,Equal>>();
52 }
53
54 static auto DirectedGraph(AdjacencyContainer auto && adjContainer){
55 using AdjacencyContainer_t = std::remove_cvref_t<decltype(adjContainer)>;
56 using N = typename AdjacencyContainer_t::node_type;
57 using Hash = typename AdjacencyContainer_t::hash_function;
58 using Equal = typename AdjacencyContainer_t::equality_predicate;
59 return graph::__impl::BaseGraph<DirectedEdge<N,Hash,Equal>,AdjacencyContainer_t>(std::move(adjContainer));
60 }
61
62 template<Node N, util::HashFunction<N> Hash = std::hash<N>,util::BiPredicate<N> Equal = std::equal_to<N>>
63 static auto DAG(){
65 }
66
67 static auto DAG(AdjacencyContainer auto && adjContainer){
68 return DirectedAcyclicGraph(DirectedGraph(std::move(adjContainer)));
69 }
70};
71}
Implementation of an Adjacency Map. Implements AdjacencyContainer.
Definition AdjacencyMap.hpp:18
Definition DirectedAcyclicGraph.hpp:9
Definition Graph.hpp:33
static auto UndirectedGraph()
Definition Graph.hpp:36
static auto DirectedGraph()
Definition Graph.hpp:50
static auto DAG(AdjacencyContainer auto &&adjContainer)
Definition Graph.hpp:67
static auto DAG()
Definition Graph.hpp:63
static auto DirectedGraph(AdjacencyContainer auto &&adjContainer)
Definition Graph.hpp:54
static auto UndirectedGraph(AdjacencyContainer auto &&adjContainer)
Definition Graph.hpp:40
Interface for an AdjacencyContainer.
Definition AdjacencyContainer.hpp:12
Definition AdjacencyContainer.hpp:4
graph::__impl::BaseGraph< DirectedEdge< N, Hash, Equal >, AdjContainer > DirectedGraph
Simple Directed Graph type.
Definition Graph.hpp:31
graph::__impl::BaseGraph< UndirectedEdge< N, Hash, Equal >, AdjContainer > UndirectedGraph
Simple Undirected Graph type.
Definition Graph.hpp:20