Fishnet 2.0.1
Framework for Graph-Based Analysis of GIS Vector Data
Loading...
Searching...
No Matches
GraphModel.hpp
Go to the documentation of this file.
1#pragma once
3#include <vector>
4#include <concepts>
5#include "Edge.hpp"
6
7namespace fishnet::graph {
8
9// template<typename P, typename N>
10// concept NodeBiPredicate = Node<N> && util::BiPredicate<P,N>;
11
12// template<typename F, typename N>
13// concept NodeBiOperator = Node<N> && util::BiOperator<F,N>;
14
22template<typename GraphImpl, typename E=GraphImpl::edge_type, typename N = E::node_type, typename A = GraphImpl::adj_container_type>
23concept Graph = Node<N> && Edge<E> &&
24requires(const GraphImpl & g,GraphImpl & g_mut, N n, std::vector<N> nodes, E e, std::vector<E> edges, std::vector<std::pair<N,N>> nodePairs){
25 {g.getAdjacencyContainer()} -> std::same_as<const A &>;
26 {g_mut.addNode(n)} -> std::same_as<bool>;
27 {g_mut.addNodes(nodes)} -> std::same_as<bool>;
28 {g.containsNode(n)} -> std::same_as<bool>;
29 {g_mut.removeNode(n)} -> std::same_as<void>;
30 {g_mut.addEdge(n,n)} -> std::same_as<bool>;
31 {g_mut.addEdge(e)} -> std::same_as<bool>;
32 {g_mut.addEdges(edges)} -> std::same_as<void>;
33 {g_mut.addEdges(nodePairs)} -> std::same_as<void>;
34 {g.containsEdge(n,n)} -> std::same_as<bool>;
35 {g.containsEdge(e)} -> std::same_as<bool>;
36 {g_mut.removeEdge(n,n)} -> std::same_as<void>;
37 {g_mut.removeEdge(e)} -> std::same_as<void>;
38 {g.makeEdge(n,n)} -> std::same_as<E>;
39 {g.getNodes()} -> util::forward_range_of<const N>;
40 {g.getEdges()} -> util::forward_range_of<E>;
41 {g.getNeighbours(n)} -> util::forward_range_of<const N>;
42 {g.getReachableFrom(n)} -> util::forward_range_of<const N>;
43 {g.getInboundEdges(n)} -> util::forward_range_of<E>;
44 {g.getOutboundEdges(n)} -> util::forward_range_of<E>;
45 {g_mut.clear()} -> std::same_as<void>;
46 typename GraphImpl::node_type;
47 typename GraphImpl::edge_type;
48 typename GraphImpl::adj_container_type;
49};
50}
Interface for an Edge.
Definition Edge.hpp:21
Interface for graph types. Every graph type has to inherit from AbstractGraph.
Definition GraphModel.hpp:23
Definition Edge.hpp:9
Definition CollectionConcepts.hpp:27
Definition AdjacencyContainer.hpp:4