Elements

#include<hysj/graphs/elements.hpp>

In namespace graphs:

enum class element_tag
enumerator vertex
enumerator edge
Names the elements of a graph, vertices and edges.

auto direction(const auto &graph, auto id)
Hook for computing the direction of an edge.

auto element_ids(auto element_tag, const auto &graph)
Hook for computing the element ids of a graph.

Shorthands

unspecified vertex_ids = bind(element_ids, vertex_tag)
unspecified edge_ids = bind(element_ids, edge_tag)

auto element_count(auto element_tag, const auto &graph)
Hook for computing the number of elements in a graph.

Shorthands

unspecified order = bind(element_count, in_tag)
unspecified size = bind(element_count, out_tag)

auto swap(auto element_tag, const auto &graph, auto id0, auto id1)
Hook for swapping the relations of elements id0 and id1.

template<typename G, element_tag T>
struct traits::element_id_trait
template<typename G, element_tag T>
using traits::element_id
Trait for computing the id-type of a given element-type.

template<typename G, element_tag T>
concept concepts::elements
Whether G is a container of elements of tag T.
Let
G g
Requires

typename traits::element_id<G, T> graphs::element_ids(constant_t<T>{}, g) graphs::element_count(constant_t<T>{}, g)

Builtin

#include<hysj/graphs/builtin/element_ids.hpp>

In namespace builtin:

template<element_tag T>
struct basic_element_id
static constexpr auto tag = constant_c<T>
natural value
Implements a basic element id.

Shorthands

using vertex_id = basic_element_id<element_tag::vertex>
using edge_id = basic_element_id<element_tag::edge>

struct dynamically_directed_edge_id
edge_id id
direction_tag direction

template<direction_tag direction>
struct statically_directed_edge_id
edge_id id