HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
tagged_map.hpp
1// Copyright 2019 Pokitec
2// All rights reserved.
3
4#pragma once
5
6#include "TTauri/Foundation/string_tag.hpp"
7#include <typeinfo>
8#include <typeindex>
9#include <array>
10
11namespace tt {
12
13template<typename T, typename... Tags>
15private:
16 std::array<T, sizeof...(Tags)> data;
17
18public:
19 static constexpr size_t size() noexcept {
20 return sizeof...(Tags);
21 }
22
23 static std::type_index get_tag(size_t i) noexcept {
24 return tag_at_index<Tags...>(i);
25 }
26
27 static bool has(std::type_index tag) noexcept {
28 return has_tag<Tags...>(tag);
29 }
30
31 constexpr auto begin() noexcept {
32 return data.begin();
33 }
34
35 constexpr auto end() noexcept {
36 return data.end();
37 }
38
39 constexpr auto begin() const noexcept {
40 return data.begin();
41 }
42
43 constexpr auto end() const noexcept {
44 return data.end();
45 }
46
47
48 constexpr T &operator[](size_t i) noexcept {
49 return data[i];
50 }
51
52 constexpr T const &operator[](size_t i) const noexcept {
53 return data[i];
54 }
55
56 T &get(std::type_index tag) noexcept {
57 return data[index_of_tag<Tags...>(tag)];
58 }
59
60 T const &get(std::type_index tag) const noexcept {
61 return data[index_of_tag<Tags...>(tag)];
62 }
63
64 template<typename Tag>
65 constexpr T &get() noexcept {
66 return data[index_of_tag<Tag,Tags...>()];
67 }
68
69 template<typename Tag>
70 constexpr T const &get() const noexcept {
71 return data[index_of_tag<Tag,Tags...>()];
72 }
73};
74
75}
Definition tagged_map.hpp:14
T begin(T... args)
T end(T... args)