Goby v2
test-plugin.cpp
1 // Copyright 2009-2018 Toby Schneider (http://gobysoft.org/index.wt/people/toby)
2 // GobySoft, LLC (2013-)
3 // Massachusetts Institute of Technology (2007-2014)
4 //
5 //
6 // This file is part of the Goby Underwater Autonomy Project Binaries
7 // ("The Goby Binaries").
8 //
9 // The Goby Binaries are free software: you can redistribute them and/or modify
10 // them under the terms of the GNU General Public License as published by
11 // the Free Software Foundation, either version 2 of the License, or
12 // (at your option) any later version.
13 //
14 // The Goby Binaries are distributed in the hope that they will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 // GNU General Public License for more details.
18 //
19 // You should have received a copy of the GNU General Public License
20 // along with Goby. If not, see <http://www.gnu.org/licenses/>.
21 
22 #include "goby/common/hdf5_plugin.h"
23 
24 #include "goby/common/time.h"
25 #include "goby/util/binary.h"
26 
27 #include "test.pb.h"
28 #include "test2.pb.h"
29 
31 {
32  public:
34 
35  private:
36  bool provide_entry(goby::common::HDF5ProtobufEntry* entry);
37  void fill_message(TestMsg& msg_in);
38  void fill_message(TestHDF5Message& msg);
39 
40  private:
41 };
42 
43 extern "C"
44 {
46  {
47  return new TestHDF5Plugin(cfg);
48  }
49 }
50 
51 TestHDF5Plugin::TestHDF5Plugin(goby::common::protobuf::HDF5Config* cfg)
53 {
54 }
55 
56 bool TestHDF5Plugin::provide_entry(goby::common::HDF5ProtobufEntry* entry)
57 {
58  static int entry_index = 0;
59 
60  if (entry_index > 20)
61  return false;
62 
63  if (entry_index < 3 || entry_index > 7)
64  {
65  TestMsg msg;
66  fill_message(msg);
67  entry->msg = boost::shared_ptr<google::protobuf::Message>(new TestMsg(msg));
68  }
69  else
70  {
71  TestHDF5Message msg;
72  fill_message(msg);
73  entry->msg = boost::shared_ptr<google::protobuf::Message>(new TestHDF5Message(msg));
74  }
75 
76  if (entry_index < 10)
77  entry->channel =
78  "\t/test/group1"; // add some whitespace and leading "/" - will become "test/group1"
79  else
80  entry->channel =
81  " test/group2/"; // add some whitespace and trailing "/" - will become "test/group2"
82 
83  entry->time = goby::common::goby_time<goby::uint64>();
84 
85  std::cout << *entry << std::endl;
86 
87  ++entry_index;
88 
89  return true;
90 }
91 
92 void TestHDF5Plugin::fill_message(TestHDF5Message& msg)
93 {
94  static int i = 0;
95  static int i2 = 0;
96  static int i3 = 0;
97  static int i4 = 0;
98  static int i5 = 0;
99  static int i6 = 0;
100  if (i == 0)
101  {
102  for (int j = 0; j < 10; ++j) msg.add_a(++i);
103 
104  for (int j = 0; j < 10; ++j)
105  {
106  B* b = msg.add_b();
107  for (int k = 0; k < 20; ++k)
108  {
109  b->add_c(++i2);
110  if (k < 10)
111  b->add_d(++i3);
112  if (k < 5)
113  b->add_e(++i4);
114  }
115  for (int l = 0; l < 3; ++l)
116  {
117  F* f = b->add_f();
118  f->set_h(++i5);
119  for (int m = 0; m < 6; ++m) f->add_g(++i6);
120  }
121  }
122  }
123  else
124  {
125  for (int j = 0; j < 20; ++j) msg.add_a(++i);
126 
127  for (int j = 0; j < 3; ++j)
128  {
129  B* b = msg.add_b();
130  for (int k = 0; k < 2; ++k)
131  {
132  b->add_c(++i2);
133  b->add_d(++i3);
134  b->add_e(++i4);
135  }
136  for (int l = 0; l < 5; ++l)
137  {
138  F* f = b->add_f();
139  f->set_h(++i5);
140  for (int m = 0; m < 8; ++m) f->add_g(++i6);
141  }
142  }
143  }
144 }
145 
146 void TestHDF5Plugin::fill_message(TestMsg& msg_in)
147 {
148  static int i = 0;
149  msg_in.set_double_default_optional(++i + 0.1);
150  msg_in.set_float_default_optional(++i + 0.2);
151 
152  msg_in.set_int32_default_optional(++i);
153  msg_in.set_int64_default_optional(-++i);
154  msg_in.set_uint32_default_optional(++i);
155  msg_in.set_uint64_default_optional(++i);
156  msg_in.set_sint32_default_optional(-++i);
157  msg_in.set_sint64_default_optional(++i);
158  msg_in.set_fixed32_default_optional(++i);
159  msg_in.set_fixed64_default_optional(++i);
160  msg_in.set_sfixed32_default_optional(++i);
161  msg_in.set_sfixed64_default_optional(-++i);
162 
163  msg_in.set_bool_default_optional(true);
164 
165  msg_in.set_string_default_optional("abc123");
166  msg_in.set_bytes_default_optional(goby::util::hex_decode("00112233aabbcc1234"));
167 
168  msg_in.set_enum_default_optional(ENUM_C);
169  msg_in.mutable_msg_default_optional()->set_val(++i + 0.3);
170  msg_in.mutable_msg_default_optional()->mutable_msg()->set_val(++i);
171 
172  msg_in.set_double_default_required(++i + 0.1);
173  msg_in.set_float_default_required(++i + 0.2);
174 
175  msg_in.set_int32_default_required(++i);
176  msg_in.set_int64_default_required(-++i);
177  msg_in.set_uint32_default_required(++i);
178  msg_in.set_uint64_default_required(++i);
179  msg_in.set_sint32_default_required(-++i);
180  msg_in.set_sint64_default_required(++i);
181  msg_in.set_fixed32_default_required(++i);
182  msg_in.set_fixed64_default_required(++i);
183  msg_in.set_sfixed32_default_required(++i);
184  msg_in.set_sfixed64_default_required(-++i);
185 
186  msg_in.set_bool_default_required(true);
187 
188  msg_in.set_string_default_required("abc123");
189  msg_in.set_bytes_default_required(goby::util::hex_decode("00112233aabbcc1234"));
190 
191  msg_in.set_enum_default_required(ENUM_C);
192  msg_in.mutable_msg_default_required()->set_val(++i + 0.3);
193  msg_in.mutable_msg_default_required()->mutable_msg()->set_val(++i);
194 
195  for (int j = 0; j < 3; ++j)
196  {
197  msg_in.add_double_default_repeat(++i + 0.1);
198  msg_in.add_float_default_repeat(++i + 0.2);
199 
200  msg_in.add_int32_default_repeat(++i);
201  msg_in.add_int64_default_repeat(-++i);
202  msg_in.add_uint32_default_repeat(++i);
203  msg_in.add_uint64_default_repeat(++i);
204  msg_in.add_sint32_default_repeat(-++i);
205  msg_in.add_sint64_default_repeat(++i);
206  msg_in.add_fixed32_default_repeat(++i);
207  msg_in.add_fixed64_default_repeat(++i);
208  msg_in.add_sfixed32_default_repeat(++i);
209  msg_in.add_sfixed64_default_repeat(-++i);
210 
211  msg_in.add_bool_default_repeat(true);
212 
213  msg_in.add_string_default_repeat("abc123");
214 
215  if (j)
216  msg_in.add_bytes_default_repeat(goby::util::hex_decode("00aabbcc"));
217  else
218  msg_in.add_bytes_default_repeat(goby::util::hex_decode("ffeedd12"));
219 
220  msg_in.add_enum_default_repeat(static_cast<Enum1>((++i % 3) + 1));
221  EmbeddedMsg1* em_msg = msg_in.add_msg_default_repeat();
222  em_msg->set_val(++i + 0.3);
223  em_msg->mutable_msg()->set_val(++i);
224  }
225 }
Definition: test2.pb.h:139
Definition: test2.pb.h:260