xref: /openbmc/boost-dbus/include/dbus/element.hpp (revision e9ee8b53)
1 // Copyright (c) Benjamin Kietzman (github.com/bkietz)
2 //
3 // Distributed under the Boost Software License, Version 1.0. (See accompanying
4 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5 
6 #ifndef DBUS_ELEMENT_HPP
7 #define DBUS_ELEMENT_HPP
8 
9 #include <dbus/dbus.h>
10 #include <boost/cstdint.hpp>
11 #include <string>
12 
13 namespace dbus {
14 
15 /// Message elements
16 /**
17  * D-Bus Messages are composed of simple elements of one of these types
18  */
19 // bool // is this simply valid? It might pack wrong...
20         // http://maemo.org/api_refs/5.0/5.0-final/dbus/api/group__DBusTypes.html
21 typedef boost::uint8_t  byte;
22 
23 typedef boost:: int16_t int16;
24 typedef boost::uint16_t uint16;
25 typedef boost:: int32_t int32;
26 typedef boost::uint32_t uint32;
27 
28 typedef boost:: int64_t int64;
29 typedef boost::uint64_t uint64;
30 // double
31 // unix_fd
32 
33 typedef std::string   string;
34 struct object_path
35 {
36   string value;
37 };
38 struct signature
39 {
40   string value;
41 };
42 
43 /// Traits template for message elements
44 /**
45  * D-Bus Message elements are identified by unique integer type codes.
46  */
47 template<typename InvalidType> struct element
48 {
49   static const int code = DBUS_TYPE_INVALID;
50 };
51 
52 template<> struct element< bool >
53 {
54   static const int code = DBUS_TYPE_BOOLEAN;
55 };
56 
57 template<> struct element< byte >
58 {
59   static const int code = DBUS_TYPE_BYTE;
60 };
61 
62 template<> struct element< int16 >
63 {
64   static const int code = DBUS_TYPE_INT16;
65 };
66 
67 template<> struct element< uint16 >
68 {
69   static const int code = DBUS_TYPE_UINT16;
70 };
71 
72 template<> struct element< int32 >
73 {
74   static const int code = DBUS_TYPE_INT32;
75 };
76 
77 template<> struct element< uint32 >
78 {
79   static const int code = DBUS_TYPE_UINT32;
80 };
81 
82 template<> struct element< int64 >
83 {
84   static const int code = DBUS_TYPE_INT64;
85 };
86 
87 template<> struct element< uint64 >
88 {
89   static const int code = DBUS_TYPE_UINT64;
90 };
91 
92 template<> struct element< double >
93 {
94   static const int code = DBUS_TYPE_DOUBLE;
95 };
96 
97 template<> struct element< string >
98 {
99   static const int code = DBUS_TYPE_STRING;
100 };
101 
102 template<> struct element< object_path >
103 {
104   static const int code = DBUS_TYPE_OBJECT_PATH;
105 };
106 
107 template<> struct element< signature >
108 {
109   static const int code = DBUS_TYPE_SIGNATURE;
110 };
111 
112 
113 
114 template<typename InvalidType> struct is_fixed_type
115 {
116   static const int value = false;
117 };
118 
119 template<> struct is_fixed_type< bool >
120 {
121   static const int value = true;
122 };
123 
124 template<> struct is_fixed_type< byte >
125 {
126   static const int value = true;
127 };
128 
129 template<> struct is_fixed_type< int16 >
130 {
131   static const int value = true;
132 };
133 
134 template<> struct is_fixed_type< uint16 >
135 {
136   static const int value = true;
137 };
138 
139 template<> struct is_fixed_type< int32 >
140 {
141   static const int value = true;
142 };
143 
144 template<> struct is_fixed_type< uint32 >
145 {
146   static const int value = true;
147 };
148 
149 template<> struct is_fixed_type< int64 >
150 {
151   static const int value = true;
152 };
153 
154 template<> struct is_fixed_type< uint64 >
155 {
156   static const int value = true;
157 };
158 
159 template<> struct is_fixed_type< double >
160 {
161   static const int value = true;
162 };
163 
164 
165 
166 template<typename InvalidType> struct is_string_type
167 {
168   static const bool value = false;
169 };
170 
171 template<> struct is_string_type< string >
172 {
173   static const bool value = true;
174 };
175 
176 template<> struct is_string_type< object_path >
177 {
178   static const bool value = true;
179 };
180 
181 template<> struct is_string_type< signature >
182 {
183   static const bool value = true;
184 };
185 
186 
187 } // namespace dbus
188 
189 #endif // DBUS_ELEMENT_HPP
190