YAMI4 Core
parameters.h
1 // Copyright Maciej Sobczak 2008-2019.
2 // This file is part of YAMI4.
3 //
4 // YAMI4 is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // YAMI4 is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with YAMI4. If not, see <http://www.gnu.org/licenses/>.
16 
17 #ifndef YAMICORE_PARAMETERS_H_INCLUDED
18 #define YAMICORE_PARAMETERS_H_INCLUDED
19 
20 #include "allocator.h"
21 #include "core.h"
22 #include "dll.h"
23 #include "parameter_type.h"
24 #include "serializable.h"
25 
26 namespace yami
27 {
28 
29 namespace details
30 {
31 struct entry;
32 
33 // for unit tests, to avoid dependency on IOStreams from core
34 class dump_sink
35 {
36 public:
37  virtual ~dump_sink() {}
38 
39  virtual void indent(std::size_t spaces) = 0;
40  virtual void dump(std::size_t v) = 0;
41  virtual void dump(bool v) = 0;
42  virtual void dump(int v) = 0;
43  virtual void dump(long long v) = 0;
44  virtual void dump(double v) = 0;
45  virtual void dump(const char * str) = 0;
46  virtual void dump(const char * str, std::size_t str_len) = 0;
47 };
48 
49 } // namespace details
50 
51 namespace core
52 {
53 
54 class parameter_entry;
55 class parameter_iterator;
56 
91 class DLL parameters : public serializable
92 {
93 public:
112  explicit parameters(
113  void * working_area = NULL, std::size_t area_size = 0);
114 
123  ~parameters();
124 
125  // single-value operations
126 
138  result set_boolean(const char * name, std::size_t name_length,
139  bool value);
140 
145  result set_boolean(const char * name, bool value);
146 
158  result get_boolean(const char * name, std::size_t name_length,
159  bool & value) const;
160 
165  result get_boolean(const char * name, bool & value) const;
166 
178  result set_integer(const char * name, std::size_t name_length, int value);
179 
184  result set_integer(const char * name, int value);
185 
197  result get_integer(const char * name, std::size_t name_length,
198  int & value) const;
199 
204  result get_integer(const char * name, int & value) const;
205 
217  result set_long_long(const char * name, std::size_t name_length,
218  long long value);
219 
224  result set_long_long(const char * name, long long value);
225 
237  result get_long_long(const char * name, std::size_t name_length,
238  long long & value) const;
239 
244  result get_long_long(const char * name, long long & value) const;
245 
257  result set_double_float(const char * name, std::size_t name_length,
258  double value);
259 
264  result set_double_float(const char * name, double value);
265 
277  result get_double_float(const char * name, std::size_t name_length,
278  double & value) const;
279 
284  result get_double_float(const char * name, double & value) const;
285 
301  result set_string(const char * name, std::size_t name_length,
302  const char * value, std::size_t value_length);
303 
308  result set_string(const char * name, const char * value);
309 
327  result set_string_shallow(const char * name, std::size_t name_length,
328  const char * value, std::size_t value_length);
329 
334  result set_string_shallow(const char * name, const char * value);
335 
348  result get_string(const char * name, std::size_t name_length,
349  const char * & value, std::size_t & value_length) const;
350 
355  result get_string(const char * name,
356  const char * & value, std::size_t & value_length) const;
357 
372  result set_binary(const char * name, std::size_t name_length,
373  const void * value, std::size_t value_length);
374 
379  result set_binary(const char * name,
380  const void * value, std::size_t value_length);
381 
398  result set_binary_shallow(const char * name, std::size_t name_length,
399  const void * value, std::size_t value_length);
400 
405  result set_binary_shallow(const char * name,
406  const void * value, std::size_t value_length);
407 
420  result get_binary(const char * name, std::size_t name_length,
421  const void * & value, std::size_t & value_length) const;
422 
427  result get_binary(const char * name,
428  const void * & value, std::size_t & value_length) const;
429 
430  // array operations
431 
447  result set_boolean_array(const char * name, std::size_t name_length,
448  const bool * values, std::size_t array_length);
449 
454  result set_boolean_array(const char * name,
455  const bool * values, std::size_t array_length);
456 
473  result set_boolean_array_shallow(
474  const char * name, std::size_t name_length,
475  const bool * values, std::size_t array_length);
476 
482  result set_boolean_array_shallow(const char * name,
483  const bool * values, std::size_t array_length);
484 
497  result create_boolean_array(const char * name, std::size_t name_length,
498  std::size_t array_length, bool * & array);
499 
505  result create_boolean_array(const char * name,
506  std::size_t array_length, bool * & array);
507 
523  result get_boolean_array(const char * name, std::size_t name_length,
524  bool * & values, std::size_t & array_length) const;
525 
530  result get_boolean_array(const char * name,
531  bool * & values, std::size_t & array_length) const;
532 
548  result set_integer_array(const char * name, std::size_t name_length,
549  const int * values, std::size_t array_length);
550 
555  result set_integer_array(const char * name,
556  const int * values, std::size_t array_length);
557 
574  result set_integer_array_shallow(
575  const char * name, std::size_t name_length,
576  const int * values, std::size_t array_length);
577 
583  result set_integer_array_shallow(const char * name,
584  const int * values, std::size_t array_length);
585 
598  result create_integer_array(const char * name, std::size_t name_length,
599  std::size_t array_length, int * & array);
600 
606  result create_integer_array(const char * name,
607  std::size_t array_length, int * & array);
608 
624  result get_integer_array(const char * name, std::size_t name_length,
625  int * & values, std::size_t & array_length) const;
626 
631  result get_integer_array(const char * name,
632  int * & values, std::size_t & array_length) const;
633 
650  result set_long_long_array(const char * name, std::size_t name_length,
651  const long long * values, std::size_t array_length);
652 
657  result set_long_long_array(const char * name,
658  const long long * values, std::size_t array_length);
659 
677  result set_long_long_array_shallow(
678  const char * name, std::size_t name_length,
679  const long long * values, std::size_t array_length);
680 
686  result set_long_long_array_shallow(const char * name,
687  const long long * values, std::size_t array_length);
688 
702  result create_long_long_array(const char * name, std::size_t name_length,
703  std::size_t array_length, long long * & array);
704 
710  result create_long_long_array(const char * name,
711  std::size_t array_length, long long * & array);
712 
729  result get_long_long_array(const char * name, std::size_t name_length,
730  long long * & values, std::size_t & array_length) const;
731 
736  result get_long_long_array(const char * name,
737  long long * & values, std::size_t & array_length) const;
738 
754  result set_double_float_array(const char * name, std::size_t name_length,
755  const double * values, std::size_t array_length);
756 
761  result set_double_float_array(const char * name,
762  const double * values, std::size_t array_length);
763 
780  result set_double_float_array_shallow(
781  const char * name, std::size_t name_length,
782  const double * values, std::size_t array_length);
783 
789  result set_double_float_array_shallow(const char * name,
790  const double * values, std::size_t array_length);
791 
805  result create_double_float_array(
806  const char * name, std::size_t name_length,
807  std::size_t array_length, double * & array);
808 
814  result create_double_float_array(
815  const char * name,
816  std::size_t array_length, double * & array);
817 
833  result get_double_float_array(const char * name, std::size_t name_length,
834  double * & values, std::size_t & array_length) const;
835 
840  result get_double_float_array(const char * name,
841  double * & values, std::size_t & array_length) const;
842 
857  result create_string_array(const char * name, std::size_t name_length,
858  std::size_t array_length);
859 
865  result create_string_array(const char * name, std::size_t array_length);
866 
887  result set_string_in_array(const char * name, std::size_t name_length,
888  std::size_t index, const char * value, std::size_t value_length);
889 
895  result set_string_in_array(const char * name, std::size_t index,
896  const char * value);
897 
910  result get_string_array_length(const char * name, std::size_t name_length,
911  std::size_t & array_length) const;
912 
918  result get_string_array_length(const char * name,
919  std::size_t & array_length) const;
920 
935  result get_string_in_array(const char * name, std::size_t name_length,
936  std::size_t index,
937  const char * & value, std::size_t & value_length) const;
938 
944  result get_string_in_array(const char * name, std::size_t index,
945  const char * & value, std::size_t & value_length) const;
946 
961  result create_binary_array(const char * name, std::size_t name_length,
962  std::size_t array_length);
963 
969  result create_binary_array(const char * name, std::size_t array_length);
970 
990  result set_binary_in_array(const char * name, std::size_t name_length,
991  std::size_t index, const void * value, std::size_t value_length);
992 
998  result set_binary_in_array(const char * name, std::size_t index,
999  const void * value, std::size_t value_length);
1000 
1013  result get_binary_array_length(const char * name, std::size_t name_length,
1014  std::size_t & array_length) const;
1015 
1021  result get_binary_array_length(const char * name,
1022  std::size_t & array_length) const;
1023 
1038  result get_binary_in_array(const char * name, std::size_t name_length,
1039  std::size_t index,
1040  const void * & value, std::size_t & value_length) const;
1041 
1047  result get_binary_in_array(const char * name, std::size_t index,
1048  const void * & value, std::size_t & value_length) const;
1049 
1050  // support for data nesting
1051 
1064  result create_nested_parameters(
1065  const char * name, std::size_t name_length,
1066  parameters * & params);
1067 
1072  result create_nested_parameters(const char * name, parameters * & params);
1073 
1085  result get_nested_parameters(
1086  const char * name, std::size_t name_length,
1087  parameters * & params) const;
1088 
1093  result get_nested_parameters(
1094  const char * name, parameters * & params) const;
1095 
1110  result create_nested_array(const char * name, std::size_t name_length,
1111  std::size_t array_length);
1112 
1118  result create_nested_array(const char * name, std::size_t array_length);
1119 
1132  result get_nested_array_length(const char * name, std::size_t name_length,
1133  std::size_t & array_length) const;
1134 
1140  result get_nested_array_length(const char * name,
1141  std::size_t & array_length) const;
1142 
1157  result get_nested_in_array(const char * name, std::size_t name_length,
1158  std::size_t index,
1159  parameters * & nested) const;
1160 
1167  result get_nested_in_array(const char * name, std::size_t index,
1168  parameters * & nested) const;
1169 
1170  // other operations
1171 
1183  result remove(const char * name, std::size_t name_length);
1184 
1189  result remove(const char * name);
1190 
1191  // inspection
1192 
1198  std::size_t size() const;
1199 
1209  result get_type(const char * name, std::size_t name_length,
1210  parameter_type & t) const;
1211 
1216  result get_type(const char * name, parameter_type & t) const;
1217 
1218  // iterator support
1219 
1227  result get_iterator(parameter_iterator & it) const;
1228 
1238  result find(const char * name, std::size_t name_length,
1239  parameter_entry & entry) const;
1240 
1246  result find(const char * name, parameter_entry & entry) const;
1247 
1257  result merge_from(const parameters & other);
1258 
1264  void clear();
1265 
1266  // serialization
1267 
1277  virtual result get_serialize_buffer_size(std::size_t & size) const;
1278 
1299  virtual result serialize(char * * buffers,
1300  const std::size_t * buffer_sizes,
1301  std::size_t num_of_buffers) const;
1302 
1333  result deserialize(const char * * buffers,
1334  const std::size_t * buffer_sizes,
1335  std::size_t num_of_buffers);
1336 
1337  // for unit tests
1338  void dump(details::dump_sink & sink, std::size_t indent_length = 0) const;
1339 
1340  // used internally
1341  details::allocator own_allocator_;
1342  details::allocator & allocator_;
1343  bool uses_private_area_;
1344  details::entry * data_;
1345  std::size_t num_of_entries_;
1346 
1347  parameters(details::allocator & allocator, bool private_area);
1348 
1349 private:
1350 
1351  parameters(const parameters &);
1352  void operator=(const parameters &);
1353 };
1354 
1355 } // namespace core
1356 
1357 } // namespace yami
1358 
1359 #endif // YAMICORE_PARAMETERS_H_INCLUDED
Collection of message parameters.
Definition: parameters.h:91
parameter_type
Type of parameter entry.
Definition: parameter_type.h:27
Namespace devoted for everything related to YAMI4.
Definition: agent.h:25
Iterator to parameter entries.
Definition: parameter_iterator.h:46
Read-only view on the parameters entry.
Definition: parameter_entry.h:42
Common interface for serializable data source.
Definition: serializable.h:35
result
General type for reporting success and error states.
Definition: core.h:32