MADARA  3.4.1
Queue.inl
Go to the documentation of this file.
1 
2 #ifndef _MADARA_CONTAINERS_QUEUE_INL_
3 #define _MADARA_CONTAINERS_QUEUE_INL_
4 
5 #include <sstream>
6 
7 #include "Queue.h"
9 
11  const KnowledgeUpdateSettings& settings)
12  : context_(0), settings_(settings)
13 {
14 }
15 
18  : context_(&(knowledge.get_context())),
19  name_(name),
20  count_(name + ".count", knowledge, 0),
21  head_(name + ".head", knowledge, 0),
22  tail_(name + ".tail", knowledge, 0),
23  queue_(name, knowledge),
24  settings_(settings)
25 {
26  resize();
27 }
28 
31  : context_(knowledge.get_context()),
32  name_(name),
33  count_(name + ".count", knowledge),
34  head_(name + ".head", knowledge),
35  tail_(name + ".tail", knowledge),
36  queue_(name, knowledge),
37  settings_(settings)
38 {
39  resize();
40 }
41 
43  KnowledgeBase& knowledge, int size, const KnowledgeUpdateSettings& settings)
44  : context_(&(knowledge.get_context())),
45  name_(name),
46  count_(name + ".count", knowledge, 0),
47  head_(name + ".head", knowledge, 0),
48  tail_(name + ".tail", knowledge, 0),
49  queue_(name, knowledge, size, false, settings),
50  settings_(settings)
51 {
52 }
53 
55  Variables& knowledge, int size, const KnowledgeUpdateSettings& settings)
56  : context_(knowledge.get_context()),
57  name_(name),
58  count_(name + ".count", knowledge, 0),
59  head_(name + ".head", knowledge, 0),
60  tail_(name + ".tail", knowledge, 0),
61  queue_(name, knowledge, size, false, settings),
62  settings_(settings)
63 {
64 }
65 
67  : context_(rhs.context_),
68  name_(rhs.name_),
69  count_(rhs.count_),
70  head_(rhs.head_),
71  tail_(rhs.tail_),
72  queue_(rhs.queue_),
73  settings_(rhs.settings_)
74 {
75 }
76 
78 {
79  if (this != &rhs)
80  {
81  MADARA_GUARD_TYPE guard(mutex_), guard2(rhs.mutex_);
82 
83  this->context_ = rhs.context_;
84  this->name_ = rhs.name_;
85  this->count_ = rhs.count_;
86  this->head_ = rhs.head_;
87  this->tail_ = rhs.tail_;
88  this->queue_ = rhs.queue_;
89  this->settings_ = rhs.settings_;
90  }
91 }
92 
94  const Queue& value) const
95 {
96  return name_ == value.get_name();
97 }
98 
100  const Queue& value) const
101 {
102  return name_ != value.get_name();
103 }
104 
105 template<typename... Args>
107 {
108  return enqueue(KnowledgeRecord(std::forward<Args>(args)...));
109 }
110 
112 {
113  if (context_ && name_ != "" && count_ > 0)
114  {
115  ContextGuard context_guard(*context_);
116  MADARA_GUARD_TYPE guard(mutex_);
117 
118  count_ = 0;
119  head_ = *tail_;
120  }
121 }
122 
125 {
127  if (context_ && name_ != "" && (KnowledgeRecord::Integer)position < *count_)
128  {
129  ContextGuard context_guard(*context_);
130  MADARA_GUARD_TYPE guard(mutex_);
131 
132  size_t index =
133  (size_t)increment(*head_, (KnowledgeRecord::Integer)position);
134 
135  result = context_->get(queue_.vector_[index], settings_);
136  }
137  return result;
138 }
139 
141 {
142  MADARA_GUARD_TYPE guard(mutex_);
143  return name_;
144 }
145 
147 {
148  return queue_.size();
149 }
150 
152 {
153  return (size_t)(*count_);
154 }
155 
157 {
158  if (context_)
159  {
160  ContextGuard context_guard(*context_);
161  MADARA_GUARD_TYPE guard(mutex_);
162 
163  queue_.resize(size, false);
164 
165  if (count_ > (KnowledgeRecord::Integer)queue_.size())
166  {
167  count_ = (KnowledgeRecord::Integer)size;
168  }
169  }
170 }
171 
174  const KnowledgeUpdateSettings& settings)
175 {
176  MADARA_GUARD_TYPE guard(mutex_);
177 
178  KnowledgeUpdateSettings old_settings = settings_;
179 
180  settings_ = settings;
181 
182  return old_settings;
183 }
184 
186  uint32_t quality, const KnowledgeReferenceSettings& settings)
187 {
188  if (context_)
189  {
190  ContextGuard context_guard(*context_);
191  MADARA_GUARD_TYPE guard(mutex_);
192  context_->set_quality(name_, quality, true, settings);
193  }
194 }
195 
196 #endif // _MADARA_CONTAINERS_QUEUE_INL_
const ThreadSafeContext * context_
madara::knowledge::KnowledgeRecord KnowledgeRecord
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.
Settings for applying knowledge updates.
Provides an interface for external functions into the MADARA KaRL variable settings.
Definition: Variables.h:53
This class stores thread-safe queue within the knowledge base.
Definition: Queue.h:35
ThreadSafeContext * context_
Variable context that we are modifying.
Definition: Queue.h:233
void set_quality(uint32_t quality, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings(false))
Sets the quality of writing to the counter variables.
Definition: Queue.inl:185
Integer count_
Count of elements in queue.
Definition: Queue.h:243
size_t count(void)
Returns the number of records in the queue.
Definition: Queue.inl:151
Integer tail_
Tail of the queue.
Definition: Queue.h:253
void operator=(const Queue &rhs)
Assignment operator.
Definition: Queue.inl:77
size_t size(void)
Returns the maximum size of the queue.
Definition: Queue.inl:146
void resize(int size=-1)
Resizes the queue.
Definition: Queue.inl:156
void clear(void)
Clears the queue.
Definition: Queue.inl:111
KnowledgeUpdateSettings set_settings(const KnowledgeUpdateSettings &settings)
Sets the update settings for the variable.
Definition: Queue.inl:173
Queue(const KnowledgeUpdateSettings &settings=KnowledgeUpdateSettings())
Default constructor.
Definition: Queue.inl:10
std::string name_
Prefix of variable.
Definition: Queue.h:238
std::string get_name(void) const
Returns the name of the variable.
Definition: Queue.inl:140
MADARA_LOCK_TYPE mutex_
guard for access and changes
Definition: Queue.h:228
KnowledgeUpdateSettings settings_
Settings for modifications.
Definition: Queue.h:263
bool operator!=(const Queue &value) const
Checks for inequality.
Definition: Queue.inl:99
bool emplace(Args &&... args)
Enqueues a new record to the end of the queue.
Definition: Queue.inl:106
knowledge::KnowledgeRecord inspect(size_t position)
Retrieves a record at a position in the queue.
Definition: Queue.inl:124
bool operator==(const Queue &value) const
Checks for equality.
Definition: Queue.inl:93
Integer head_
Head of the queue.
Definition: Queue.h:248
Vector queue_
Underlying array of records.
Definition: Queue.h:258
constexpr string_t string
Provides functions and classes for the distributed knowledge base.