|
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 &other) |
|
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.