DG-CPP 0.1.0
Directed Graph in C++
edge.hpp
Go to the documentation of this file.
1#ifndef _DG_EDGE_HPP_
2#define _DG_EDGE_HPP_
3
4#include "common.hpp"
5#include <algorithm>
6#include <concepts>
7#include <map>
8#include <type_traits>
9
10namespace dg {
11template <typename EdgeT>
12struct Edge {
13 EdgeT data;
14 static inline constexpr bool HAS_DATA = true;
16 Edge() = default;
17
18 Edge(const EdgeT& data_);
19
20 operator EdgeT&();
21
22 operator EdgeT() const;
23};
24
25template <>
26struct Edge<void> {
27 const void* data = nullptr;
28 static inline constexpr bool HAS_DATA = false;
30 Edge() = default;
31};
32
33template <typename EdgeT>
34Edge<EdgeT>::Edge(const EdgeT& data_) : data(data_) {}
35
36template <typename EdgeT>
38 return data;
39}
40
41template <typename EdgeT>
42Edge<EdgeT>::operator EdgeT() const {
43 return data;
44}
45
46namespace _protected {
47template <IDVT IDT, EdgeVT EdgeT>
48static inline std::map<IDT, Edge<EdgeT>> mapAsEdgeMap(const std::map<IDT, EdgeT>& map) {
49 std::map<IDT, Edge<EdgeT>> transformed;
50 std::transform(map.begin(), map.end(), std::inserter(transformed, transformed.end()),
51 [](const auto& elem) { return std::make_pair(elem.first, static_cast<Edge<EdgeT>>(elem.second)); });
52 return transformed;
53}
54
55} // namespace _protected
56
57} // namespace dg
58
59#endif
Common Utilities for DG-CPP.
static std::map< IDT, Edge< EdgeT > > mapAsEdgeMap(const std::map< IDT, EdgeT > &map)
Definition: edge.hpp:48
Directed Graph namespace.
Definition: base.hpp:35
Definition: edge.hpp:12
EdgeT data
Definition: edge.hpp:13
static constexpr bool HAS_DATA
Definition: edge.hpp:14
Edge()=default