MADARA  3.2.3
ThreadSafeContext.h
Go to the documentation of this file.
1 #ifndef MADARA_THREADSAFECONTEXT_H
2 #define MADARA_THREADSAFECONTEXT_H
3 
12 #include "madara/logger/Logger.h"
13 
14 #include <string>
15 #include <map>
17 
18 #include "madara/MadaraExport.h"
19 #include "madara/LockType.h"
28 
29 #ifdef _MADARA_JAVA_
30 #include "madara_jni.h"
31 #endif
32 
33 #ifdef _MADARA_PYTHON_CALLBACKS_
34 #include "madara/Boost.h"
35 #include "boost/python/object.hpp"
36 #endif
37 
38 namespace madara
39 {
40  namespace expression
41  {
42  class Interpreter;
43  class CompositeArrayReference;
44  class VariableNode;
45  }
46 
47  namespace knowledge
48  {
49  namespace rcw
50  {
51  class BaseTracker;
52  }
53 
60  typedef std::map <std::string, bool> CopySet;
61 
65  typedef std::vector <std::string> PrefixVector;
66 
68  class KnowledgeBaseImpl;
69 
75  class MADARA_EXPORT ThreadSafeContext
76  {
77  public:
78  friend class KnowledgeBaseImpl;
81  friend class rcw::BaseTracker;
82 
87 
91  ~ThreadSafeContext (void);
92 
100  get (const std::string & key,
101  const KnowledgeReferenceSettings & settings =
102  KnowledgeReferenceSettings ()) const;
103 
111  get (const VariableReference & variable,
112  const KnowledgeReferenceSettings & settings =
113  KnowledgeReferenceSettings ()) const;
114 
115  private:
123  with (const std::string & key,
124  const KnowledgeReferenceSettings & settings =
126 
134  with (const VariableReference & variable,
135  const KnowledgeReferenceSettings & settings =
144  with (const std::string & key,
145  const KnowledgeReferenceSettings & settings =
146  KnowledgeReferenceSettings ()) const;
147 
155  with (const VariableReference & variable,
156  const KnowledgeReferenceSettings & settings =
157  KnowledgeReferenceSettings ()) const;
158 
159  template<typename T>
160  using MethodType = std::shared_ptr<T> (KnowledgeRecord::*) (void);
161 
162  template<typename T, MethodType<T> Get, typename K>
163  std::shared_ptr<T> get_shared(K&& key,
164  const KnowledgeReferenceSettings & settings)
165  {
166  auto rec = with (std::forward<K>(key), settings);
167  if (rec) {
168  return (rec->*Get) ();
169  }
170  return nullptr;
171  }
172 
173  template<typename T>
174  using ConstMethodType = std::shared_ptr<T> (KnowledgeRecord::*) (void) const;
175 
176  template<typename T, ConstMethodType<T> Get, typename K>
177  std::shared_ptr<T> get_shared(K&& key,
178  const KnowledgeReferenceSettings & settings) const
179  {
180  auto rec = with (std::forward<K>(key), settings);
181  if (rec) {
182  return (rec->*Get) ();
183  }
184  return nullptr;
185  }
186 
187  public:
192  std::shared_ptr<std::string> share_string(const std::string & key,
193  const KnowledgeReferenceSettings & settings =
195  {
196  return get_shared<std::string, &KnowledgeRecord::share_string>(key, settings);
197  }
198 
203  std::shared_ptr<std::string> share_string(const VariableReference & key,
204  const KnowledgeReferenceSettings & settings =
206  {
207  return get_shared<std::string, &KnowledgeRecord::share_string>(key, settings);
208  }
209 
215  std::shared_ptr<std::string> take_string(const std::string & key,
216  const KnowledgeReferenceSettings & settings =
218  {
219  return get_shared<std::string, &KnowledgeRecord::take_string>(key, settings);
220  }
221 
227  std::shared_ptr<std::string> take_string(const VariableReference & key,
228  const KnowledgeReferenceSettings & settings =
230  {
231  return get_shared<std::string, &KnowledgeRecord::take_string>(key, settings);
232  }
233 
238  std::shared_ptr<std::vector<KnowledgeRecord::Integer>>
240  const KnowledgeReferenceSettings & settings =
242  {
243  return get_shared<std::vector<KnowledgeRecord::Integer>,
244  &KnowledgeRecord::share_integers>(key, settings);
245  }
246 
251  std::shared_ptr<std::vector<KnowledgeRecord::Integer>>
253  const KnowledgeReferenceSettings & settings =
255  {
256  return get_shared<std::vector<KnowledgeRecord::Integer>,
257  &KnowledgeRecord::share_integers>(key, settings);
258  }
259 
265  std::shared_ptr<std::vector<KnowledgeRecord::Integer>>
267  const KnowledgeReferenceSettings & settings =
269  {
270  return get_shared<std::vector<KnowledgeRecord::Integer>,
271  &KnowledgeRecord::take_integers>(key, settings);
272  }
273 
279  std::shared_ptr<std::vector<KnowledgeRecord::Integer>>
281  const KnowledgeReferenceSettings & settings =
283  {
284  return get_shared<std::vector<KnowledgeRecord::Integer>,
285  &KnowledgeRecord::take_integers>(key, settings);
286  }
287 
292  std::shared_ptr<std::vector<double>>
294  const KnowledgeReferenceSettings & settings =
296  {
297  return get_shared<std::vector<double>,
298  &KnowledgeRecord::share_doubles>(key, settings);
299  }
300 
305  std::shared_ptr<std::vector<double>>
307  const KnowledgeReferenceSettings & settings =
309  {
310  return get_shared<std::vector<double>,
311  &KnowledgeRecord::share_doubles>(key, settings);
312  }
313 
319  std::shared_ptr<std::vector<double>>
321  const KnowledgeReferenceSettings & settings =
323  {
324  return get_shared<std::vector<double>,
325  &KnowledgeRecord::take_doubles>(key, settings);
326  }
327 
333  std::shared_ptr<std::vector<double>>
335  const KnowledgeReferenceSettings & settings =
337  {
338  return get_shared<std::vector<double>,
339  &KnowledgeRecord::take_doubles>(key, settings);
340  }
341 
346  std::shared_ptr<std::vector<unsigned char>>
348  const KnowledgeReferenceSettings & settings =
350  {
351  return get_shared<std::vector<unsigned char>,
352  &KnowledgeRecord::share_binary>(key, settings);
353  }
354 
359  std::shared_ptr<std::vector<unsigned char>>
361  const KnowledgeReferenceSettings & settings =
363  {
364  return get_shared<std::vector<unsigned char>,
365  &KnowledgeRecord::share_binary>(key, settings);
366  }
367 
373  std::shared_ptr<std::vector<unsigned char>>
375  const KnowledgeReferenceSettings & settings =
377  {
378  return get_shared<std::vector<unsigned char>,
379  &KnowledgeRecord::take_binary>(key, settings);
380  }
381 
387  std::shared_ptr<std::vector<unsigned char>>
389  const KnowledgeReferenceSettings & settings =
391  {
392  return get_shared<std::vector<unsigned char>,
393  &KnowledgeRecord::take_binary>(key, settings);
394  }
395 
405  get_ref (const std::string & key,
406  const KnowledgeReferenceSettings & settings =
408 
417  get_ref (const std::string & key,
418  const KnowledgeReferenceSettings & settings =
419  KnowledgeReferenceSettings ()) const;
420 
428  KnowledgeRecord retrieve_index (const std::string & key,
429  size_t index,
430  const KnowledgeReferenceSettings & settings =
432 
440  KnowledgeRecord retrieve_index (
441  const VariableReference & variable,
442  size_t index,
443  const KnowledgeReferenceSettings & settings =
445 
455  KnowledgeRecord * get_record (const std::string & key,
456  const KnowledgeReferenceSettings & settings =
458 
467  int set_xml (const std::string & key,
468  const char * value, size_t size,
469  const KnowledgeUpdateSettings & settings =
471 
480  int set_xml (const VariableReference & variable,
481  const char * value, size_t size,
482  const KnowledgeUpdateSettings & settings =
484 
493  int set_jpeg (const std::string & key,
494  const unsigned char * value, size_t size,
495  const KnowledgeUpdateSettings & settings =
497 
506  int set_jpeg (const VariableReference & variable,
507  const unsigned char * value, size_t size,
508  const KnowledgeUpdateSettings & settings =
510 
519  int set_file (const std::string & key,
520  const unsigned char * value, size_t size,
521  const KnowledgeUpdateSettings & settings =
523 
532  int set_file (const VariableReference & variable,
533  const unsigned char * value, size_t size,
534  const KnowledgeUpdateSettings & settings =
536 
545  int set_text (const std::string & key,
546  const char * value, size_t size,
547  const KnowledgeUpdateSettings & settings =
549 
558  int set_text (const VariableReference & variable,
559  const char * value, size_t size,
560  const KnowledgeUpdateSettings & settings =
562 
571  template<typename T>
572  int set_index (const std::string & key,
573  size_t index, T&& value,
574  const KnowledgeUpdateSettings & settings =
576 
585  template<typename T>
586  int set_index (const VariableReference & variable,
587  size_t index, T&& value,
588  const KnowledgeUpdateSettings & settings =
590 
600  template<typename T>
601  int set_index_unsafe (const VariableReference & variable,
602  size_t index, T&& value,
603  const KnowledgeUpdateSettings & settings =
605 
614  template<typename T>
615  int set (const std::string & key,
616  T && value,
617  const KnowledgeUpdateSettings & settings =
619 
627  template<typename T>
628  int set (const VariableReference & variable,
629  T && value,
630  const KnowledgeUpdateSettings & settings =
632 
641  template<typename T>
642  int set (const std::string & key,
643  const T * value,
644  uint32_t size,
645  const KnowledgeUpdateSettings & settings =
647 
656  template<typename T>
657  int set (const VariableReference & variable,
658  const T * value,
659  uint32_t size,
660  const KnowledgeUpdateSettings & settings =
662 
672  template<typename T>
673  int set_unsafe (const VariableReference & variable,
674  T && value,
675  const KnowledgeUpdateSettings & settings =
677 
688  template<typename T>
689  int set_unsafe (const VariableReference & variable,
690  const T * array,
691  size_t size,
692  const KnowledgeUpdateSettings & settings =
694 
702  int
703  read_file (
704  const std::string & key,
705  const std::string & filename,
706  const KnowledgeUpdateSettings & settings =
708 
716  int
717  read_file (
718  const VariableReference & variable,
719  const std::string & filename,
720  const KnowledgeUpdateSettings & settings =
722 
733  int set_if_unequal (const std::string & key,
735  uint32_t quality, uint64_t clock,
736  const KnowledgeUpdateSettings & settings =
738 
749  int set_if_unequal (const std::string & key,
750  double value,
751  uint32_t quality, uint64_t clock,
752  const KnowledgeUpdateSettings & settings =
754 
765  int set_if_unequal (const std::string & key,
766  const std::string & value,
767  uint32_t quality, uint64_t clock,
768  const KnowledgeUpdateSettings & settings =
770 
781  int update_record_from_external (
782  const std::string & key, const knowledge::KnowledgeRecord & rhs,
783  const KnowledgeUpdateSettings & settings =
784  KnowledgeUpdateSettings (true));
785 
796  int update_record_from_external (
797  const VariableReference & target,
798  const knowledge::KnowledgeRecord & new_value,
799  const KnowledgeUpdateSettings & settings =
800  KnowledgeUpdateSettings (true));
801 
808  uint32_t get_quality (const std::string & key,
809  const KnowledgeReferenceSettings & settings =
811 
818  uint32_t get_write_quality (const std::string & key,
819  const KnowledgeReferenceSettings & settings =
821 
830  uint32_t set_quality (const std::string & key,
831  uint32_t quality, bool force_update,
832  const KnowledgeReferenceSettings & settings);
833 
837  void set_changed (void);
838 
845  void set_write_quality (const std::string & key, uint32_t quality,
846  const KnowledgeReferenceSettings & settings);
847 
853  const VariableReferenceMap & get_modifieds (void) const;
854 
859  void add_modifieds (const VariableReferences & modifieds) const;
860 
869  VariableReferences save_modifieds (void) const;
870 
876  std::string debug_modifieds (void) const;
877 
883  const VariableReferenceMap & get_local_modified (void) const;
884 
889  void reset_modified (void);
890 
895  void reset_checkpoint (void) const;
896 
900  void apply_modified (void);
901 
908  void mark_modified (const VariableReference & variable,
909  const KnowledgeUpdateSettings & settings = KnowledgeUpdateSettings());
910 
917  void mark_modified (const std::string & key,
918  const KnowledgeUpdateSettings & settings = KnowledgeUpdateSettings ());
919 
926  void mark_to_send (const VariableReference & variable,
927  const KnowledgeUpdateSettings & settings = KnowledgeUpdateSettings());
928 
935  void mark_to_send (const std::string & key,
936  const KnowledgeUpdateSettings & settings = KnowledgeUpdateSettings ());
937 
944  void mark_to_checkpoint (const VariableReference & variable,
945  const KnowledgeUpdateSettings & settings = KnowledgeUpdateSettings());
946 
953  void mark_to_checkpoint (const std::string & key,
954  const KnowledgeUpdateSettings & settings = KnowledgeUpdateSettings ());
955 
960  void reset_modified (const std::string & key);
961 
969  const KnowledgeUpdateSettings & settings =
971 
979  const KnowledgeUpdateSettings & settings =
981 
986  void wait_for_change (bool extra_release = false);
987 
995  const KnowledgeUpdateSettings & settings =
997 
1005  const KnowledgeUpdateSettings & settings =
1007 
1017  bool clear (const std::string & key,
1018  const KnowledgeReferenceSettings & settings =
1020 
1035  bool delete_variable (const std::string & key,
1036  const KnowledgeReferenceSettings & settings =
1038 
1055  bool delete_variable (const VariableReference & var,
1056  const KnowledgeReferenceSettings & settings =
1058 
1074  void delete_variables(KnowledgeMap::iterator begin,
1075  KnowledgeMap::iterator end,
1076  const KnowledgeReferenceSettings & settings =
1078 
1084  void delete_prefix (const std::string & prefix,
1085  const KnowledgeReferenceSettings & settings =
1087 
1093  bool delete_expression (const std::string & expression);
1094 
1101  bool exists (const std::string & key,
1102  const KnowledgeReferenceSettings & settings =
1103  KnowledgeReferenceSettings ()) const;
1104 
1112  bool exists (const VariableReference & variable,
1113  const KnowledgeReferenceSettings & settings =
1114  KnowledgeReferenceSettings (false)) const;
1115 
1120  void print (unsigned int level) const;
1121 
1128  void print (const std::string & statement, unsigned int level) const;
1129 
1135  void clear (bool erase = false);
1136 
1143  void lock (void) const;
1144 
1152  bool try_lock (void) const;
1153 
1157  void unlock (void) const;
1158 
1165  uint64_t inc_clock (const KnowledgeUpdateSettings & settings =
1167 
1175  uint64_t inc_clock (const std::string & key,
1176  const KnowledgeUpdateSettings & settings =
1178 
1184  uint64_t set_clock (uint64_t clock);
1185 
1194  uint64_t set_clock (const std::string & key,
1195  uint64_t clock,
1196  const KnowledgeReferenceSettings & settings =
1198 
1203  uint64_t get_clock (void) const;
1204 
1211  uint64_t get_clock (
1212  const std::string & key,
1213  const KnowledgeReferenceSettings & settings =
1214  KnowledgeReferenceSettings ()) const;
1215 
1220  void signal (bool lock = true) const;
1221 
1229  std::string expand_statement (const std::string & statement) const;
1230 
1240  void copy (const ThreadSafeContext & source,
1241  const KnowledgeRequirements & settings);
1242 
1243 
1263  void copy (const ThreadSafeContext & source,
1264  const CopySet & copy_set = CopySet (),
1265  bool clean_copy = false);
1266 
1267 
1268 #ifndef _MADARA_NO_KARL_
1269 
1278  compile (const std::string & expression);
1279 
1286  void define_function (const std::string & name,
1288  const KnowledgeReferenceSettings & settings =
1290 
1298  void define_function (const std::string & name,
1299  knowledge::KnowledgeRecord (*func) (const char *, FunctionArguments &, Variables &),
1300  const KnowledgeReferenceSettings & settings =
1302 
1303 #ifdef _MADARA_JAVA_
1304 
1310  void define_function (const std::string & name, jobject callable,
1311  const KnowledgeReferenceSettings & settings =
1313 #endif
1314 
1315 #ifdef _MADARA_PYTHON_CALLBACKS_
1316 
1322  void define_function (const std::string & name, boost::python::object callable,
1323  const KnowledgeReferenceSettings & settings =
1325 #endif
1326 
1333  void define_function (const std::string & name,
1334  const std::string & expression,
1335  const KnowledgeReferenceSettings & settings =
1337 
1344  void define_function (const std::string & name,
1345  const CompiledExpression & expression,
1346  const KnowledgeReferenceSettings & settings =
1348 
1355  Function * retrieve_function (const std::string & name,
1356  const KnowledgeReferenceSettings & settings =
1358 
1368  knowledge::KnowledgeRecord evaluate (CompiledExpression expression,
1369  const KnowledgeUpdateSettings & settings =
1371 
1381  knowledge::KnowledgeRecord evaluate (
1383  const KnowledgeUpdateSettings & settings =
1385 
1386 #endif // _MADARA_NO_KARL_
1387 
1410  void to_string (std::string & target,
1411  const std::string & array_delimiter = ",",
1412  const std::string & record_delimiter = ";\n",
1413  const std::string & key_val_delimiter = "=") const;
1414 
1415 
1430  size_t to_vector (const std::string & subject,
1431  unsigned int start,
1432  unsigned int end,
1433  std::vector <KnowledgeRecord> & target);
1434 
1442  void get_matches (
1443  const std::string & prefix,
1444  const std::string & suffix,
1445  VariableReferences & matches);
1446 
1457  size_t to_map (const std::string & subject,
1458  std::map <std::string, knowledge::KnowledgeRecord> & target);
1459 
1464  void add_logger (const std::string & filename);
1465 
1470  int get_log_level (void);
1471 
1476  void set_log_level (int level);
1477 
1482  logger::Logger & get_logger (void) const;
1483 
1488  void attach_logger (logger::Logger & logger) const;
1489 
1506  size_t to_map (const std::string & prefix,
1507  const std::string & delimiter,
1508  const std::string & suffix,
1509  std::vector <std::string> & next_keys,
1510  std::map <std::string, knowledge::KnowledgeRecord> & result,
1511  bool just_keys);
1512 
1521  knowledge::KnowledgeMap to_map (const std::string &prefix) const;
1522 
1534  knowledge::KnowledgeMap to_map_stripped (const std::string &prefix) const;
1535 
1536 
1545  int64_t save_context (const std::string & filename,
1546  const std::string & id = "") const;
1547 
1555  int64_t save_context (const CheckpointSettings & settings) const;
1556 
1562  int64_t save_as_json (const std::string & filename) const;
1563 
1569  int64_t save_as_json (const CheckpointSettings & settings) const;
1570 
1576  int64_t save_as_karl (const std::string & filename) const;
1577 
1583  int64_t save_as_karl (const CheckpointSettings & settings) const;
1584 
1595  int64_t load_context (const std::string & filename,
1596  std::string & id,
1597  const KnowledgeUpdateSettings & settings =
1598  KnowledgeUpdateSettings (true, true, true, false));
1599 
1610  int64_t load_context (const std::string & filename,
1611  FileHeader & meta,
1612  const KnowledgeUpdateSettings & settings =
1613  KnowledgeUpdateSettings (true, true, true, false));
1614 
1623  int64_t load_context (CheckpointSettings & checkpoint_settings,
1624  const KnowledgeUpdateSettings & update_settings =
1625  KnowledgeUpdateSettings (true, true, true, false));
1626 
1636  int64_t save_checkpoint (const std::string & filename,
1637  const std::string & id = "") const;
1638 
1647  int64_t save_checkpoint (
1648  const CheckpointSettings & settings) const;
1649 
1661  KnowledgeMap &get_map_unsafe (void) { return map_; }
1662 
1675  const KnowledgeMap &get_map_unsafe (void) const { return map_; }
1676 
1677  protected:
1678  private:
1686  void mark_to_send_unsafe (VariableReference ref,
1687  const KnowledgeUpdateSettings & settings = KnowledgeUpdateSettings ());
1688 
1695  void mark_to_checkpoint_unsafe (VariableReference ref,
1696  const KnowledgeUpdateSettings & settings = KnowledgeUpdateSettings ());
1697 
1703  void mark_and_signal (VariableReference ref,
1704  const KnowledgeUpdateSettings & settings = KnowledgeUpdateSettings());
1705 
1706  template<typename... Args>
1707  int set_unsafe_impl (const VariableReference & variable,
1708  const KnowledgeUpdateSettings & settings,
1709  Args&&... args);
1710 
1711  template<typename T>
1712  int set_index_unsafe_impl (const VariableReference & variable,
1713  size_t index, T&& value,
1714  const KnowledgeUpdateSettings & settings =
1716 
1717  std::pair<KnowledgeMap::const_iterator, KnowledgeMap::const_iterator>
1718  get_prefix_range(const std::string &prefix) const;
1719 
1720  std::pair<KnowledgeMap::iterator, KnowledgeMap::iterator>
1721  get_prefix_range(const std::string &prefix);
1722 
1725  mutable MADARA_LOCK_TYPE mutex_;
1726  mutable MADARA_CONDITION_TYPE changed_;
1727  std::vector< std::string> expansion_splitters_;
1728  mutable uint64_t clock_;
1731 
1734 
1737 
1740  };
1741  }
1742 }
1743 
1744 #include "ThreadSafeContext.inl"
1745 
1746 #endif
This class encapsulates an entry in a KnowledgeBase.
std::map< std::string, bool > CopySet
Typedef for set of copyable keys.
This class provides a distributed knowledge base implementation.
madara::knowledge::KnowledgeMap map_
Hash table containing variable names and values.
Defines a file header which is the default for KaRL checkpointing.
Definition: FileHeader.h:36
std::shared_ptr< std::vector< double > > share_doubles() const
std::shared_ptr< T >(KnowledgeRecord::*)(void) MethodType
std::shared_ptr< std::vector< unsigned char > > share_binary() const
Defines a terminal node of that references the current value stored in a variable.
Definition: VariableNode.h:28
std::vector< std::string > expansion_splitters_
This class stores a function definition.
Definition: Functions.h:44
std::shared_ptr< std::vector< double > > share_doubles(const std::string &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings()) const
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:480
std::shared_ptr< std::vector< Integer > > share_integers() const
Base type for Trackers.
Definition: BaseTracker.h:63
std::shared_ptr< std::vector< unsigned char > > share_binary(const std::string &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings()) const
This class stores variables and their values for use by any entity needing state information in a thr...
std::shared_ptr< std::vector< double > > take_doubles(const std::string &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings())
Holds settings for checkpoints to load or save.
std::shared_ptr< T >(KnowledgeRecord::*)(void) const ConstMethodType
Provides knowledge logging services to files and terminals.
Definition: GlobalLogger.h:11
Optimized reference to a variable within the knowledge base.
Compiled, optimized KaRL logic.
std::vector< KnowledgeRecord > FunctionArguments
std::shared_ptr< std::vector< KnowledgeRecord::Integer > > take_integers(const std::string &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings())
A multi-threaded logger for logging to one or more destinations.
Definition: Logger.h:88
std::shared_ptr< std::string > take_string(const std::string &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings())
std::shared_ptr< std::vector< double > > take_doubles()
std::shared_ptr< std::string > take_string(const VariableReference &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings())
std::shared_ptr< std::vector< double > > take_doubles(const VariableReference &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings())
KnowledgeMap & get_map_unsafe(void)
NOT THREAD SAFE!
std::shared_ptr< T > get_shared(K &&key, const KnowledgeReferenceSettings &settings)
std::shared_ptr< std::vector< KnowledgeRecord::Integer > > take_integers(const VariableReference &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings())
static struct madara::knowledge::tags::string_t string
std::shared_ptr< std::vector< KnowledgeRecord::Integer > > share_integers(const VariableReference &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings()) const
FunctionMap functions_
map of function names to functions
Holds settings requirements for knowledge, usually in copying.
Parses incoming expression strings into a parse tree and generates an expression tree from the parse ...
Definition: Interpreter.h:42
std::shared_ptr< std::vector< unsigned char > > take_binary()
::std::map< std::string, KnowledgeRecord > KnowledgeMap
std::shared_ptr< std::vector< KnowledgeRecord::Integer > > share_integers(const std::string &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings()) const
An abstract base class defines a simple abstract implementation of an expression tree node...
Definition: ComponentNode.h:36
std::shared_ptr< std::vector< Integer > > take_integers()
std::shared_ptr< std::string > share_string(const VariableReference &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings()) const
std::map< const char *, VariableReference, VariableReferenceMapCompare > VariableReferenceMap
a map of variable references
std::vector< VariableReference > VariableReferences
a vector of variable references
std::map< std::string, Function > FunctionMap
Definition: FunctionMap.h:17
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.
logger::Logger * logger_
Logger for printing.
std::shared_ptr< std::vector< unsigned char > > take_binary(const std::string &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings())
Provides functions and classes for the distributed knowledge base.
std::shared_ptr< T > get_shared(K &&key, const KnowledgeReferenceSettings &settings) const
std::shared_ptr< std::vector< unsigned char > > share_binary(const VariableReference &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings()) const
Settings for applying knowledge updates.
Copyright (c) 2015 Carnegie Mellon University.
std::shared_ptr< std::string > share_string(const std::string &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings()) const
std::shared_ptr< std::vector< unsigned char > > take_binary(const VariableReference &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings())
Settings for applying knowledge updates.
const KnowledgeMap & get_map_unsafe(void) const
NOT THREAD SAFE!
Provides an interface for external functions into the MADARA KaRL variable settings.
madara::expression::Interpreter * interpreter_
KaRL interpreter.
std::vector< std::string > PrefixVector
Typedef for vector of prefixes to use for a generic task.
Defines a terminal node of that references the current value stored in a variable.
std::shared_ptr< std::vector< double > > share_doubles(const VariableReference &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings()) const