Menu

[94f52a]: / key_value.hpp  Maximize  Restore  History

Download this file

65 lines (47 with data), 1.9 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#ifndef CHILON_KEY_VALUE_HPP
#define CHILON_KEY_VALUE_HPP
#include <chilon/print.hpp>
#include <utility>
namespace chilon {
struct key_unique {};
struct key_merge {};
// TODO: struct key_overwrite {};
template <class K, class V, class A = key_unique>
struct key_value : std::pair<K, V> {
typedef std::pair<K, V> base;
typedef A append_handler;
key_value(key_value<K, V, A>&& rhs) : base(std::move(rhs)) {}
key_value(key_value<K, V, A> const& rhs) : base(rhs) {}
template <class T, class U>
key_value(T&& k, U&& v)
: base(std::forward<T>(k), std::forward<U>(v)) {}
key_value() {}
};
template <class A, class K, class V>
auto make_key_value(K&& k, V&& v) CHILON_RETURN(
key_value<typename std::remove_reference<K>::type,
typename std::remove_reference<V>::type, A>(std::forward<K>(k), std::forward<V>(v)))
template <class K, class V>
auto make_key_value(K&& k, V&& v) CHILON_RETURN(
key_value<typename std::remove_reference<K>::type,
typename std::remove_reference<V>::type>(std::forward<K>(k), std::forward<V>(v)))
template <class O, class U, class V, class A, class... T>
inline void print_args(int const indent, O& stream,
key_value<U, V, A> const& head)
{
print_args(indent, stream, head.first, ": ", head.second);
}
template <class T, class D = void>
struct get_key : meta::type_<D> {};
template <class K, class V, class A, class D>
struct get_key<key_value<K,V,A>, D> : meta::type_<K> {};
template <class T, class D = void>
struct get_value : meta::type_<D> {};
template <class K, class V, class A, class D>
struct get_value<key_value<K,V,A>, D> : meta::type_<V> {};
template <class T, class D = void>
struct get_appender : meta::type_<D> {};
template <class K, class V, class A, class D>
struct get_appender<key_value<K,V,A>, D> : meta::type_<A> {};
}
#endif
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.