Sequoia
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Attributes | Protected Types | Protected Member Functions | Friends | List of all members
sequoia::maths::connectivity_base< Flavour, EdgeStorage > Class Template Reference

Graph connectivity_base, used as a building block for concrete graphs. More...

#include <Connectivity.hpp>

Inheritance diagram for sequoia::maths::connectivity_base< Flavour, EdgeStorage >:
sequoia::maths::connectivity< Flavour, EdgeStorage >

Public Types

using edge_storage_type = EdgeStorage
 
using edge_type = typename edge_storage_type::value_type
 
using edge_weight_type = typename edge_type::weight_type
 
using edge_meta_data_type = typename edge_type::meta_data_type
 
using edge_index_type = typename edge_type::index_type
 
using edge_init_type = edge_init_type_generator_t< edge_type >
 
using edges_initializer = std::initializer_list< std::initializer_list< edge_init_type > >
 
using size_type = typename edge_storage_type::size_type
 
using const_edge_iterator = typename edge_storage_type::const_partition_iterator
 
using const_reverse_edge_iterator = typename edge_storage_type::const_reverse_partition_iterator
 
using const_edges_range = std::ranges::subrange< const_edge_iterator >
 

Public Member Functions

constexpr connectivity_base (std::initializer_list< std::initializer_list< edge_init_type > > edges)
 
constexpr connectivity_base (const connectivity_base &other)
 
constexpr size_type order () const noexcept
 
constexpr size_type size () const noexcept
 
constexpr const_edge_iterator cbegin_edges (const edge_index_type node) const
 
constexpr const_edge_iterator cend_edges (const edge_index_type node) const
 
constexpr const_reverse_edge_iterator crbegin_edges (const edge_index_type node) const
 
constexpr const_reverse_edge_iterator crend_edges (const edge_index_type node) const
 
constexpr const_edges_range cedges (const edge_index_type node) const
 
template<class... Args>
requires initializable_from<edge_weight_type, Args...>
constexpr void set_edge_weight (const_edge_iterator citer, Args &&... args)
 
template<class... Args>
requires initializable_from<edge_weight_type, Args...>
constexpr void set_edge_weight (const_reverse_edge_iterator criter, Args &&... args)
 
template<std::invocable< edge_weight_type & > Fn>
requires (!std::is_empty_v<edge_weight_type>)
constexpr std::invoke_result_t< Fn, edge_weight_type & > mutate_edge_weight (const_edge_iterator citer, Fn fn)
 
template<std::invocable< edge_weight_type & > Fn>
requires (!std::is_empty_v<edge_weight_type>)
constexpr std::invoke_result_t< Fn, edge_weight_type & > mutate_edge_weight (const_reverse_edge_iterator criter, Fn fn)
 
template<class... Args>
requires initializable_from<edge_meta_data_type, Args...>
constexpr void set_edge_meta_data (const_edge_iterator citer, Args &&... args)
 
template<class... Args>
requires initializable_from<edge_meta_data_type, Args...>
constexpr void set_edge_meta_data (const_reverse_edge_iterator criter, Args &&... args)
 
template<std::invocable< edge_meta_data_type & > Fn>
requires (!std::is_empty_v<edge_meta_data_type>)
constexpr std::invoke_result_t< Fn, edge_meta_data_type & > mutate_edge_meta_data (const_edge_iterator citer, Fn fn)
 
template<std::invocable< edge_meta_data_type & > Fn>
requires (!std::is_empty_v<edge_meta_data_type>)
constexpr std::invoke_result_t< Fn, edge_meta_data_type & > mutate_edge_meta_data (const_reverse_edge_iterator criter, Fn fn)
 

Static Public Attributes

static constexpr auto npos {std::numeric_limits<edge_index_type>::max()}
 
static constexpr graph_flavour flavour {Flavour}
 

Protected Types

using edge_iterator = typename edge_storage_type::partition_iterator
 
using reverse_edge_iterator = typename edge_storage_type::reverse_partition_iterator
 
using edges_range = std::ranges::subrange< edge_iterator >
 

Protected Member Functions

template<alloc... Allocators>
requires (sizeof...(Allocators) > 0)
constexpr connectivity_base (const Allocators &... as)
 
template<alloc... Allocators>
requires (sizeof...(Allocators) > 0)
constexpr connectivity_base (edges_initializer edges, const Allocators &... as)
 
template<alloc... Allocators>
requires (sizeof...(Allocators) > 0)
constexpr connectivity_base (const connectivity_base &c, const Allocators &... as)
 
constexpr connectivity_base (connectivity_base &&) noexcept=default
 
template<alloc... Allocators>
constexpr connectivity_base (connectivity_base &&c, const Allocators &... as)
 
constexpr connectivity_baseoperator= (connectivity_base &&)=default
 
constexpr connectivity_baseoperator= (const connectivity_base &in)
 
template<alloc... Allocs>
requires ((sizeof...(Allocs) > 0) && (std::allocator_traits<Allocs>::propagate_on_container_copy_assignment::value && ...))
void reset (const Allocs &... allocs)
 
void swap (connectivity_base &rhs) noexcept(noexcept(std::ranges::swap(this->m_Edges, rhs.m_Edges)))
 
constexpr void swap_edges (edge_index_type node, edge_index_type i, edge_index_type j)
 
constexpr void swap_nodes (edge_index_type i, edge_index_type j)
 
