Alchemy  1.0
A framework to robustly process network messages and structured data
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
benchmark_formats.h
Go to the documentation of this file.
1 /// @file benchmark_formats.h
2 ///
3 /// The formats of the structures used in the benchmark tests.
4 ///
5 /// The MIT License(MIT)
6 /// @copyright 2014 Paul M Watt
7 // ****************************************************************************
8 #ifndef BENCHMARK_FORMATS_H_INCLUDED
9 #define BENCHMARK_FORMATS_H_INCLUDED
10 // Includes *******************************************************************
11 #include <Hg.h>
12 
13 
14 namespace alchemy
15 {
16 namespace benchmark
17 {
18 
19 const size_t k_complex_basic_count = 4;
20 const size_t k_array_test_count = 256;
21 
22 
23 
24 #pragma pack(push)
25 #pragma pack(1)
26 
27 // ****************************************************************************
28 struct NoConversion
29 {
30  uint32_t ch_0;
31  uint32_t ch_1;
32  uint32_t ch_2;
33  uint32_t ch_3;
34  uint32_t ch_4;
35  uint32_t ch_5;
36  uint32_t ch_6;
37  uint32_t ch_7;
38  uint32_t ch_8;
39  uint32_t ch_9;
40  uint32_t ch_10;
41  uint32_t ch_11;
42  uint32_t ch_12;
43  uint32_t ch_13;
44  uint32_t ch_14;
45  uint32_t ch_15;
46 };
47 
48 // ****************************************************************************
49 struct Basic
50 {
51  int32_t i32;
52  uint32_t u32;
53  int16_t i16;
54  uint16_t u16;
55  char ch;
56  uint8_t u8;
57 };
58 
59 
60 // ****************************************************************************
61 //
62 // Set A: 15-bits fifteen
63 // 2-bits two
64 // 5-bits five
65 // 8-bits eight
66 // 1-bit one
67 //
68 // Set B: 4-bits first
69 // 4-bits second
70 // 4-bits third
71 // 4-bits fourth
72 //
73 // Set C: 1-bit a
74 // 1-bit b
75 // 1-bit c
76 // 1-bit d
77 // 1-bit e
78 // 1-bit f
79 // 1-bit g
80 // 1-bit h
81 //
82 struct Packed
83 {
84  uint32_t set_a;
85  uint16_t set_b;
86  uint8_t set_c;
87 };
88 
89 
90 // ****************************************************************************
91 struct Unaligned
92 {
93  char ch;
94  uint32_t u32_a;
95  uint32_t u32_b;
96  uint32_t u32_c;
97  int16_t i16_a;
98  int16_t i16_b;
99  int16_t i16_c;
100 };
101 
102 
103 // ****************************************************************************
104 struct Complex
105 {
106  uint32_t seq;
107  Basic basic[k_complex_basic_count];
108  Packed bits;
109  Unaligned unaligned;
110 };
111 
112 
113 // ****************************************************************************
114 struct Array
115 {
116  uint32_t items[k_array_test_count];
117 };
118 
119 
120 #pragma pack(pop)
121 
122 } // benchmark
123 } // alchemy
124 
125 
126 // The Hg equivalent definitions of the structures defined above. *************
127 // ****************************************************************************
129 ( uint32_t,
130  SetA,
131  ALCHEMY_BITS (0, fifteen, 15),
132  ALCHEMY_BITS (1, two, 2),
133  ALCHEMY_BITS (2, five, 5),
134  ALCHEMY_BITS (3, eight, 8),
135  ALCHEMY_BITS (4, one, 1)
136 );
137 
138 // ****************************************************************************
140 ( uint16_t,
141  SetB,
142  ALCHEMY_BITS (0, first, 4),
143  ALCHEMY_BITS (1, second, 4),
144  ALCHEMY_BITS (2, third, 4),
145  ALCHEMY_BITS (3, fourth, 4)
146 );
147 
148 // ****************************************************************************
150 ( uint8_t,
151  SetC,
152  ALCHEMY_BITS (0, a, 1),
153  ALCHEMY_BITS (1, b, 1),
154  ALCHEMY_BITS (2, c, 1),
155  ALCHEMY_BITS (3, d, 1),
156  ALCHEMY_BITS (4, e, 1),
157  ALCHEMY_BITS (5, f, 1),
158  ALCHEMY_BITS (6, g, 1),
159  ALCHEMY_BITS (7, h, 1)
160 );
161 
162 
163 ALCHEMY_STRUCT(NoConversion,
164  ALCHEMY_DATUM(uint32_t, ch_0),
165  ALCHEMY_DATUM(uint32_t, ch_1),
166  ALCHEMY_DATUM(uint32_t, ch_2),
167  ALCHEMY_DATUM(uint32_t, ch_3),
168  ALCHEMY_DATUM(uint32_t, ch_4),
169  ALCHEMY_DATUM(uint32_t, ch_5),
170  ALCHEMY_DATUM(uint32_t, ch_6),
171  ALCHEMY_DATUM(uint32_t, ch_7),
172  ALCHEMY_DATUM(uint32_t, ch_8),
173  ALCHEMY_DATUM(uint32_t, ch_9),
174  ALCHEMY_DATUM(uint32_t, ch_10),
175  ALCHEMY_DATUM(uint32_t, ch_11),
176  ALCHEMY_DATUM(uint32_t, ch_12),
177  ALCHEMY_DATUM(uint32_t, ch_13),
178  ALCHEMY_DATUM(uint32_t, ch_14),
179  ALCHEMY_DATUM(uint32_t, ch_15)
180 );
181 
182 // ****************************************************************************
183 ALCHEMY_STRUCT(Basic,
184  ALCHEMY_DATUM(int32_t, i32),
185  ALCHEMY_DATUM(uint32_t, u32),
186  ALCHEMY_DATUM(int16_t, i16),
187  ALCHEMY_DATUM(uint16_t, u16),
188  ALCHEMY_DATUM(char, ch),
189  ALCHEMY_DATUM(uint8_t, u8)
190 );
191 
192 // ****************************************************************************
193 ALCHEMY_STRUCT(Packed,
194  ALCHEMY_DATUM(SetA, set_a),
195  ALCHEMY_DATUM(SetB, set_b),
196  ALCHEMY_DATUM(SetC, set_c)
197 );
198 
199 // ****************************************************************************
200 ALCHEMY_STRUCT(Unaligned,
201  ALCHEMY_DATUM(char, ch),
202  ALCHEMY_DATUM(uint32_t, u32_a),
203  ALCHEMY_DATUM(uint32_t, u32_b),
204  ALCHEMY_DATUM(uint32_t, u32_c),
205  ALCHEMY_DATUM(int16_t, i16_a),
206  ALCHEMY_DATUM(int16_t, i16_b),
207  ALCHEMY_DATUM(int16_t, i16_c)
208 );
209 
210 // ****************************************************************************
211 ALCHEMY_STRUCT(Complex,
212  ALCHEMY_DATUM(uint32_t, seq),
213  ALCHEMY_ARRAY(Basic, alchemy::benchmark::k_complex_basic_count, basic),
214  ALCHEMY_DATUM(Packed, bits),
215  ALCHEMY_DATUM(Unaligned, unaligned)
216 );
217 
218 // ****************************************************************************
219 ALCHEMY_STRUCT(Array_test,
220  ALCHEMY_ARRAY(uint32_t, alchemy::benchmark::k_array_test_count, items)
221 );
222 
223 
224 
225 
226 
227 #endif