Sequoia
|
Graph connectivity_base, used as a building block for concrete graphs. More...
#include <Connectivity.hpp>
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 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_base & | operator= (connectivity_base &&)=default |
constexpr connectivity_base & | operator= (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 |
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.