auto get_edge_allocator () const
 
auto get_edge_allocator (partitions_allocator_tag) const
 
void reserve_nodes (const size_type size)
 
size_type node_capacity () const noexcept
 
void reserve_edges (const edge_index_type partition, const edge_index_type size)
 
void reserve_edges (const edge_index_type size)
 
size_type edges_capacity (const edge_index_type partition) const
 
size_type edges_capacity () const noexcept
 
void shrink_to_fit ()
 
constexpr edge_iterator begin_edges (const edge_index_type node)
 
constexpr edge_iterator end_edges (const edge_index_type node)
 
constexpr const_edge_iterator begin_edges (const edge_index_type node) const
 
constexpr const_edge_iterator end_edges (const edge_index_type node) const
 
constexpr reverse_edge_iterator rbegin_edges (const edge_index_type node)
 
constexpr reverse_edge_iterator rend_edges (const edge_index_type node)
 
constexpr const_reverse_edge_iterator rbegin_edges (const edge_index_type node) const
 
constexpr const_reverse_edge_iterator rend_edges (const edge_index_type node) const
 
constexpr edges_range edges (const edge_index_type node)
 
void add_node ()
 
size_type insert_node (const size_type node)
 
void erase_node (const size_type node)
 
template<class... Args>
requires (std::is_empty_v<edge_meta_data_type>&& initializable_from<edge_weight_type, Args...> && (is_directed(flavour) || std::is_copy_constructible_v<edge_type>))
void join (const edge_index_type node1, const edge_index_type node2, Args &&... args)
 
template<class... Args>
requires (!std::is_empty_v<edge_meta_data_type>&& initializable_from<edge_weight_type, Args...> && (is_directed(flavour) || std::is_copy_constructible_v<edge_type>))
void join (const edge_index_type node1, const edge_index_type node2, edge_meta_data_type meta1, edge_meta_data_type meta2, Args &&... args)
 
template<class... Args>
requires (std::is_empty_v<edge_meta_data_type> && initializable_from<edge_weight_type, Args...>&& is_embedded(flavour) && std::is_copy_constructible_v<edge_type>)
std::pair< const_edge_iterator, const_edge_iterator > insert_join (const_edge_iterator citer1, const_edge_iterator citer2, Args &&... args)
 
template<class... Args>
requires (!std::is_empty_v<edge_meta_data_type>, initializable_from<edge_weight_type, Args...>&& is_embedded(flavour) && std::is_copy_constructible_v<edge_type>)
std::pair< const_edge_iterator, const_edge_iterator > insert_join (const_edge_iterator citer1, const_edge_iterator citer2, edge_meta_data_type meta1, edge_meta_data_type meta2, Args &&... args)
 
template<class... Args>
requires (std::is_empty_v<edge_meta_data_type> && initializable_from<edge_weight_type, Args...>&& is_embedded(flavour) && std::is_copy_constructible_v<edge_type>)
std::pair< const_edge_iterator, const_edge_iterator > insert_join (const_edge_iterator citer1, const edge_index_type pos2, Args &&... args)
 
template<class... Args>
requires (!std::is_empty_v<edge_meta_data_type>, initializable_from<edge_weight_type, Args...>&& is_embedded(flavour) && std::is_copy_constructible_v<edge_type>)
std::pair< const_edge_iterator, const_edge_iterator > insert_join (const_edge_iterator citer1, const edge_index_type pos2, edge_meta_data_type meta1, edge_meta_data_type meta2, Args &&... args)
 
void erase_edge (const_edge_iterator citer)
 
void clear () noexcept
 
template<class Comp , class Proj = std::identity>
requires ((edge_type::flavour == edge_flavour::partial) && std::sortable<edge_iterator, Comp, Proj>)
constexpr void sort_edges (const_edge_iterator begin, const_edge_iterator end, Comp comp, Proj proj={})
 
template<class Comp , class Proj = std::identity>
requires ((edge_type::flavour == edge_flavour::partial) && std::sortable<edge_iterator, Comp, Proj>)
constexpr void sort_edges (const_edges_range r, Comp comp, Proj proj={})
 
template<class Comp , class Proj = std::identity>
requires ((edge_type::flavour == edge_flavour::partial) && merge_sortable<edge_iterator, Comp, Proj>)
constexpr void stable_sort_edges (const_edge_iterator begin, const_edge_iterator end, Comp comp, Proj proj={})
 
template<class Comp , class Proj = std::identity>
requires ((edge_type::flavour == edge_flavour::partial) && merge_sortable<edge_iterator, Comp, Proj>)
constexpr void stable_sort_edges (const_edges_range r, Comp comp, Proj proj={})
 

Friends

struct sequoia::assignment_helper
 
constexpr bool operator== (const connectivity_base &lhs, const connectivity_base &rhs) noexcept
 

Detailed Description

template<graph_flavour Flavour, class EdgeStorage>
class sequoia::maths::connectivity_base< Flavour, EdgeStorage >

Graph connectivity_base, used as a building block for concrete graphs.

This class is flexible, allowing for representations of many different flavours of connectivity. It is designed for inheritance by concrete graphs; therefore various methods, including the destructor, are protected. Both static and dynamic graphs are supported; for the purposes of the latter, the relevant protected methods of connectivity_base are allocator-aware.


The documentation for this class was generated from the following file: