7#ifndef GRAPHDOM_ADJ_LIST_BASE_ITERATOR_H
8#define GRAPHDOM_ADJ_LIST_BASE_ITERATOR_H
13#include "vertex_container.h"
16 template <
typename VertexType>
17 template <
typename VertexContainerPo
interType>
18 class graph<VertexType>::adj_list_base_iterator {
21 std::is_same< VertexContainerPointerType , graph<VertexType>::vertex_container* >::value ||
22 std::is_same< VertexContainerPointerType , const graph<VertexType>::vertex_container* >::value
24 "The typename 'VertexContainerPointerType' of 'graphdom::graph<VertexType>::adj_list_base_iterator<VertexContainerPointerType>' class must be a pointer to graphdom::graph<VertexType>::vertex_container"
27 ~adj_list_base_iterator() =
default;
30 [[nodiscard]]
constexpr bool operator==(
const adj_list_base_iterator<K>& other_iterator)
const;
32 [[nodiscard]]
constexpr bool operator!=(
const adj_list_base_iterator<K>& other_iterator)
const;
37 friend class graph<VertexType>::adj_list_base_iterator;
39 friend class graph<VertexType>::base_adj_list;
41 using special_begin_end_indicator = std::monostate;
44 special_begin_end_indicator,
45 typename graph<VertexType>::adj_set<graph<VertexType>::vertex_container*>::iterator,
46 typename graph<VertexType>::adj_set<const graph<VertexType>::vertex_container*>::iterator
49 adj_list_base_iterator();
50 adj_list_base_iterator(const adj_list_base_iterator&) = default;
51 adj_list_base_iterator(
52 const graph<VertexType>* iterator_owner_pointer,
53 graph<VertexType>::graph_edges_type iterator_owner_graph_edges_type,
54 VertexContainerPointerType edge_begin_point_vertex_container,
55 graph<VertexType>::edges_type_selection_type edges_type_restriction,
56 graphdom::edge_type inner_iterator_edge_current_type
58 adj_list_base_iterator(
59 const graph<VertexType>* iterator_owner_pointer,
60 graph<VertexType>::graph_edges_type iterator_owner_graph_edges_type,
61 VertexContainerPointerType edge_begin_point_vertex_container,
62 graph<VertexType>::edges_type_selection_type edges_type_restriction,
63 graphdom::edge_type inner_iterator_edge_current_type,
64 const typename graph<VertexType>::adj_set<graph<VertexType>::vertex_container*>::iterator& inner_iterator
66 adj_list_base_iterator(
67 const graph<VertexType>* iterator_owner_pointer,
68 graph<VertexType>::graph_edges_type iterator_owner_graph_edges_type,
69 VertexContainerPointerType edge_begin_point_vertex_container,
70 graph<VertexType>::edges_type_selection_type edges_type_restriction,
71 graphdom::edge_type inner_iterator_edge_current_type,
72 const typename graph<VertexType>::adj_set<const graph<VertexType>::vertex_container*>::iterator& inner_iterator
75 constexpr adj_list_base_iterator& internal_single_increment();
77 const graph<VertexType>* iterator_owner_graph;
78 graph<VertexType>::graph_edges_type iterator_owner_graph_edges_type;
79 VertexContainerPointerType edge_begin_point_vertex_container;
80 graph<VertexType>::edges_type_selection_type edges_type_restriction;
82 iterator_type inner_iterator;
85 constexpr adj_list_base_iterator& specialized_internal_single_increment();
88 constexpr graph<VertexType>::adj_set<K>* get_adj_set_if_accessible(graphdom::edge_type edge_type) const;
92#include "impl/adj_list_base_iterator.h"
Every graph created using this library is an instance of a concrete class publicly derived,...
Definition graph.h:43
edge_type
The enumerated type whose values represent the two types of edges of a graph.
Definition graph.h:21