MADARA  3.4.1
Vector.inl
Go to the documentation of this file.
1 
2 #ifndef _MADARA_KNOWLEDGE_CONTAINERS_VECTOR_INL_
3 #define _MADARA_KNOWLEDGE_CONTAINERS_VECTOR_INL_
4 
5 #include <sstream>
6 
7 #include "Vector.h"
9 
17 namespace madara
18 {
19 namespace knowledge
20 {
21 namespace containers
22 {
23 inline size_t Vector::size(void) const
24 {
25  MADARA_GUARD_TYPE guard(mutex_);
26  return vector_.size();
27 }
28 
29 inline void Vector::set_name(
30  const std::string& var_name, KnowledgeBase& knowledge, int size)
31 {
32  if (context_ != &(knowledge.get_context()) || name_ != var_name)
33  {
34  context_ = &(knowledge.get_context());
35 
36  ContextGuard context_guard(*context_);
37  MADARA_GUARD_TYPE guard(mutex_);
38 
39  name_ = var_name;
40 
41  vector_.clear();
42 
43  size_ = get_size_ref();
44 
45  resize(size);
46  }
47 }
48 
49 inline void Vector::set_name(
50  const std::string& var_name, Variables& knowledge, int size)
51 {
52  if (context_ != knowledge.get_context() || name_ != var_name)
53  {
54  context_ = knowledge.get_context();
55 
56  ContextGuard context_guard(*context_);
57  MADARA_GUARD_TYPE guard(mutex_);
58 
59  name_ = var_name;
60 
61  vector_.clear();
62  resize(size);
63  }
64 }
65 
66 inline void Vector::set_name(
67  const std::string& var_name, ThreadSafeContext& knowledge, int size)
68 {
69  if (context_ != &knowledge || name_ != var_name)
70  {
72 
73  ContextGuard context_guard(*context_);
74  MADARA_GUARD_TYPE guard(mutex_);
75 
76  name_ = var_name;
77 
78  vector_.clear();
79  resize(size);
80  }
81 }
82 
83 inline void Vector::set_delimiter(const std::string& delimiter)
84 {
85  delimiter_ = delimiter;
86  if (context_)
87  {
88  ContextGuard context_guard(*context_);
89  MADARA_GUARD_TYPE guard(mutex_);
90 
91  vector_.clear();
92  resize(-1);
93  }
94 }
95 
97 {
98  return delimiter_;
99 }
100 
101 inline int Vector::set(size_t index, const KnowledgeRecord& value,
102  const KnowledgeUpdateSettings& settings)
103 {
104  int result = -1;
105 
106  if (index < vector_.size() && context_)
107  {
108  ContextGuard context_guard(*context_);
109  MADARA_GUARD_TYPE guard(mutex_);
110  result = context_->set(vector_[index], value, settings);
111  }
112 
113  return result;
114 }
115 
116 inline int Vector::set(size_t index, const KnowledgeRecord& value)
117 {
118  return set(index, value, settings_);
119 }
120 
121 inline void Vector::modify_size(void)
122 {
123  if (context_)
124  {
126  }
127 }
128 
129 } // end containers namespace
130 } // end knowledge namespace
131 } // end madara namespace
132 
133 #endif // _MADARA_KNOWLEDGE_CONTAINERS_VECTOR_INL_
A thread-safe guard for a context or knowledge base.
Definition: ContextGuard.h:24
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.
This class stores variables and their values for use by any entity needing state information in a thr...
void mark_modified(const VariableReference &variable, const KnowledgeUpdateSettings &settings=KnowledgeUpdateSettings())
Marks the variable reference as updated for the purposes of sending or checkpointing knowledge (for g...
int set(const std::string &key, T &&value, const KnowledgeUpdateSettings &settings=KnowledgeUpdateSettings())
Atomically sets the value of a variable to the specific record.
Provides an interface for external functions into the MADARA KaRL variable settings.
Definition: Variables.h:53
KnowledgeUpdateSettings settings_
Settings for modifications.
std::string name_
Prefix of variable.
MADARA_LOCK_TYPE mutex_
guard for access and changes
VariableReference size_
Reference to the size field of the vector space.
Definition: Vector.h:621
VariableReference get_size_ref(void)
Returns a reference to the size field of the current name.
Definition: Vector.cpp:131
std::string get_delimiter(void)
Gets the delimiter for adding and detecting subvariables.
Definition: Vector.inl:96
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
void set_name(const std::string &var_name, KnowledgeBase &knowledge, int size=-1)
Sets the variable name that this refers to.
Definition: Vector.inl:29
void set_delimiter(const std::string &delimiter)
Sets the delimiter for adding and detecting subvariables.
Definition: Vector.inl:83
ThreadSafeContext * context_
Variable context that we are modifying.
Definition: Vector.h:611
void resize(int size=-1, bool delete_vars=true)
Resizes the vector.
Definition: Vector.cpp:200
void modify_size(void)
Mark the size as modified to resent that information.
Definition: Vector.inl:121
int set(size_t index, madara::knowledge::KnowledgeRecord::Integer value=madara::knowledge::KnowledgeRecord::MODIFIED)
Sets a knowledge variable to a specified value.
Definition: Vector.cpp:555
size_t size(void) const
Returns the size of the local vector.
Definition: Vector.inl:23
Provides container classes for fast knowledge base access and mutation.
Definition: Barrier.h:27
constexpr string_t string
Provides functions and classes for the distributed knowledge base.
Copyright(c) 2020 Galois.