GraphDom
Loading...
Searching...
No Matches
labeled_vertex_multiset_graph.h
1/*
2 * Copyright 2026 Michele Comparini
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef GRAPHDOM_LABELED_VERTEX_MULTISET_GRAPH_H
8#define GRAPHDOM_LABELED_VERTEX_MULTISET_GRAPH_H
9
10#include <utility>
11
12#include "labeled_vertex_graph.h"
13
14namespace graphdom {
16
19 template <
20 typename VertexType,
21 typename VertexLabelType,
22 typename VertexLabellerType = default_vertex_labeller<VertexType,VertexLabelType>
23 >
24 class labeled_vertex_multiset_graph : virtual public labeled_vertex_graph<VertexType,VertexLabelType>, virtual public multiset_graph<VertexType> {
25 public:
26 labeled_vertex_multiset_graph();
27 explicit labeled_vertex_multiset_graph(const VertexLabellerType&);
28 explicit labeled_vertex_multiset_graph(VertexLabellerType&&);
29
31 ~labeled_vertex_multiset_graph() override = default;
32
33 [[nodiscard]] constexpr const VertexLabellerType& get_vertices_labeller() const;
34
35 using multiset_graph<VertexType>::insert_vertex;
36
43 [[nodiscard]] typename multiset_graph<VertexType>::vertex_handle insert_vertex(const VertexType& v_core) final;
44
51 [[nodiscard]] typename multiset_graph<VertexType>::vertex_handle insert_vertex(VertexType&& v_core) final;
52
60 [[nodiscard]] virtual typename multiset_graph<VertexType>::vertex_handle insert_vertex(const VertexType& v_core, const VertexLabelType& vertex_label) = 0;
61
69 [[nodiscard]] virtual typename multiset_graph<VertexType>::vertex_handle insert_vertex(const VertexType& v_core, VertexLabelType&& vertex_label) = 0;
70
78 [[nodiscard]] virtual typename multiset_graph<VertexType>::vertex_handle insert_vertex(VertexType&& v_core, const VertexLabelType& vertex_label) = 0;
79
87 [[nodiscard]] virtual typename multiset_graph<VertexType>::vertex_handle insert_vertex(VertexType&& v_core, VertexLabelType&& vertex_label) = 0;
88 private:
89 VertexLabellerType vertices_labeller;
90 };
91}
92
93#include "impl/labeled_vertex_multiset_graph.h"
94
95#endif //GRAPHDOM_LABELED_VERTEX_MULTISET_GRAPH_H
This class template is the default vertex labeller used by all labeled-vertex graphs if no user-speci...
Definition labeled_vertex_graph.h:53
Every labeled-vertex graph created using this library is an instance of a concrete class publicly der...
Definition labeled_vertex_graph.h:21
~labeled_vertex_multiset_graph() override=default
To be polymorphic, this class has a virtual destructor.
virtual multiset_graph< VertexType >::vertex_handle insert_vertex(const VertexType &v_core, VertexLabelType &&vertex_label)=0
virtual multiset_graph< VertexType >::vertex_handle insert_vertex(VertexType &&v_core, VertexLabelType &&vertex_label)=0
virtual multiset_graph< VertexType >::vertex_handle insert_vertex(const VertexType &v_core, const VertexLabelType &vertex_label)=0
multiset_graph< VertexType >::vertex_handle insert_vertex(const VertexType &v_core) final
Definition labeled_vertex_multiset_graph.h:27
virtual multiset_graph< VertexType >::vertex_handle insert_vertex(VertexType &&v_core, const VertexLabelType &vertex_label)=0
Every valid instance of this class can be used to identify a specific vertex of a multiset graph and ...
Definition multiset_graph_vertex_handle.h:31
Every multiset graph created using this library is an instance of a concrete class publicly derived,...
Definition multiset_graph.h:19
Definition adj_list.h:16