1 #ifndef MADARA_THREADSAFECONTEXT_H 2 #define MADARA_THREADSAFECONTEXT_H 18 #include "madara/MadaraExport.h" 19 #include "madara/LockType.h" 30 #include "madara_jni.h" 33 #ifdef _MADARA_PYTHON_CALLBACKS_ 34 #include "madara/Boost.h" 35 #include "boost/python/object.hpp" 43 class CompositeArrayReference;
60 typedef std::map <std::string, bool>
CopySet;
162 template<
typename T, MethodType<T> Get,
typename K>
166 auto rec = with (std::forward<K>(key), settings);
168 return (rec->*Get) ();
176 template<
typename T, ConstMethodType<T> Get,
typename K>
180 auto rec = with (std::forward<K>(key), settings);
182 return (rec->*Get) ();
196 return get_shared<std::string, &KnowledgeRecord::share_string>(key, settings);
207 return get_shared<std::string, &KnowledgeRecord::share_string>(key, settings);
219 return get_shared<std::string, &KnowledgeRecord::take_string>(key, settings);
231 return get_shared<std::string, &KnowledgeRecord::take_string>(key, settings);
238 std::shared_ptr<std::vector<KnowledgeRecord::Integer>>
243 return get_shared<std::vector<KnowledgeRecord::Integer>,
251 std::shared_ptr<std::vector<KnowledgeRecord::Integer>>
256 return get_shared<std::vector<KnowledgeRecord::Integer>,
265 std::shared_ptr<std::vector<KnowledgeRecord::Integer>>
270 return get_shared<std::vector<KnowledgeRecord::Integer>,
279 std::shared_ptr<std::vector<KnowledgeRecord::Integer>>
284 return get_shared<std::vector<KnowledgeRecord::Integer>,
292 std::shared_ptr<std::vector<double>>
297 return get_shared<std::vector<double>,
305 std::shared_ptr<std::vector<double>>
310 return get_shared<std::vector<double>,
319 std::shared_ptr<std::vector<double>>
324 return get_shared<std::vector<double>,
333 std::shared_ptr<std::vector<double>>
338 return get_shared<std::vector<double>,
346 std::shared_ptr<std::vector<unsigned char>>
351 return get_shared<std::vector<unsigned char>,
359 std::shared_ptr<std::vector<unsigned char>>
364 return get_shared<std::vector<unsigned char>,
373 std::shared_ptr<std::vector<unsigned char>>
378 return get_shared<std::vector<unsigned char>,
387 std::shared_ptr<std::vector<unsigned char>>
392 return get_shared<std::vector<unsigned char>,
468 const char * value,
size_t size,
481 const char * value,
size_t size,
494 const unsigned char * value,
size_t size,
507 const unsigned char * value,
size_t size,
520 const unsigned char * value,
size_t size,
533 const unsigned char * value,
size_t size,
546 const char * value,
size_t size,
559 const char * value,
size_t size,
573 size_t index, T&& value,
587 size_t index, T&& value,
602 size_t index, T&& value,
735 uint32_t quality, uint64_t clock,
751 uint32_t quality, uint64_t clock,
767 uint32_t quality, uint64_t clock,
781 int update_record_from_external (
796 int update_record_from_external (
818 uint32_t get_write_quality (
const std::string & key,
831 uint32_t quality,
bool force_update,
837 void set_changed (
void);
845 void set_write_quality (
const std::string & key, uint32_t quality,
889 void reset_modified (
void);
895 void reset_checkpoint (
void)
const;
900 void apply_modified (
void);
986 void wait_for_change (
bool extra_release =
false);
1074 void delete_variables(KnowledgeMap::iterator begin,
1075 KnowledgeMap::iterator end,
1093 bool delete_expression (
const std::string & expression);
1120 void print (
unsigned int level)
const;
1128 void print (
const std::string & statement,
unsigned int level)
const;
1135 void clear (
bool erase =
false);
1143 void lock (
void)
const;
1152 bool try_lock (
void)
const;
1157 void unlock (
void)
const;
1184 uint64_t set_clock (uint64_t clock);
1203 uint64_t get_clock (
void)
const;
1211 uint64_t get_clock (
1220 void signal (
bool lock =
true)
const;
1264 const CopySet & copy_set = CopySet (),
1265 bool clean_copy =
false);
1268 #ifndef _MADARA_NO_KARL_ 1303 #ifdef _MADARA_JAVA_ 1310 void define_function (
const std::string & name, jobject callable,
1315 #ifdef _MADARA_PYTHON_CALLBACKS_ 1322 void define_function (
const std::string & name, boost::python::object callable,
1386 #endif // _MADARA_NO_KARL_ 1413 const std::string & key_val_delimiter =
"=")
const;
1433 std::vector <KnowledgeRecord> & target);
1458 std::map <std::string, knowledge::KnowledgeRecord> & target);
1470 int get_log_level (
void);
1476 void set_log_level (
int level);
1509 std::vector <std::string> & next_keys,
1510 std::map <std::string, knowledge::KnowledgeRecord> & result,
1545 int64_t save_context (
const std::string & filename,
1562 int64_t save_as_json (
const std::string & filename)
const;
1576 int64_t save_as_karl (
const std::string & filename)
const;
1595 int64_t load_context (
const std::string & filename,
1610 int64_t load_context (
const std::string & filename,
1636 int64_t save_checkpoint (
const std::string & filename,
1647 int64_t save_checkpoint (
1706 template<
typename... Args>
1711 template<
typename T>
1713 size_t index, T&& value,
1717 std::pair<KnowledgeMap::const_iterator, KnowledgeMap::const_iterator>
1718 get_prefix_range(
const std::string &prefix)
const;
1720 std::pair<KnowledgeMap::iterator, KnowledgeMap::iterator>
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.
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.
std::vector< std::string > expansion_splitters_
This class stores a function definition.
MADARA_CONDITION_TYPE changed_
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.
std::shared_ptr< std::vector< Integer > > share_integers() const
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.
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.
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)
VariableReferenceMap changed_map_
std::shared_ptr< std::vector< KnowledgeRecord::Integer > > take_integers(const VariableReference &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings())
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 ...
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...
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
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.
VariableReferenceMap local_changed_map_
std::shared_ptr< std::vector< double > > share_doubles(const VariableReference &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings()) const