BitShares-Core  7.0.2
BitShares blockchain node software and command-line wallet software
typename.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <array>
4 #include <deque>
5 #include <map>
6 #include <set>
7 #include <string>
8 #include <vector>
9 
10 #include <fc/optional.hpp>
11 #include <fc/string.hpp>
13 
14 namespace fc {
15  template<typename...> class static_variant;
16  class value;
17  class exception;
18  namespace ip { class address; }
19 
20  template<typename... T> struct get_typename;
21 #if defined(__APPLE__) or defined(__OpenBSD__)
22  template<> struct get_typename<size_t> { static const char* name() { return "size_t"; } };
23 #endif
24  template<> struct get_typename<int32_t> { static const char* name() { return "int32_t"; } };
25  template<> struct get_typename<int64_t> { static const char* name() { return "int64_t"; } };
26  template<> struct get_typename<int16_t> { static const char* name() { return "int16_t"; } };
27  template<> struct get_typename<int8_t> { static const char* name() { return "int8_t"; } };
28  template<> struct get_typename<uint32_t> { static const char* name() { return "uint32_t"; } };
29  template<> struct get_typename<uint64_t> { static const char* name() { return "uint64_t"; } };
30  template<> struct get_typename<uint16_t> { static const char* name() { return "uint16_t"; } };
31  template<> struct get_typename<uint8_t> { static const char* name() { return "uint8_t"; } };
32  template<> struct get_typename<double> { static const char* name() { return "double"; } };
33  template<> struct get_typename<float> { static const char* name() { return "float"; } };
34  template<> struct get_typename<bool> { static const char* name() { return "bool"; } };
35  template<> struct get_typename<char> { static const char* name() { return "char"; } };
36  template<> struct get_typename<void> { static const char* name() { return "char"; } };
37  template<> struct get_typename<value> { static const char* name() { return "value"; } };
38  template<> struct get_typename<std::string> { static const char* name() { return "string"; } };
39  template<> struct get_typename<fc::exception> { static const char* name() { return "fc::exception"; } };
40  template<> struct get_typename<std::vector<char>> { static const char* name() { return "std::vector<char>"; } };
41  template<typename T> struct get_typename<std::vector<T>>
42  {
43  static const char* name() {
44  static std::string n = std::string("std::vector<") + get_typename<T>::name() + ">";
45  return n.c_str();
46  }
47  };
48  template<typename T> struct get_typename<flat_set<T>>
49  {
50  static const char* name() {
51  static std::string n = std::string("flat_set<") + get_typename<T>::name() + ">";
52  return n.c_str();
53  }
54  };
55  template<typename... Ts>
56  struct get_typename<flat_set<static_variant<Ts...>, typename static_variant<Ts...>::type_lt>>
57  {
58  static const char* name() {
59  using TN = get_typename<static_variant<Ts...>>;
60  static std::string n = std::string("flat_set<") + TN::name() + "," + TN::name() + "::type_lt>";
61  return n.c_str();
62  }
63  };
64  template<typename T, typename U> struct get_typename<flat_map<T, U>>
65  {
66  static const char* name() {
67  static std::string n = std::string("flat_map<") + get_typename<T>::name() + "," + get_typename<U>::name()
68  + ">";
69  return n.c_str();
70  }
71  };
72  template<typename T> struct get_typename< std::deque<T> >
73  {
74  static const char* name()
75  {
76  static std::string n = std::string("std::deque<") + get_typename<T>::name() + ">";
77  return n.c_str();
78  }
79  };
80  template<typename T> struct get_typename<optional<T>>
81  {
82  static const char* name() {
83  static std::string n = std::string("optional<") + get_typename<T>::name() + ">";
84  return n.c_str();
85  }
86  };
87  template<typename K,typename V> struct get_typename<std::map<K,V>>
88  {
89  static const char* name() {
90  static std::string n = std::string("std::map<") + get_typename<K>::name() + ","+get_typename<V>::name()+">";
91  return n.c_str();
92  }
93  };
94  template<typename K,typename V> struct get_typename<std::map<K,V,std::less<>>>
95  {
96  static const char* name() {
97  static std::string n = std::string("std::map<") + get_typename<K>::name() + ","+get_typename<V>::name()
98  + ",std::less<>>";
99  return n.c_str();
100  }
101  };
102  template<typename E> struct get_typename< std::set<E> >
103  {
104  static const char* name()
105  {
106  static std::string n = std::string("std::set<") + std::string(get_typename<E>::name()) + std::string(">");
107  return n.c_str();
108  }
109  };
110  template<typename A, typename B> struct get_typename< std::pair<A,B> >
111  {
112  static const char* name()
113  {
114  static std::string n = std::string("std::pair<") + get_typename<A>::name() + "," + get_typename<B>::name()
115  + ">";
116  return n.c_str();
117  }
118  };
119  template<typename T,size_t N> struct get_typename< std::array<T,N> >
120  {
121  static const char* name()
122  {
123  static std::string _name = std::string("std::array<") + std::string(fc::get_typename<T>::name())
124  + "," + fc::to_string(N) + ">";
125  return _name.c_str();
126  }
127  };
128  template<typename T> struct get_typename< const T* >
129  {
130  static const char* name()
131  {
132  static std::string n = std::string("const ") + get_typename<T>::name() + "*";
133  return n.c_str();
134  }
135  };
136  template<typename T> struct get_typename< T* >
137  {
138  static const char* name()
139  {
140  static std::string n = std::string(get_typename<T>::name()) + "*";
141  return n.c_str();
142  }
143  };
144 
145  struct unsigned_int;
146  class variant_object;
147  template<> struct get_typename<unsigned_int> { static const char* name() { return "unsigned_int"; } };
148  template<> struct get_typename<variant_object> { static const char* name() { return "fc::variant_object"; } };
149 
150 }
fc::variant_object
An order-perserving dictionary of variant's.
Definition: variant_object.hpp:20
fc::get_typename< variant_object >::name
static const char * name()
Definition: typename.hpp:148
fc::exception
Used to generate a useful error report when an exception is thrown.
Definition: exception.hpp:56
fc::to_string
std::string to_string(double)
Definition: string.cpp:73
fc::static_variant
Definition: raw_fwd.hpp:27
fc::get_typename< value >::name
static const char * name()
Definition: typename.hpp:37
fc
Definition: api.hpp:15
fc::get_typename< char >::name
static const char * name()
Definition: typename.hpp:35
fc::get_typename< fc::exception >::name
static const char * name()
Definition: typename.hpp:39
fc::get_typename< std::string >::name
static const char * name()
Definition: typename.hpp:38
fc::get_typename< flat_map< T, U > >::name
static const char * name()
Definition: typename.hpp:66
fc::get_typename< uint64_t >::name
static const char * name()
Definition: typename.hpp:29
fc::get_typename< uint16_t >::name
static const char * name()
Definition: typename.hpp:30
fc::get_typename< optional< T > >::name
static const char * name()
Definition: typename.hpp:82
fc::get_typename< unsigned_int >::name
static const char * name()
Definition: typename.hpp:147
fc::get_typename< int8_t >::name
static const char * name()
Definition: typename.hpp:27
fc::get_typename< flat_set< static_variant< Ts... >, typename static_variant< Ts... >::type_lt > >::name
static const char * name()
Definition: typename.hpp:58
string.hpp
fc::get_typename< int16_t >::name
static const char * name()
Definition: typename.hpp:26
flat_fwd.hpp
fc::get_typename< std::array< T, N > >::name
static const char * name()
Definition: typename.hpp:121
fc::get_typename< double >::name
static const char * name()
Definition: typename.hpp:32
fc::get_typename< int32_t >::name
static const char * name()
Definition: typename.hpp:24
fc::unsigned_int
Definition: varint.hpp:6
fc::get_typename< std::pair< A, B > >::name
static const char * name()
Definition: typename.hpp:112
fc::get_typename
Definition: typename.hpp:20
fc::get_typename< void >::name
static const char * name()
Definition: typename.hpp:36
fc::get_typename< std::set< E > >::name
static const char * name()
Definition: typename.hpp:104
fc::get_typename< T * >::name
static const char * name()
Definition: typename.hpp:138
fc::get_typename< flat_set< T > >::name
static const char * name()
Definition: typename.hpp:50
fc::get_typename< uint8_t >::name
static const char * name()
Definition: typename.hpp:31
fc::get_typename< int64_t >::name
static const char * name()
Definition: typename.hpp:25
fc::get_typename< const T * >::name
static const char * name()
Definition: typename.hpp:130
std
Definition: zeroed_array.hpp:76
fc::get_typename< uint32_t >::name
static const char * name()
Definition: typename.hpp:28
fc::get_typename< std::vector< T > >::name
static const char * name()
Definition: typename.hpp:43
fc::get_typename< float >::name
static const char * name()
Definition: typename.hpp:33
fc::get_typename< std::vector< char > >::name
static const char * name()
Definition: typename.hpp:40
fc::optional
provides stack-based nullable value similar to boost::optional
Definition: optional.hpp:20
fc::get_typename< std::map< K, V > >::name
static const char * name()
Definition: typename.hpp:89
fc::get_typename< bool >::name
static const char * name()
Definition: typename.hpp:34
fc::get_typename< std::map< K, V, std::less<> > >::name
static const char * name()
Definition: typename.hpp:96
fc::get_typename< std::deque< T > >::name
static const char * name()
Definition: typename.hpp:74
optional.hpp