YAMI4 C++ Library 2.0.0
Messaging Solution for Distributed Systems
Loading...
Searching...
No Matches
parameters.h
1// Copyright Maciej Sobczak 2008-2022.
2// This file is part of YAMI4.
3// See the package-level LICENSE.txt file.
4
5#ifndef YAMICPP_PARAMETERS_H_INCLUDED
6#define YAMICPP_PARAMETERS_H_INCLUDED
7
8#include "parameter_entry.h"
9#include "parameter_type.h"
10#include "serializable.h"
11#include <yami4-core/dll.h>
12#include <yami4-core/parameter_iterator.h>
13#include <memory>
14#include <ostream>
15#include <string>
16
17namespace yami
18{
19
20namespace core
21{
22class parameters;
23} // namespace core
24
61class DLL parameters : public serializable
62{
63public:
68
74 explicit parameters(core::parameters * external);
75
77 parameters(const parameters & other);
78
80 void operator=(const parameters & other);
81
85 void swap(parameters & other);
86
91
92 // single-value operations
93
101 void set_boolean(const std::string & name, bool value);
102 void set_boolean(const char * name, bool value);
103
109 bool get_boolean(const std::string & name) const;
110 bool get_boolean(const char * name) const;
111
119 void set_integer(const std::string & name, int value);
120 void set_integer(const char * name, int value);
121
127 int get_integer(const std::string & name) const;
128 int get_integer(const char * name) const;
129
137 void set_long_long(const std::string & name, long long value);
138 void set_long_long(const char * name, long long value);
139
145 long long get_long_long(const std::string & name) const;
146 long long get_long_long(const char * name) const;
147
155 void set_word(const std::string & name, unsigned int value);
156 void set_word(const char * name, unsigned int value);
157
163 unsigned int get_word(const std::string & name) const;
164 unsigned int get_word(const char * name) const;
165
173 void set_long_long_word(const std::string & name, unsigned long long value);
174 void set_long_long_word(const char * name, unsigned long long value);
175
181 unsigned long long get_long_long_word(const std::string & name) const;
182 unsigned long long get_long_long_word(const char * name) const;
183
191 void set_double_float(const std::string & name, double value);
192 void set_double_float(const char * name, double value);
193
199 double get_double_float(const std::string & name) const;
200 double get_double_float(const char * name) const;
201
209 void set_string(const std::string & name, const std::string & value);
210 void set_string(const char * name, const char * value);
211
225 void set_string_shallow(const std::string & name,
226 const char * value, std::size_t value_length);
227 void set_string_shallow(const char * name, std::size_t name_length,
228 const char * value, std::size_t value_length);
229
235 std::string get_string(const std::string & name) const;
236 std::string get_string(const char * name) const;
237
245 const char * get_string(const std::string & name,
246 std::size_t & length) const;
247 const char * get_string(const char * name,
248 std::size_t & length) const;
249
258 void set_binary(const std::string & name,
259 const void * value, std::size_t value_length);
260 void set_binary(const char * name,
261 const void * value, std::size_t value_length);
262
276 void set_binary_shallow(const std::string & name,
277 const void * value, std::size_t value_length);
278 void set_binary_shallow(const char * name, std::size_t name_length,
279 const void * value, std::size_t value_length);
280
288 const void * get_binary(const std::string & name,
289 std::size_t & length) const;
290 const void * get_binary(const char * name,
291 std::size_t & length) const;
292
293 // array operations
294
306 void set_boolean_array(const std::string & name,
307 const bool * values, std::size_t array_length);
308 void set_boolean_array(const char * name,
309 const bool * values, std::size_t array_length);
310
323 void set_boolean_array_shallow(const std::string & name,
324 const bool * values, std::size_t array_length);
325 void set_boolean_array_shallow(const char * name,
326 const bool * values, std::size_t array_length);
327
337 bool * get_boolean_array(const std::string & name,
338 std::size_t & array_length) const;
339 bool * get_boolean_array(const char * name,
340 std::size_t & array_length) const;
341
353 void set_integer_array(const std::string & name,
354 const int * values, std::size_t array_length);
355 void set_integer_array(const char * name,
356 const int * values, std::size_t array_length);
357
370 void set_integer_array_shallow(const std::string & name,
371 const int * values, std::size_t array_length);
372 void set_integer_array_shallow(const char * name,
373 const int * values, std::size_t array_length);
374
384 int * get_integer_array(const std::string & name,
385 std::size_t & array_length) const;
386 int * get_integer_array(const char * name,
387 std::size_t & array_length) const;
388
401 void set_long_long_array(const std::string & name,
402 const long long * values, std::size_t array_length);
403 void set_long_long_array(const char * name,
404 const long long * values, std::size_t array_length);
405
419 void set_long_long_array_shallow(const std::string & name,
420 const long long * values, std::size_t array_length);
421 void set_long_long_array_shallow(const char * name,
422 const long long * values, std::size_t array_length);
423
434 long long * get_long_long_array(const std::string & name,
435 std::size_t & array_length) const;
436 long long * get_long_long_array(const char * name,
437 std::size_t & array_length) const;
438
450 void set_word_array(const std::string & name,
451 const unsigned int * values, std::size_t array_length);
452 void set_word_array(const char * name,
453 const unsigned int * values, std::size_t array_length);
454
467 void set_word_array_shallow(const std::string & name,
468 const unsigned int * values, std::size_t array_length);
469 void set_word_array_shallow(const char * name,
470 const unsigned int * values, std::size_t array_length);
471
481 unsigned int * get_word_array(const std::string & name,
482 std::size_t & array_length) const;
483 unsigned int * get_word_array(const char * name,
484 std::size_t & array_length) const;
485
498 void set_long_long_word_array(const std::string & name,
499 const unsigned long long * values, std::size_t array_length);
500 void set_long_long_word_array(const char * name,
501 const unsigned long long * values, std::size_t array_length);
502
516 void set_long_long_word_array_shallow(const std::string & name,
517 const unsigned long long * values, std::size_t array_length);
518 void set_long_long_word_array_shallow(const char * name,
519 const unsigned long long * values, std::size_t array_length);
520
531 unsigned long long * get_long_long_word_array(const std::string & name,
532 std::size_t & array_length) const;
533 unsigned long long * get_long_long_word_array(const char * name,
534 std::size_t & array_length) const;
535
547 void set_double_float_array(const std::string & name,
548 const double * values, std::size_t array_length);
549 void set_double_float_array(const char * name,
550 const double * values, std::size_t array_length);
551
564 void set_double_float_array_shallow(const std::string & name,
565 const double * values, std::size_t array_length);
566 void set_double_float_array_shallow(const char * name,
567 const double * values, std::size_t array_length);
568
579 double * get_double_float_array(const std::string & name,
580 std::size_t & array_length) const;
581 double * get_double_float_array(const char * name,
582 std::size_t & array_length) const;
583
594 void create_string_array(const std::string & name,
595 std::size_t array_length);
596 void create_string_array(const char * name, std::size_t array_length);
597
607 void set_string_in_array(const std::string & name, std::size_t index,
608 const std::string & value);
609 void set_string_in_array(const char * name, std::size_t index,
610 const char * value);
611
619 std::size_t get_string_array_length(const std::string & name) const;
620 std::size_t get_string_array_length(const char * name) const;
621
628 std::string get_string_in_array(const std::string & name,
629 std::size_t index) const;
630 std::string get_string_in_array(const char * name,
631 std::size_t index) const;
632
641 const char * get_string_in_array(const std::string & name,
642 std::size_t index, std::size_t & length) const;
643 const char * get_string_in_array(const char * name,
644 std::size_t index, std::size_t & length) const;
645
656 void create_binary_array(const std::string & name,
657 std::size_t array_length);
658 void create_binary_array(const char * name, std::size_t array_length);
659
670 void set_binary_in_array(const std::string & name, std::size_t index,
671 const void * value, std::size_t value_length);
672 void set_binary_in_array(const char * name, std::size_t index,
673 const void * value, std::size_t value_length);
674
682 std::size_t get_binary_array_length(const std::string & name) const;
683 std::size_t get_binary_array_length(const char * name) const;
684
693 const void * get_binary_in_array(const std::string & name,
694 std::size_t index, std::size_t & length) const;
695 const void * get_binary_in_array(const char * name,
696 std::size_t index, std::size_t & length) const;
697
698 // support for data nesting
699
709 core::parameters * create_nested_parameters(const std::string & name);
710 core::parameters * create_nested_parameters(const char * name);
711
719 core::parameters * get_nested_parameters(const std::string & name) const;
720 core::parameters * get_nested_parameters(const char * name) const;
721
735 void create_nested_array(const std::string & name,
736 std::size_t array_length);
737 void create_nested_array(const char * name, std::size_t array_length);
738
746 std::size_t get_nested_array_length(const std::string & name) const;
747 std::size_t get_nested_array_length(const char * name) const;
748
758 core::parameters * get_nested_in_array(const std::string & name,
759 std::size_t index) const;
760 core::parameters * get_nested_in_array(const char * name,
761 std::size_t index) const;
762
763 // inspection
764
770 std::size_t size() const;
771
777 parameter_type type(const std::string & name) const;
778 parameter_type type(const char * name) const;
779
790 {
791 public:
792 iterator() : empty_(true), it_() {}
793 iterator(core::parameter_iterator it) : empty_(false), it_(it) {}
794
795 bool operator==(const iterator & rhs) const
796 {
797 // this is enough for the input iterator,
798 // because the user cannot legally have two iterators
799 // in the middle of the collection and therefore the comparison
800 // can be used only to check for the end-of-sequence condition
801 return empty_ && rhs.empty_;
802 }
803
804 bool operator!=(const iterator & rhs) const
805 {
806 return operator==(rhs) == false;
807 }
808
809 iterator & operator++()
810 {
811 if (it_.has_next())
812 {
813 it_.move_next();
814 }
815 else
816 {
817 empty_ = true;
818 }
819
820 return *this;
821 }
822
823 iterator operator++(int)
824 {
825 iterator old(*this);
826 operator++();
827 return old;
828 }
829
830 parameter_entry operator*() const
831 {
832 parameter_entry entry;
833 entry.entry_ = it_.current();
834 return entry;
835 }
836
837 private:
838 friend class parameters;
839 bool empty_;
840 core::parameter_iterator it_;
841 };
842
849
854 iterator end() const;
855
864 bool find(const std::string & name, parameter_entry & entry) const;
865 bool find(const char * name, parameter_entry & entry) const;
866
867 // cleanup
868
876 void remove(const std::string & name);
877 void remove(const char * name);
878
886 void remove(iterator it);
887
897 void merge_from(const parameters & other);
898
904 void clear();
905
906 // serialization
907
912 virtual std::size_t serialize_buffer_size() const;
913
928 virtual void serialize(char * * buffers, std::size_t * buffer_sizes,
929 std::size_t num_of_buffers) const;
930
953 void deserialize(const char * * buffers, std::size_t * buffer_sizes,
954 std::size_t num_of_buffers);
955
957 virtual const core::parameters & get_core_object() const;
958
959 // used from unit tests
960 void dump(std::ostream & os) const;
961
962private:
963
964 // values that are owned and controlled by this object
965 std::unique_ptr<core::parameters> own_params_;
966
967 // delegated object (not necessarily own_params_, can be external)
968 // note: it is not owned
969 core::parameters * params_;
970};
971
972} // namespace yami
973
974#endif // YAMICPP_PARAMETERS_H_INCLUDED
Read-only view on the parameters entry.
Definition: parameter_entry.h:26
Iterator class for inspecting entries in the collection.
Definition: parameters.h:790
Collection of message parameters.
Definition: parameters.h:62
parameters()
Constructor.
void set_long_long(const std::string &name, long long value)
Inserts new entry of type long long.
bool * get_boolean_array(const std::string &name, std::size_t &array_length) const
Extracts the array of bool values from the given entry.
void set_word(const std::string &name, unsigned int value)
Inserts new entry of type unsigned int.
unsigned long long get_long_long_word(const std::string &name) const
Extracts the unsigned long long value from the given entry.
parameters(const parameters &other)
Copy constructor.
int * get_integer_array(const std::string &name, std::size_t &array_length) const
Extracts the array of int values from the given entry.
std::size_t get_binary_array_length(const std::string &name) const
Extracts the length of binary array.
void set_boolean_array(const std::string &name, const bool *values, std::size_t array_length)
Inserts new entry of type bool array.
void set_integer(const std::string &name, int value)
Inserts new entry of type int.
void swap(parameters &other)
Swap operation.
const void * get_binary_in_array(const std::string &name, std::size_t index, std::size_t &length) const
Extracts binary value from binary array.
void set_word_array(const std::string &name, const unsigned int *values, std::size_t array_length)
Inserts new entry of type unsigned int array.
void set_binary(const std::string &name, const void *value, std::size_t value_length)
Inserts new entry of type binary.
core::parameters * get_nested_in_array(const std::string &name, std::size_t index) const
Extracts nested parameters value from nested array.
std::size_t get_string_array_length(const std::string &name) const
Extracts the length of string array.
virtual std::size_t serialize_buffer_size() const
Returns the total size of serialization buffer.
iterator begin() const
Extracts the starting iterator for this collection.
bool find(const std::string &name, parameter_entry &entry) const
Finds the given entry.
double * get_double_float_array(const std::string &name, std::size_t &array_length) const
Extracts the array of double values from the given entry.
void set_string_shallow(const std::string &name, const char *value, std::size_t value_length)
Inserts new entry of type string.
unsigned int * get_word_array(const std::string &name, std::size_t &array_length) const
Extracts the array of unsigned int values from the given entry.
virtual void serialize(char **buffers, std::size_t *buffer_sizes, std::size_t num_of_buffers) const
Serializes current content into given buffer(s).
void set_long_long_word_array_shallow(const std::string &name, const unsigned long long *values, std::size_t array_length)
Inserts new entry of type unsigned long long array.
void create_binary_array(const std::string &name, std::size_t array_length)
Creates new empty entry of type binary array.
void remove(const std::string &name)
Removes the given entry.
const void * get_binary(const std::string &name, std::size_t &length) const
Extracts the binary value from the given entry.
void set_double_float_array_shallow(const std::string &name, const double *values, std::size_t array_length)
Inserts new entry of type double array.
void set_binary_shallow(const std::string &name, const void *value, std::size_t value_length)
Inserts new entry of type binary.
void remove(iterator it)
Removes the entry given by its iterator.
void set_boolean(const std::string &name, bool value)
Inserts new entry of type bool.
void set_boolean_array_shallow(const std::string &name, const bool *values, std::size_t array_length)
Inserts new entry of type bool array.
void set_integer_array(const std::string &name, const int *values, std::size_t array_length)
Inserts new entry of type int array.
void clear()
Clears the collection of entries.
void create_string_array(const std::string &name, std::size_t array_length)
Creates new empty entry of type string array.
void set_word_array_shallow(const std::string &name, const unsigned int *values, std::size_t array_length)
Inserts new entry of type unsigned int array.
virtual const core::parameters & get_core_object() const
Provides access to the underlying core object.
void create_nested_array(const std::string &name, std::size_t array_length)
Creates nested parameters array entry.
const char * get_string(const std::string &name, std::size_t &length) const
Extracts the string value from the given entry.
void set_string(const std::string &name, const std::string &value)
Inserts new entry of type string.
void set_long_long_array(const std::string &name, const long long *values, std::size_t array_length)
Inserts new entry of type long long array.
parameters(core::parameters *external)
Constructor.
core::parameters * get_nested_parameters(const std::string &name) const
Extracts the nested parameters object from the given entry.
void set_double_float(const std::string &name, double value)
Inserts new entry of type double.
void set_long_long_array_shallow(const std::string &name, const long long *values, std::size_t array_length)
Inserts new entry of type long long array.
std::size_t size() const
Returns the size of the collection.
unsigned int get_word(const std::string &name) const
Extracts the unsigned int value from the given entry.
long long get_long_long(const std::string &name) const
Extracts the long long value from the given entry.
int get_integer(const std::string &name) const
Extracts the int value from the given entry.
~parameters()
Destructor.
Definition: parameters.h:90
void set_binary_in_array(const std::string &name, std::size_t index, const void *value, std::size_t value_length)
Inserts new binary value to binary array.
void set_long_long_word(const std::string &name, unsigned long long value)
Inserts new entry of type unsigned long long.
void set_integer_array_shallow(const std::string &name, const int *values, std::size_t array_length)
Inserts new entry of type int array.
unsigned long long * get_long_long_word_array(const std::string &name, std::size_t &array_length) const
Extracts the array of unsigned long long values from the given entry.
void set_double_float_array(const std::string &name, const double *values, std::size_t array_length)
Inserts new entry of type double array.
parameter_type type(const std::string &name) const
Extracts the type of the given entry.
core::parameters * create_nested_parameters(const std::string &name)
Creates nested parameters entry.
iterator end() const
Extracts the ending iterator for this collection.
long long * get_long_long_array(const std::string &name, std::size_t &array_length) const
Extracts the array of long long values from the given entry.
const char * get_string_in_array(const std::string &name, std::size_t index, std::size_t &length) const
Extracts string value from string array.
bool get_boolean(const std::string &name) const
Extracts the bool value from the given entry.
std::size_t get_nested_array_length(const std::string &name) const
Extracts the length of nested parameters array.
std::string get_string(const std::string &name) const
Extracts the string value from the given entry.
std::string get_string_in_array(const std::string &name, std::size_t index) const
Extracts string value from string array.
double get_double_float(const std::string &name) const
Extracts the double value from the given entry.
void operator=(const parameters &other)
Assignment operator.
void merge_from(const parameters &other)
Merges entries from the given parameters object.
void set_long_long_word_array(const std::string &name, const unsigned long long *values, std::size_t array_length)
Inserts new entry of type unsigned long long array.
void deserialize(const char **buffers, std::size_t *buffer_sizes, std::size_t num_of_buffers)
Deserializes from the given buffer(s).
void set_string_in_array(const std::string &name, std::size_t index, const std::string &value)
Inserts new string value to string array.
Common interface for serializable data source.
Definition: serializable.h:21
Namespace devoted to everything related to YAMI4.
Definition: agent.h:21
parameter_type
Type of parameter entry.
Definition: parameter_type.h:13