MADARA  3.2.3
KnowledgeRecord.h
Go to the documentation of this file.
1 
2 
3 #ifndef _MADARA_KNOWLEDGE_RECORD_H_
4 #define _MADARA_KNOWLEDGE_RECORD_H_
5 
13 #include <string>
14 #include <vector>
15 #include <map>
16 #include <memory>
17 #include <type_traits>
18 #include "madara/MadaraExport.h"
19 #include "madara/utility/StdInt.h"
23 
24 namespace madara
25 {
26 
27  namespace knowledge
28  {
29  class ThreadSafeContext;
30 
37  namespace tags {
38  static struct integers_t { integers_t(){} } integers;
39  static struct doubles_t { doubles_t(){} } doubles;
40  static struct string_t { string_t(){} } string;
41  static struct binary_t { binary_t(){} } binary;
42 
43  template<typename T>
44  struct shared_t { shared_t(){} };
45 
48  template<typename T>
49  inline shared_t<T> shared(T) {
50  return shared_t<T>{};
51  }
52  }
53 
59  class MADARA_EXPORT KnowledgeRecord
60  {
61  public:
62  // allow ThreadSafeContext to modify private members
63  friend class ThreadSafeContext;
64 
65  enum
66  {
67  UNCREATED = 0,
68  MODIFIED = 1
69  };
70 
71  enum
72  {
73  OWNED = 0,
74  SHARED = 1
75  };
76 
78  {
79  EMPTY = 0,
80  INTEGER = 1,
81  STRING = 2,
82  DOUBLE = 4,
83  FLOAT = 4,
84  UNKNOWN_FILE_TYPE = 8,
85  XML = 16,
86  TEXT_FILE = 32,
87  INTEGER_ARRAY = 64,
88  DOUBLE_ARRAY = 128,
89  IMAGE_JPEG = 256,
90  ALL_ARRAYS = INTEGER_ARRAY | DOUBLE_ARRAY,
91  ALL_INTEGERS = INTEGER | INTEGER_ARRAY,
92  ALL_DOUBLES = DOUBLE | DOUBLE_ARRAY,
93  ALL_PRIMITIVE_TYPES = INTEGER | STRING | DOUBLE |
94  INTEGER_ARRAY | DOUBLE_ARRAY,
95  ALL_FILE_TYPES = UNKNOWN_FILE_TYPE | XML | TEXT_FILE | IMAGE_JPEG,
96  ALL_IMAGES = IMAGE_JPEG,
97  ALL_TEXT_FORMATS = XML | TEXT_FILE | STRING,
98  ALL_TYPES = ALL_PRIMITIVE_TYPES | ALL_FILE_TYPES,
99  ALL_CLEARABLES = ALL_ARRAYS | ALL_TEXT_FORMATS | ALL_FILE_TYPES
100  };
101 
102  typedef int64_t Integer;
103 
104  private:
107 
108  public:
112  uint64_t clock = 0;
113 
117  uint32_t quality = 0;
118 
122  uint32_t write_quality = 0;
123 
124  private:
129  union
130  {
131  Integer int_value_ = 0;
133 
134  std::shared_ptr<std::vector<Integer>> int_array_;
135  std::shared_ptr<std::vector<double>> double_array_;
136  std::shared_ptr<std::string> str_value_;
137  std::shared_ptr<std::vector<unsigned char>> file_value_;
138  };
139 
143  uint32_t type_ = EMPTY;
144 
149  mutable bool shared_ = OWNED;
150 
151  public:
152  /* default constructor */
153  KnowledgeRecord () noexcept :
155 
156  explicit KnowledgeRecord (logger::Logger & logger) noexcept;
157 
158  /* Integer constructor */
159  template<typename T,
160  typename std::enable_if<std::is_integral<T>::value,
161  void*>::type = nullptr>
162  explicit KnowledgeRecord (T value,
163  logger::Logger & logger = *logger::global_logger.get ()) noexcept;
164 
165  /* Floating point constructor */
166  template<typename T,
167  typename std::enable_if<std::is_floating_point<T>::value,
168  void*>::type = nullptr>
169  explicit KnowledgeRecord (T value,
170  logger::Logger & logger = *logger::global_logger.get ()) noexcept;
171 
172  /* Integer array constructor */
173  explicit KnowledgeRecord (const std::vector <Integer> & value,
174  logger::Logger & logger = *logger::global_logger.get ());
175 
176  /* Integer array move constructor */
177  explicit KnowledgeRecord (std::vector <Integer> && value,
178  logger::Logger & logger = *logger::global_logger.get ()) noexcept;
179 
180  /* Integer array shared_ptr constructor */
181  explicit KnowledgeRecord (std::shared_ptr<std::vector <Integer>> value,
182  logger::Logger & logger = *logger::global_logger.get ()) noexcept;
183 
184  /* Double array constructor */
185  explicit KnowledgeRecord (const std::vector <double> & value,
186  logger::Logger & logger = *logger::global_logger.get ());
187 
188  /* Double array move constructor */
189  explicit KnowledgeRecord (std::vector <double> && value,
190  logger::Logger & logger = *logger::global_logger.get ()) noexcept;
191 
192  /* Double array shared_ptr constructor */
193  explicit KnowledgeRecord (std::shared_ptr<std::vector <double>> value,
194  logger::Logger & logger = *logger::global_logger.get ()) noexcept;
195 
196  /* String constructor */
197  explicit KnowledgeRecord (const std::string & value,
198  logger::Logger & logger = *logger::global_logger.get ());
199 
200  /* String move constructor */
201  explicit KnowledgeRecord (std::string && value,
202  logger::Logger & logger = *logger::global_logger.get ()) noexcept;
203 
204  /* Double array shared_ptr constructor */
205  explicit KnowledgeRecord (std::shared_ptr<std::string> value,
206  logger::Logger & logger = *logger::global_logger.get ()) noexcept;
207 
208  /* Char pointer constructor for g++ */
209  explicit KnowledgeRecord (const char * value,
210  logger::Logger & logger = *logger::global_logger.get ());
211 
212  /* Binary file shared_ptr constructor */
213  explicit KnowledgeRecord (
214  std::shared_ptr<std::vector<unsigned char>> value,
215  logger::Logger & logger = *logger::global_logger.get ()) noexcept;
216 
217  /* copy constructor */
218  KnowledgeRecord (const KnowledgeRecord & rhs);
219 
220  /* move constructor */
221  KnowledgeRecord (KnowledgeRecord && rhs) noexcept;
222 
223  /* destructor */
224  ~KnowledgeRecord () noexcept;
225 
226  public:
236  template<typename... Args>
237  void emplace_shared_integers(Args&&... args) {
238  emplace_shared_vec<Integer, INTEGER_ARRAY,
240  std::forward<Args>(args)...);
241  shared_ = SHARED;
242  }
243 
253  template<typename... Args>
255  emplace_shared_integers(std::forward<Args>(args)...);
256  }
257 
263  template<typename... Args>
264  void emplace_integers(Args&&... args) {
265  emplace_vec<Integer, INTEGER_ARRAY,
267  std::forward<Args>(args)...);
268  }
269 
275  template<typename... Args>
276  void emplace(tags::integers_t, Args&&... args) {
277  emplace_integers(std::forward<Args>(args)...);
278  }
279 
289  template<typename... Args>
290  void emplace_shared_doubles(Args&&... args) {
291  emplace_shared_vec<double, DOUBLE_ARRAY,
293  std::forward<Args>(args)...);
294  shared_ = SHARED;
295  }
296 
306  template<typename... Args>
307  void emplace(tags::shared_t<tags::doubles_t>, Args&&... args) {
308  emplace_shared_doubles(std::forward<Args>(args)...);
309  }
310 
316  template<typename... Args>
317  void emplace_doubles(Args&&... args) {
318  emplace_vec<double, DOUBLE_ARRAY,
320  std::forward<Args>(args)...);
321  }
322 
328  template<typename... Args>
329  void emplace(tags::doubles_t, Args&&... args) {
330  emplace_doubles(std::forward<Args>(args)...);
331  }
332 
341  template<typename... Args>
342  void emplace_shared_string(Args&&... args) {
343  emplace_shared_val<std::string, STRING,
345  std::forward<Args>(args)...);
346  shared_ = SHARED;
347  }
348 
357  template<typename... Args>
358  void emplace(tags::shared_t<tags::string_t>, Args&&... args) {
359  emplace_shared_string(std::forward<Args>(args)...);
360  }
361 
367  template<typename... Args>
368  void emplace_string(Args&&... args) {
369  emplace_val<std::string, STRING,
371  std::forward<Args>(args)...);
372  }
373 
379  template<typename... Args>
380  void emplace(tags::string_t, Args&&... args) {
381  emplace_string(std::forward<Args>(args)...);
382  }
383 
393  template<typename... Args>
394  void emplace_shared_file(Args&&... args) {
395  emplace_shared_vec<unsigned char, UNKNOWN_FILE_TYPE,
397  std::forward<Args>(args)...);
398  shared_ = SHARED;
399  }
400 
410  template<typename... Args>
411  void emplace(tags::shared_t<tags::binary_t>, Args&&... args) {
412  emplace_shared_binary(std::forward<Args>(args)...);
413  }
414 
420  template<typename... Args>
421  void emplace_file(Args&&... args) {
422  emplace_vec<unsigned char, UNKNOWN_FILE_TYPE,
424  std::forward<Args>(args)...);
425  }
426 
432  template<typename... Args>
433  void emplace(tags::binary_t, Args&&... args) {
434  emplace_binary(std::forward<Args>(args)...);
435  }
436 
442  template<typename... Args>
444  : int_array_ (std::make_shared<std::vector<Integer>> (
445  std::forward<Args>(args)...)),
446  type_ (INTEGER_ARRAY) {}
447 
453  template<typename... Args>
455  : int_array_ {std::forward<Args>(args)...},
456  type_ (INTEGER_ARRAY), shared_ (SHARED) {}
457 
463  template<typename... Args>
465  : double_array_ (std::make_shared<std::vector<double>> (
466  std::forward<Args>(args)...)),
467  type_ (DOUBLE_ARRAY) {}
468 
474  template<typename... Args>
476  : double_array_ {std::forward<Args>(args)...},
477  type_ (DOUBLE_ARRAY), shared_ (SHARED) {}
478 
487  template<typename... Args>
489  : str_value_ (std::make_shared<std::string> (
490  std::forward<Args>(args)...)),
491  type_ (STRING) {}
492 
502  template<typename... Args>
504  : str_value_ {std::forward<Args>(args)...},
505  type_ (STRING), shared_ (SHARED) {}
506 
512  template<typename... Args>
514  : file_value_ (std::make_shared<std::vector<unsigned char>> (
515  std::forward<Args>(args)...)),
516  type_ (UNKNOWN_FILE_TYPE) {}
517 
524  template<typename... Args>
526  : file_value_ {std::forward<Args>(args)...},
527  type_ (UNKNOWN_FILE_TYPE), shared_ (SHARED) {}
528 
533  bool exists (void) const;
534 
541  KnowledgeRecord retrieve_index (size_t index) const;
542 
549  KnowledgeRecord dec_index (size_t index);
550 
557  KnowledgeRecord inc_index (size_t index);
558 
566  template<typename T,
567  typename std::enable_if<std::is_integral<T>::value,
568  void*>::type = nullptr>
569  void set_index (size_t index, T value);
570 
578  template<typename T,
579  typename std::enable_if<std::is_floating_point<T>::value,
580  void*>::type = nullptr>
581  void set_index (size_t index, T value);
582 
589  std::string to_string (const std::string & delimiter = ", ") const;
590 
595  std::shared_ptr<std::string> share_string() const;
596 
602  std::shared_ptr<std::string> take_string();
603 
608  ssize_t to_file (const std::string & filename) const;
609 
614  void unshare (void);
615 
619  KnowledgeRecord * clone (void) const;
620 
629  Integer to_integer (void) const;
630 
639  double to_double (void) const;
640 
645  std::vector <Integer> to_integers (void) const;
646 
651  std::shared_ptr<std::vector<Integer>> share_integers() const;
652 
658  std::shared_ptr<std::vector<Integer>> take_integers();
659 
664  std::vector <double> to_doubles (void) const;
665 
670  std::shared_ptr<std::vector<double>> share_doubles() const;
671 
677  std::shared_ptr<std::vector<double>> take_doubles();
678 
683  std::shared_ptr<std::vector<unsigned char>> share_binary() const;
684 
690  std::shared_ptr<std::vector<unsigned char>> take_binary();
691 
706  unsigned char * to_unmanaged_buffer (size_t & size) const;
707 
717  void set_value (const KnowledgeRecord &new_value);
718 
728  void set_value (KnowledgeRecord &&new_value);
729 
734  template<typename T,
735  typename std::enable_if<std::is_integral<T>::value,
736  void*>::type = nullptr>
737  void set_value (T new_value);
738 
744  void set_value (const Integer * new_value, uint32_t size);
745 
750  void set_value (std::vector <Integer> && new_value);
751 
756  void set_value (const std::vector <Integer> & new_value);
757 
762  void set_value (std::shared_ptr<std::vector <Integer>> new_value);
763 
769  void set_value (const char * new_value, uint32_t size);
770 
775  void set_value (std::string && new_value);
776 
781  void set_value (const std::string & new_value);
782 
787  void set_value (std::shared_ptr<std::string> new_value);
788 
793  template<typename T,
794  typename std::enable_if<std::is_floating_point<T>::value,
795  void*>::type = nullptr>
796  void set_value (T new_value);
797 
803  void set_value (const double * new_value, uint32_t size);
804 
809  void set_value (std::vector <double> && new_value);
810 
815  void set_value (const std::vector <double> & new_value);
816 
821  void set_value (std::shared_ptr<std::vector <double>> new_value);
822 
823  template<typename T>
824  auto operator=(T &&t) ->
825  typename std::enable_if<!std::is_convertible<T, KnowledgeRecord>::value,
826  decltype(this->set_value(std::forward<T>(t)), *this)>::type
827  {
828  this->set_value(std::forward<T>(t));
829  return *this;
830  }
831 
837  void set_xml (const char * new_value, size_t size);
838 
843  void set_xml (std::string && new_value);
844 
849  void set_xml (const std::string & new_value);
850 
855  void set_xml (std::shared_ptr<std::string> new_value);
856 
862  void set_text (const char * new_value, size_t size);
863 
868  void set_text (std::string && new_value);
869 
874  void set_text (const std::string & new_value);
875 
880  void set_text (std::shared_ptr<std::string> new_value);
881 
889  static void set_precision (int new_precision);
890 
894  static void set_scientific (void);
895 
899  static void set_fixed (void);
900 
905  static int get_precision (void);
906 
912  void set_jpeg (const unsigned char * new_value, size_t size);
913 
918  void set_jpeg (std::vector <unsigned char> && new_value);
919 
924  void set_jpeg (const std::vector <unsigned char> & new_value);
925 
930  void set_jpeg (std::shared_ptr<std::vector <unsigned char>> new_value);
931 
937  void set_file (const unsigned char * new_value, size_t size);
938 
943  void set_file (std::vector <unsigned char> && new_value);
944 
949  void set_file (const std::vector <unsigned char> & new_value);
950 
955  void set_file (std::shared_ptr<std::vector <unsigned char>> new_value);
956 
964  void deep_copy (const KnowledgeRecord & source);
965 
973  KnowledgeRecord deep_copy() const;
974 
979  int status (void) const;
980 
984  void set_modified (void);
985 
990  void resize (size_t new_size);
991 
1000  int read_file (const std::string & filename, uint32_t read_as_type = 0);
1001 
1005  void reset_value (void) noexcept;
1006 
1007  private:
1008  void clear_union (void) noexcept;
1009 
1010  public:
1016  void clear_value (void) noexcept;
1017 
1021  uint32_t size (void) const;
1022 
1026  int32_t type (void) const;
1027 
1039  bool set_type (int32_t type);
1040 
1045  bool is_ref_counted (void) const;
1046 
1052  static bool is_ref_counted (uint32_t type);
1053 
1058  bool is_string_type (void) const;
1059 
1065  static bool is_string_type (uint32_t type);
1066 
1071  bool is_double_type (void) const;
1072 
1078  static bool is_double_type (uint32_t type);
1079 
1084  bool is_integer_type (void) const;
1085 
1091  static bool is_integer_type (uint32_t type);
1092 
1093 
1098  bool is_array_type (void) const;
1099 
1105  static bool is_array_type (uint32_t type);
1106 
1116  KnowledgeRecord fragment (unsigned int first, unsigned int last);
1117 
1122  bool is_image_type (void) const;
1123 
1129  static bool is_image_type (uint32_t type);
1130 
1135  bool is_file_type (void) const;
1136 
1142  static bool is_file_type (uint32_t type);
1143 
1148  bool is_binary_file_type (void) const;
1149 
1155  static bool is_binary_file_type (uint32_t type);
1156 
1160  bool operator< (const KnowledgeRecord & rhs) const;
1161 
1165  bool operator<= (const KnowledgeRecord & rhs) const;
1166 
1170  bool operator== (const KnowledgeRecord & rhs) const;
1171 
1172 #if 0
1173 
1176  template<typename T,
1177  typename std::enable_if<std::is_integral<T>::value,
1178  void*>::type = nullptr>
1179  bool operator== (T value) const;
1180 
1184  template<typename T,
1185  typename std::enable_if<std::is_floating_point<T>::value,
1186  void*>::type = nullptr>
1187  bool operator== (T value) const;
1188 
1192  bool operator== (const std::string & value) const;
1193 
1197  bool operator== (const char * value) const;
1198 #endif
1199 
1203  bool operator!= (const KnowledgeRecord & rhs) const;
1204 
1208  bool operator> (const KnowledgeRecord & rhs) const;
1209 
1213  bool operator>= (const KnowledgeRecord & rhs) const;
1214 
1218  bool operator! (void) const;
1219 
1223  KnowledgeRecord operator- (void) const;
1224 
1228  KnowledgeRecord & operator= (const KnowledgeRecord & rhs);
1229 
1233  KnowledgeRecord & operator= (KnowledgeRecord && rhs) noexcept;
1234 
1239 
1244 
1249 
1254 
1259 
1263  KnowledgeRecord operator* (const KnowledgeRecord & rhs) const;
1264 
1268  KnowledgeRecord operator/ (const KnowledgeRecord & rhs) const;
1269 
1273  KnowledgeRecord operator% (const KnowledgeRecord & rhs) const;
1274 
1278  KnowledgeRecord operator+ (const KnowledgeRecord & rhs) const;
1279 
1283  KnowledgeRecord operator- (const KnowledgeRecord & rhs) const;
1284 
1290  explicit operator bool (void) const;
1291 
1295  KnowledgeRecord & operator++ (void);
1296 
1300  KnowledgeRecord & operator-- (void);
1301 
1310  const char * read (const char * buffer, int64_t & buffer_remaining);
1311 
1321  const char * read (const char * buffer, std::string & key,
1322  int64_t & buffer_remaining);
1323 
1333  const char * read (const char * buffer, uint32_t & key_id,
1334  int64_t & buffer_remaining);
1335 
1352  char * write (char * buffer, int64_t & buffer_remaining) const;
1353 
1373  char * write (char * buffer, const std::string & key,
1374  int64_t & buffer_remaining) const;
1375 
1397  char * write (char * buffer, uint32_t key_id,
1398  int64_t & buffer_remaining) const;
1399 
1403  int apply (madara::knowledge::ThreadSafeContext & context,
1404  const std::string & key, unsigned int quality, uint64_t clock,
1405  bool perform_lock);
1406 
1412  bool is_true (void) const;
1413 
1419  bool is_false (void) const;
1420 
1426  inline bool is_valid (void) const
1427  {
1428  return status() != UNCREATED;
1429  }
1430 
1436  int64_t get_encoded_size (const std::string & key) const;
1437 
1443  int64_t get_encoded_size (void) const;
1444 
1445  private:
1446  template<typename T>
1447  using MemberType = std::shared_ptr<T> KnowledgeRecord::*;
1448 
1449  template<typename T, uint32_t Type, MemberType<T> Member, typename... Args>
1450  std::shared_ptr<T> &emplace_shared_val(Args&&... args) {
1451  clear_union();
1452  type_ = Type;
1453  return *new(&(this->*Member)) std::shared_ptr<T>(
1454  std::forward<Args>(args)...);
1455  }
1456 
1457  template<typename T, uint32_t Type, MemberType<T> Member, typename... Args>
1458  std::shared_ptr<T> &emplace_val(Args&&... args) {
1459  return emplace_shared_val<T, Type, Member> (std::move(
1460  std::make_shared<T> (
1461  std::forward<Args>(args)...)));
1462  }
1463 
1464  template<typename T, uint32_t Type, MemberType<std::vector<T>> Member,
1465  typename... Args>
1466  std::shared_ptr<std::vector<T>> &emplace_shared_vec(Args&&... args) {
1467  return emplace_shared_val<std::vector<T>, Type, Member> (
1468  std::forward<Args>(args)...);
1469  }
1470 
1471  template<typename T, uint32_t Type, MemberType<std::vector<T>> Member,
1472  typename... Args>
1473  std::shared_ptr<std::vector<T>> &emplace_vec(Args&&... args) {
1474  return emplace_val<std::vector<T>, Type, Member> (
1475  std::forward<Args>(args)...);
1476  }
1477  };
1478 
1479  typedef ::std::map < std::string, KnowledgeRecord> KnowledgeMap;
1480  typedef ::std::vector < KnowledgeRecord> KnowledgeVector;
1481  typedef ::std::vector < std::string> KnowledgeRules;
1482  typedef ::std::vector < std::string> StringVector;
1483  typedef ::std::map < std::string, KnowledgeRecord *> KnowledgeRecords;
1484 
1487 
1493  uint32_t max_quality (const KnowledgeRecords & records);
1494 
1500  uint32_t max_quality (const KnowledgeMap & records);
1501  }
1502 }
1503 
1507 //inline std::ostream & operator<< (std::ostream & stream,
1508  //const madara::knowledge::KnowledgeRecord & rhs);
1509 
1510 #include "KnowledgeRecord.inl"
1511 
1512 
1513 #endif // _MADARA_KNOWLEDGE_RECORD_H_
1514 
1515 #include "KnowledgeCast.h"
This class encapsulates an entry in a KnowledgeBase.
uint32_t max_quality(const KnowledgeRecords &records)
Returns the maximum quality within the records.
void emplace_shared_file(Args &&...args)
Construct a shared_ptr to a file (vector of unsigned char) within this KnowledgeRecord.
auto operator+=(KnowledgeRecord &l, const T &r) -> decltype(l+=knowledge_cast(r))
void emplace(tags::string_t, Args &&...args)
Construct a string within this KnowledgeRecord.
auto operator>=(const KnowledgeRecord &l, const T &r) -> decltype(knowledge_cast< T >(l) >=r)
void emplace_string(Args &&...args)
Construct a string within this KnowledgeRecord.
auto operator>(const KnowledgeRecord &l, const T &r) -> decltype(knowledge_cast< T >(l) >r)
auto operator*=(KnowledgeRecord &l, const T &r) -> decltype(l *=knowledge_cast(r))
KnowledgeRecord(tags::string_t, Args &&...args)
Forwarding constructor for strings Each argument past the first will be forwarded to construct a std:...
helper type for specifying template type parameters using a function argument instead of inside expli...
Definition: KnowledgeCast.h:72
auto operator==(const KnowledgeRecord &l, const T &r) -> decltype(knowledge_cast< T >(l)==r)
void emplace_integers(Args &&...args)
Construct a vector of integers within this KnowledgeRecord.
std::shared_ptr< std::vector< T > > & emplace_vec(Args &&...args)
::std::vector< std::string > KnowledgeRules
auto operator--(Tracked< T > &lhs) -> decltype(--lhs.get_mut())
Definition: Tracked.h:302
madara::knowledge::KnowledgeRecord KnowledgeRecord
bool is_valid(void) const
Checks to see if the record is valid.
void emplace(tags::shared_t< tags::integers_t >, Args &&...args)
Construct a shared_ptr to vector of integers within this KnowledgeRecord.
void emplace_file(Args &&...args)
Construct a file (vector of unsigned char) within this KnowledgeRecord.
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
KnowledgeRecord(tags::integers_t, Args &&...args)
Forwarding constructor for integer arrays Each argument past the first will be forwarded to construct...
void emplace(tags::shared_t< tags::binary_t >, Args &&...args)
Construct a shared_ptr to binary (vector of unsigned char) within this KnowledgeRecord.
auto operator+(const KnowledgeRecord &l, const T &r) -> decltype(l+knowledge_cast(r))
auto operator/(const KnowledgeRecord &l, const T &r) -> decltype(l/knowledge_cast(r))
STL namespace.
auto operator-(const KnowledgeRecord &l, const T &r) -> decltype(l-knowledge_cast(r))
This class stores variables and their values for use by any entity needing state information in a thr...
std::shared_ptr< T > KnowledgeRecord::* MemberType
std::shared_ptr< std::vector< Integer > > int_array_
void emplace(tags::integers_t, Args &&...args)
Construct a vector of integers within this KnowledgeRecord.
MADARA_EXPORT utility::Refcounter< logger::Logger > global_logger
void emplace_shared_integers(Args &&...args)
Construct a shared_ptr to vector of integers within this KnowledgeRecord.
void emplace(tags::shared_t< tags::doubles_t >, Args &&...args)
Construct a shared_ptr to vector of doubles within this KnowledgeRecord.
auto operator%(const KnowledgeRecord &l, const T &r) -> decltype(l%knowledge_cast(r))
Provides knowledge logging services to files and terminals.
Definition: GlobalLogger.h:11
void emplace(tags::binary_t, Args &&...args)
Construct a binary (vector of unsigned char) within this KnowledgeRecord.
void emplace_shared_doubles(Args &&...args)
Construct a shared_ptr to vector of doubles within this KnowledgeRecord.
std::shared_ptr< T > & emplace_shared_val(Args &&...args)
void emplace_shared_string(Args &&...args)
Construct a shared_ptr to a string within this KnowledgeRecord.
static struct madara::knowledge::tags::doubles_t doubles
A multi-threaded logger for logging to one or more destinations.
Definition: Logger.h:88
::std::vector< KnowledgeRecord > KnowledgeVector
std::string KnowledgeKey
static struct madara::knowledge::tags::string_t string
void emplace(tags::shared_t< tags::string_t >, Args &&...args)
Construct a shared_ptr to string within this KnowledgeRecord.
auto operator<(const KnowledgeRecord &l, const T &r) -> decltype(knowledge_cast< T >(l)< r)
auto operator!(const Tracked< T > &lhs) -> decltype(!lhs.get())
Definition: Tracked.h:292
madara::knowledge::KnowledgeRecord::Integer Integer
::std::map< std::string, KnowledgeRecord * > KnowledgeRecords
::std::map< std::string, KnowledgeRecord > KnowledgeMap
auto operator=(T &&t) -> typename std::enable_if<!std::is_convertible< T, KnowledgeRecord >::value, decltype(this->set_value(std::forward< T >(t)),*this)>::type
KnowledgeRecord KnowledgeValue
auto operator*(const KnowledgeRecord &l, const T &r) -> decltype(l *knowledge_cast(r))
std::shared_ptr< T > & emplace_val(Args &&...args)
std::shared_ptr< std::vector< double > > double_array_
auto operator-=(KnowledgeRecord &l, const T &r) -> decltype(l-=knowledge_cast(r))
auto operator/=(KnowledgeRecord &l, const T &r) -> decltype(l/=knowledge_cast(r))
auto operator<=(const KnowledgeRecord &l, const T &r) -> decltype(knowledge_cast< T >(l)<=r)
KnowledgeRecord(tags::shared_t< tags::string_t >, Args &&...args)
Forwarding constructor for double arrays shared_ptr Each argument past the first will be forwarded to...
static struct madara::knowledge::tags::integers_t integers
std::shared_ptr< std::vector< unsigned char > > file_value_
KnowledgeRecord(tags::shared_t< tags::binary_t >, Args &&...args)
Forwarding constructor for binary file (blob) shared_ptr Each argument past the first will be forward...
std::shared_ptr< std::vector< T > > & emplace_shared_vec(Args &&...args)
KnowledgeRecord(tags::shared_t< tags::doubles_t >, Args &&...args)
Forwarding constructor for double arrays shared_ptr Each argument past the first will be forwarded to...
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.
auto operator!=(const KnowledgeRecord &l, const T &r) -> decltype(knowledge_cast< T >(l)!=r)
KnowledgeRecord(tags::binary_t, Args &&...args)
Forwarding constructor for binary files (blobs) Each argument past the first will be forwarded to con...
Provides functions and classes for the distributed knowledge base.
shared_t< T > shared(T)
Used to signal in-place shared_ptr construction in KnowledgeRecord Example: tags::shared(tags::intege...
void emplace(tags::doubles_t, Args &&...args)
Construct a vector of doubles within this KnowledgeRecord.
auto operator%=(KnowledgeRecord &l, const T &r) -> decltype(l%=knowledge_cast(r))
void emplace_doubles(Args &&...args)
Construct a vector of doubles within this KnowledgeRecord.
void set_value(T &t, const T &v)
Fallback definition of set_value; simply passes through the value.
Definition: BaseTracker.h:41
KnowledgeRecord(tags::shared_t< tags::integers_t >, Args &&...args)
Forwarding constructor for integer arrays shared_ptr Each argument past the first will be forwarded t...
Copyright (c) 2015 Carnegie Mellon University.
KnowledgeRecord(tags::doubles_t, Args &&...args)
Forwarding constructor for double arrays Each argument past the first will be forwarded to construct ...
auto operator++(Tracked< T > &lhs) -> decltype(++lhs.get_mut())
Definition: Tracked.h:301
::std::vector< std::string > StringVector
std::shared_ptr< std::string > str_value_
static struct madara::knowledge::tags::binary_t binary