3 #ifndef INCL_MADARA_RCW_BASE_TRACKER_H 4 #define INCL_MADARA_RCW_BASE_TRACKER_H 18 #include <type_traits> 19 #include <initializer_list> 23 #include "madara/MadaraExport.h" 48 auto get_value(
const std::vector<T> &t,
size_t i) ->
55 template<
typename T,
typename V>
76 virtual void pull() = 0;
82 virtual const char *
get_name()
const = 0;
101 return *ref.get_record_unsafe();
114 return set(kb,
ref_, std::forward<T>(val));
121 kb.get_context().set_unsafe(ref, std::forward<T>(val),
EvalSettings());
127 typename std::enable_if<std::is_integral<I>::value>
::type 129 kb.get_context().set_index_unsafe_impl(ref_, idx, val,
EvalSettings());
135 typename std::enable_if<std::is_floating_point<I>::value>
::type 137 kb.get_context().set_index_unsafe_impl(ref_, idx, val,
EvalSettings());
154 template<
class,
class,
bool,
bool,
class>
157 template<
class,
class,
bool,
bool,
class>
189 std::declval<KnowledgeRecord>())));
197 #endif // INCL_MADARA_RCW_BASE_TRACKER_H This class encapsulates an entry in a KnowledgeBase.
MADARA_MAKE_SUPPORT_TEST(is_dirty, p,(is_dirty(*p), clear_dirty(*p)))
Trait to test for an is_dirty overload for a given type.
helper type for specifying template type parameters using a function argument instead of inside expli...
auto set_index(KnowledgeBase &kb, size_t idx, I val) -> typename std::enable_if< std::is_integral< I >::value >::type
Set index in record points to. No locking, so be careful!
bool is_size_dirty(const Tracked< std::vector< T >> &t)
Return size changed dirty flag of Tracked vector.
void mark_and_signal(VariableReference ref, const KnowledgeUpdateSettings &settings=KnowledgeUpdateSettings())
method for marking a record modified and signaling changes
Manages a Read-Compute-Write cycle for registered variables.
VariableReference ref_
Reference to tracked variable.
KnowledgeRecord * get_record_unsafe(void) const
Returns a pointer to the variable's KnowledgeRecord Do not use this pointer unless you've locked the ...
KnowledgeRecord & get_mut()
Get record points to. No locking, so be careful!
BaseTracker(VariableReference ref)
Constructor from a VariableReference.
auto set_index(KnowledgeBase &kb, size_t idx, I val) -> typename std::enable_if< std::is_floating_point< I >::value >::type
Set index in record points to. No locking, so be careful!
virtual void force_push(KnowledgeBase &kb)=0
As push, but ignore any modification status tracking.
Optimized reference to a variable within the knowledge base.
bool is_dirty(const Tracked< T > &t)
Returns dirty flag of Tracked types.
virtual const char * get_name() const =0
Get name of MADARA variable.
void post_set(KnowledgeBase &kb, const VariableReference &ref)
Call after setting to perform any necessary after-setting logic.
virtual const void * get_tracked() const =0
Get pointer to tracked object.
virtual void push(KnowledgeBase &kb)=0
Override to implement pushing logic (into ref_)
bool is_all_dirty(const Tracked< std::vector< T >> &t)
Return global dirty flag of Tracked vector.
void clear_dirty(Tracked< T > &t)
Clears dirty flag of Tracked types.
This class provides a distributed knowledge base to users.
Tracker which puts variable values into a single KnowledgeRecord.
Tracker that puts values into a multiple prefixed KnowledgeRecord.
const T & get_value(const T &t)
Fallback definition of get_value; simply passes through the value.
ThreadSafeContext & get_context(void)
Returns the ThreadSafeContext associated with this Knowledge Base.
Encapsulates settings for an evaluation statement.
Provides functions and classes for the distributed knowledge base.
Out knowledge_cast(const KnowledgeRecord &in)
Convert a KnowledgeRecord into a specified type.
static KnowledgeRecord & get_mut(const VariableReference &ref)
Get record points to. No locking, so be careful!
void set_value(T &t, const T &v)
Fallback definition of set_value; simply passes through the value.
Copyright (c) 2015 Carnegie Mellon University.
virtual void pull()=0
Override to implement pulling logic (from ref_)
void post_set(KnowledgeBase &kb)
Call after setting to perform any necessary after-setting logic.