framework
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Pages
framework
protocol_buffers
wire_type.hpp
Go to the documentation of this file.
1
// Copyright (C) 2013 iwg molw5
2
// For conditions of distribution and use, see copyright notice in COPYING
3
13
#pragma once
14
15
#include <
framework/serializable/mutators/endian.hpp
>
16
#include <
framework/serializable/mutators/stl_string.hpp
>
17
#include <
framework/serializable/mutators/stl_vector.hpp
>
18
19
#include <
framework/protocol_buffers/varint.hpp
>
20
#include <
framework/protocol_buffers/frame.hpp
>
21
22
namespace
framework
23
{
24
namespace
protocol_buffers
25
{
26
namespace
detail
27
{
28
template
<
typename
T,
typename
Enabler =
void
>
29
struct
is_wire_type_impl;
30
31
template
<
typename
T,
typename
Enabler =
void
>
32
struct
wire_type_impl;
33
34
template
<
typename
T>
35
struct
is_integer_type_impl;
36
37
template
<
typename
T>
38
struct
make_wire_type_impl;
39
}
40
44
enum class
e_wire_type
: uint8_t
45
{
46
varint
= 0,
47
fixed_64 = 1,
48
length_delimited
= 2,
49
start_group = 3,
50
end_group = 4,
51
fixed_32 = 5
52
};
53
57
template
<e_wire_type Type>
58
struct
wire_type_base
59
{
60
// GCC bug workaround - www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#580
61
#if MAX_GNUC_VERSION(4, 8, 0)
62
public
:
63
#else
64
template
<
typename
T,
typename
Enabler>
65
friend
struct
detail::is_wire_type_impl;
66
67
template
<
typename
T,
typename
Enabler>
68
friend
struct
detail::wire_type_impl;
69
70
private
:
71
#endif
72
using
protocol_buffers_wire_enabler = void;
73
using
protocol_buffers_wire_type = std::integral_constant <e_wire_type, Type>;
74
};
75
79
template
<e_wire_type Type,
typename
Specification>
80
struct
wire_type_wrapper
:
81
wire_type_base
<Type>,
82
Specification
83
{
84
};
85
97
template
<
typename
Specification>
98
struct
length_delimited
:
99
serializable::mutator_type
<Specification>,
100
wire_type_base
<e_wire_type::length_delimited>
101
{
102
};
103
107
template
<
typename
T>
108
using
is_wire_type
=
typename
detail::is_wire_type_impl <T>::type;
109
116
template
<
typename
T>
117
using
is_integer_type
=
typename
detail::is_integer_type_impl <T>::type;
118
122
template
<
typename
T>
123
using
wire_type
=
typename
detail::wire_type_impl <T>::type;
124
128
template
<
typename
T>
129
using
make_wire_type
=
typename
detail::make_wire_type_impl <T>::type;
130
134
using
float_
=
wire_type_wrapper <e_wire_type::fixed_32, serializable::little_endian <float>
>;
135
139
using
double_
=
wire_type_wrapper <e_wire_type::fixed_64, serializable::little_endian <double>
>;
140
144
using
bool_
=
wire_type_wrapper <e_wire_type::varint, varint <bool>
>;
145
149
using
string_
=
wire_type_wrapper <e_wire_type::length_delimited, serializable::stl_string <varint <std::size_t>
>>;
150
154
using
bytes
=
string_
;
155
159
using
int32
=
wire_type_wrapper <e_wire_type::varint, varint <int32_t>
>;
160
164
using
int64
=
wire_type_wrapper <e_wire_type::varint, varint <int64_t>
>;
165
169
using
uint32
=
wire_type_wrapper <e_wire_type::varint, varint <uint32_t>
>;
170
174
using
uint64
=
wire_type_wrapper <e_wire_type::varint, varint <uint64_t>
>;
175
179
using
sint32
=
wire_type_wrapper <e_wire_type::varint, zig_zag <int32_t>
>;
180
184
using
sint64
=
wire_type_wrapper <e_wire_type::varint, zig_zag <int64_t>
>;
185
189
using
fixed32
=
wire_type_wrapper <e_wire_type::fixed_32, serializable::little_endian <uint32_t>
>;
190
194
using
fixed64
=
wire_type_wrapper <e_wire_type::fixed_64, serializable::little_endian <uint64_t>
>;
195
199
using
sfixed32
=
wire_type_wrapper <e_wire_type::fixed_32, serializable::little_endian <int32_t>
>;
200
204
using
sfixed64
=
wire_type_wrapper <e_wire_type::fixed_64, serializable::little_endian <int64_t>
>;
205
}
206
}
207
208
#include <framework/protocol_buffers/wire_type.inl>
Generated on Wed Apr 10 2013 20:49:42 for framework by
1.8.3.1-20130402