Alchemy  1.0
A framework to robustly process network messages and structured data
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
using_Hg.cpp
Go to the documentation of this file.
1 /// @file using_Hg.cpp
2 ///
3 /// Implements message parsing by using Hg.
4 ///
5 /// The MIT License(MIT)
6 /// @copyright 2014 Paul M Watt
7 // ****************************************************************************
8 // Includes *******************************************************************
9 #include <using_Hg.h>
10 #include <Hg.h>
11 #include <Hg/static_msg_buffer.h>
12 #include <iostream>
13 
14 using std::cout;
15 using std::endl;
16 
17 namespace alchemy
18 {
19 namespace benchmark
20 {
21 namespace detail
22 {
23 
24 // ****************************************************************************
25 template< typename T >
26 void test_impl( DataBuffer &data,
27  DataBuffer &out,
28  const char (&name)[14])
29 {
31 
32  size_t len = Hg::SizeOf<HgType>::value;
33  size_t count = data.Size() / len;
34 
35  cout << name << " size: " << len << "\t\tcount: " << count << endl;
36  for (size_t index = 0; index < count; ++index)
37  {
38  HgType::host_t host((HgType::data_type*)data.GetBytes(len), len);
39 
40  HgType::net_t net = Hg::to_network(host);
41 
42  net.data((unsigned char*)out.GetBytes(len), len);
43  }
44 
45 }
46 
47 } // namespace detail
48 
49 
50 // ****************************************************************************
52 
53 void UsingHg::test_no_conversion( DataBuffer &data,
54  DataBuffer &out)
55 {
56  detail::test_impl<Hg::NoConversion>(data, out, "no_conversion");
57 }
58 
59 // ****************************************************************************
60 void UsingHg::test_basic(DataBuffer &data,
61  DataBuffer &out)
62 {
63  detail::test_impl<Hg::Basic>(data, out, " basic");
64 }
65 
66 // ****************************************************************************
67 void UsingHg::test_packed_bits( DataBuffer &data,
68  DataBuffer &out)
69 {
70  detail::test_impl<Hg::Packed>(data, out, " packed");
71 }
72 
73 
74 // ****************************************************************************
75 void UsingHg::test_unaligned( DataBuffer &data,
76  DataBuffer &out)
77 {
78  detail::test_impl<Hg::Unaligned>(data, out, " unaligned");
79 }
80 
81 // ****************************************************************************
82 void UsingHg::test_complex(DataBuffer &data,
83  DataBuffer &out)
84 {
85  detail::test_impl<Hg::Complex>(data, out, " complex");
86 }
87 
88 
89 // ****************************************************************************
90 void UsingHg::test_array(DataBuffer &data,
91  DataBuffer &out)
92 {
93  detail::test_impl<Hg::Array_test>(data, out, " array");
94 }
95 
96 
97 
98 } // benchmark
99 } // alchemy
100