MADARA  3.4.1
Vector.h
Go to the documentation of this file.
1 
2 #ifndef _MADARA_CONTAINERS_VECTOR_H_
3 #define _MADARA_CONTAINERS_VECTOR_H_
4 
5 #include <vector>
6 #include <string>
7 #include <iostream>
8 #include "madara/LockType.h"
12 #include "BaseContainer.h"
13 
22 namespace madara
23 {
24 namespace knowledge
25 {
26 namespace containers
27 {
28 // forward declare a friend class
29 class Queue;
30 
35 class MADARA_EXPORT Vector : public BaseContainer
36 {
37 public:
40  friend class Queue;
41  friend class CircularBuffer;
42  friend class CircularBufferConsumer;
43 
46  template<typename T>
47  friend class CircularBufferT;
48  template<typename T>
49  friend class CircularBufferConsumerT;
50 
57  const std::string& delimiter = ".");
58 
69  Vector(const std::string& name, KnowledgeBase& knowledge, int size = -1,
70  bool delete_vars = true,
72  const std::string& delimiter = ".");
73 
84  Vector(const std::string& name, Variables& knowledge, int size = -1,
85  bool delete_vars = true,
87  const std::string& delimiter = ".");
88 
92  Vector(const Vector& rhs);
93 
97  virtual ~Vector();
98 
103  void modify(void);
104 
110  void modify(size_t index);
111 
115  void modify_size(void);
116 
121  void operator=(const Vector& rhs);
122 
128  void push_back(KnowledgeRecord value);
129 
136  void resize(int size = -1, bool delete_vars = true);
137 
146  void exchange(
147  Vector& other, bool refresh_keys = true, bool delete_keys = true);
148 
153  void transfer_to(Vector& other);
154 
160  size_t size(void) const;
161 
168  void set_name(
169  const std::string& var_name, KnowledgeBase& knowledge, int size = -1);
170 
177  void set_name(
178  const std::string& var_name, Variables& knowledge, int size = -1);
179 
186  void set_name(
187  const std::string& var_name, ThreadSafeContext& knowledge, int size = -1);
188 
196  void set_delimiter(const std::string& delimiter);
197 
205  std::string get_delimiter(void);
206 
213  knowledge::KnowledgeRecord operator[](size_t index) const;
214 
223  knowledge::KnowledgeRecord to_record(size_t index) const;
224 
229  void copy_to(KnowledgeVector& target) const;
230 
237  bool exists(size_t index) const;
238 
244  int read_file(size_t index, const std::string& filename);
245 
252  int read_file(size_t index, const std::string& filename,
253  const KnowledgeUpdateSettings& settings);
254 
262  int set_file(size_t index, const unsigned char* value, size_t size);
263 
272  int set_file(size_t index, const unsigned char* value, size_t size,
273  const KnowledgeUpdateSettings& settings);
274 
282  int set_jpeg(size_t index, const unsigned char* value, size_t size);
283 
292  int set_jpeg(size_t index, const unsigned char* value, size_t size,
293  const KnowledgeUpdateSettings& settings);
294 
303  int set(size_t index, madara::knowledge::KnowledgeRecord::Integer value =
305 
315  int set(size_t index, madara::knowledge::KnowledgeRecord::Integer value,
316  const KnowledgeUpdateSettings& settings);
317 
327  int set_index(size_t index, size_t sub_index,
329 
340  int set_index(size_t index, size_t sub_index,
342  const KnowledgeUpdateSettings& settings);
343 
353  int set(size_t index,
354  const madara::knowledge::KnowledgeRecord::Integer* value, uint32_t size);
355 
366  int set(size_t index,
367  const madara::knowledge::KnowledgeRecord::Integer* value, uint32_t size,
368  const KnowledgeUpdateSettings& settings);
369 
378  int set(size_t index, const std::vector<KnowledgeRecord::Integer>& value);
379 
389  int set(size_t index, const std::vector<KnowledgeRecord::Integer>& value,
390  const KnowledgeUpdateSettings& settings);
391 
400  int set(size_t index, double value);
401 
411  int set(size_t index, double value, const KnowledgeUpdateSettings& settings);
412 
422  int set_index(size_t index, size_t sub_index, double value);
423 
434  int set_index(size_t index, size_t sub_index, double value,
435  const KnowledgeUpdateSettings& settings);
436 
446  int set(size_t index, const double* value, uint32_t size);
447 
458  int set(size_t index, const double* value, uint32_t size,
459  const KnowledgeUpdateSettings& settings);
460 
469  int set(size_t index, const std::vector<double>& value);
470 
480  int set(size_t index, const std::vector<double>& value,
481  const KnowledgeUpdateSettings& settings);
482 
491  int set(size_t index, const std::string& value);
492 
502  int set(size_t index, const std::string& value,
503  const KnowledgeUpdateSettings& settings);
504 
513  int set(size_t index, const KnowledgeRecord& value);
514 
524  int set(size_t index, const KnowledgeRecord& value,
525  const KnowledgeUpdateSettings& settings);
526 
534  void set_quality(size_t index, uint32_t quality,
536  false));
537 
542  VariableReference get_size_ref(void);
543 
553  std::string get_debug_info(void);
554 
560  virtual BaseContainer* clone(void) const;
561 
566  bool is_true(void) const;
567 
572  bool is_false(void) const;
573 
574 private:
579  virtual bool is_true_(void) const;
580 
585  virtual bool is_false_(void) const;
586 
595  virtual void modify_(void);
596 
606  virtual std::string get_debug_info_(void);
607 
612 
616  std::vector<VariableReference> vector_;
617 
622 
627 };
628 
630 typedef Vector Array;
631 }
632 }
633 }
634 
635 #include "Vector.inl"
636 
637 #endif // _MADARA_CONTAINERS_VECTOR_H_
This class provides a distributed knowledge base to users.
Definition: KnowledgeBase.h:45
This class encapsulates an entry in a KnowledgeBase.
Settings for applying knowledge updates.
Settings for applying knowledge updates.
This class stores variables and their values for use by any entity needing state information in a thr...
Optimized reference to a variable within the knowledge base.
Provides an interface for external functions into the MADARA KaRL variable settings.
Definition: Variables.h:53
This class is an abstract base class for all containers.
Definition: BaseContainer.h:34
This container stores a thread-safe, personalized consumer for CircularBuffer instances.
This container stores a thread-safe circular buffer with O(1) access times.
This class stores thread-safe queue within the knowledge base.
Definition: Queue.h:35
This class stores a vector of KaRL variables.
Definition: Vector.h:36
VariableReference size_
Reference to the size field of the vector space.
Definition: Vector.h:621
std::vector< VariableReference > vector_
Values of the array.
Definition: Vector.h:616
std::string delimiter_
Delimiter for the prefix to subvars.
Definition: Vector.h:626
ThreadSafeContext * context_
Variable context that we are modifying.
Definition: Vector.h:611
Provides container classes for fast knowledge base access and mutation.
Definition: Barrier.h:27
Vector Array
provide the Array alias for the Vector class
Definition: Vector.h:630
constexpr string_t string
Provides functions and classes for the distributed knowledge base.
::std::vector< KnowledgeRecord > KnowledgeVector
MADARA_EXPORT bool exists(const char *originator, uint64_t clock, uint32_t update_number, OriginatorFragmentMap &map)
Checks if a fragment already exists within a fragment map.
int read_file(const std::string &filename, void *&buffer, size_t &size, bool add_zero_char)
Reads a file into a provided void pointer.
Definition: Utility.cpp:418
Copyright(c) 2020 Galois.