MADARA  3.0.5
madara::knowledge::KnowledgeBase Class Reference

This class provides a distributed knowledge base to users. More...

#include <KnowledgeBase.h>

Collaboration diagram for madara::knowledge::KnowledgeBase:

Public Member Functions

 KnowledgeBase ()
 Constructor. More...
 
 KnowledgeBase (const std::string &host, int transport)
 Constructor. More...
 
 KnowledgeBase (const std::string &host, int transport, const std::string &domain)
 Constructor. More...
 
 KnowledgeBase (const std::string &host, const madara::transport::TransportSettings &config)
 Constructor. More...
 
 KnowledgeBase (const KnowledgeBase &original)
 Copy constructor. More...
 
 ~KnowledgeBase ()
 Destructor. More...
 
void acquire (void)
 Acquires the recursive lock on the knowledge base. More...
 
void activate_transport (void)
 Starts the transport mechanism for dissemination if it is closed. More...
 
void add_modifieds (const VariableReferences &modifieds) const
 Adds a list of VariableReferences to the current modified list. More...
 
int apply_modified (const EvalSettings &settings=EvalSettings())
 Applies current time and modified to all global variables and tries to send them. More...
 
void attach_logger (logger::Logger &logger) const
 Attaches a logger to be used for printing. More...
 
size_t attach_transport (madara::transport::Base *transport)
 Attaches a transport to the Knowledge Engine. More...
 
size_t attach_transport (const std::string &id, transport::TransportSettings &settings)
 Adds a built-in transport with the specified settings. More...
 
bool clear (const std::string &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings())
 Clears a variable. More...
 
void clear (bool erase=false)
 Clears the knowledge base. More...
 
void clear_map (void)
 Clears the knowledge base. More...
 
void clear_modifieds (void)
 Clear all modifications to the knowledge base. More...
 
void close_transport (void)
 Closes the transport mechanism so no dissemination is possible. More...
 
CompiledExpression compile (const std::string &expression)
 Compiles a KaRL expression into an expression tree. More...
 
void copy (const KnowledgeBase &source, const CopySet &copy_set=CopySet(), bool clean_copy=false)
 Copies variables and values from source to this context. More...
 
std::string debug_modifieds (void) const
 Retrieves a stringified list of all modified variables that are ready to send over transport on next send_modifieds call. More...
 
void define_function (const std::string &name, knowledge::KnowledgeRecord(*func)(FunctionArguments &, Variables &))
 Defines a function. More...
 
void define_function (const std::string &name, knowledge::KnowledgeRecord(*func)(const char *, FunctionArguments &, Variables &))
 Defines a named function that can distinguish the name it was called with in MADARA. More...
 
void define_function (const std::string &name, const std::string &expression)
 Defines a MADARA KaRL function. More...
 
void define_function (const std::string &name, const CompiledExpression &expression)
 Defines a MADARA KaRL function. More...
 
madara::knowledge::KnowledgeRecord evaluate (const std::string &expression, const EvalSettings &settings=EvalSettings())
 Evaluates an expression. More...
 
madara::knowledge::KnowledgeRecord evaluate (CompiledExpression &expression, const EvalSettings &settings=EvalSettings())
 Evaluates an expression. More...
 
madara::knowledge::KnowledgeRecord evaluate (expression::ComponentNode *root, const EvalSettings &settings=EvalSettings())
 Evaluates a root-based tree (result of compile) More...
 
bool exists (const std::string &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings(false)) const
 Checks if a knowledge location exists in the context. More...
 
bool exists (const VariableReference &variable, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings(false)) const
 Checks if a knowledge variable exists in the context. More...
 
std::string expand_statement (const std::string &statement)
 Expands a statement using variable expansion. More...
 
void facade_for (ThreadSafeContext &target)
 Change the knowledge base to become a facade for another context. More...
 
madara::knowledge::KnowledgeRecord get (const std::string &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings(false))
 Retrieves a knowledge value. More...
 
madara::knowledge::KnowledgeRecord get (const VariableReference &variable, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings(false))
 Atomically returns the value of a variable. More...
 
ThreadSafeContextget_context (void)
 Returns the ThreadSafeContext associated with this Knowledge Base. More...
 
std::string get_id (void)
 Returns the unique host and ephemeral binding for this Knowlede Base. More...
 
int get_log_level (void)
 Gets the log level. More...
 
logger::Logger & get_logger (void) const
 Gets the logger used for information printing. More...
 
void get_matches (const std::string &prefix, const std::string &suffix, VariableReferences &matches)
 Creates an iteration of VariableReferences to all keys matching the prefix and suffix. More...
 
size_t get_num_transports (void)
 Gets the number of transports. More...
 
VariableReference get_ref (const std::string &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings(false))
 Atomically returns a reference to the variable. More...
 
int64_t load_context (const std::string &filename, bool use_id=true, const KnowledgeUpdateSettings &settings=KnowledgeUpdateSettings(true, true, true, false))
 Loads the context from a file. More...
 
void lock (void)
 Locks the context to prevent updates over the network. More...
 
void mark_modified (const VariableReference &variable, const KnowledgeUpdateSettings &settings=KnowledgeUpdateSettings())
 Marks the variable reference as updated. More...
 
void mark_modified (const std::string &name, const KnowledgeUpdateSettings &settings=KnowledgeUpdateSettings())
 Marks the variable as updated. More...
 
int modify (const EvalSettings &settings=EvalSettings())
 Alias for apply_modified. More...
 
void operator= (const KnowledgeBase &original)
 Assigns another instance's knowledge and settings to this instance. More...
 
void print (unsigned int level=0) const
 Prints all knowledge variables and values in the context. More...
 
void print (const std::string &statement, unsigned int level=0) const
 Expands and prints a user provided statement at a logging level. More...
 
void print_knowledge (unsigned int level=0) const
 Deprecated alias for. More...
 
int read_file (const std::string &knowledge_key, const std::string &filename, const EvalSettings &settings=EvalSettings(false, false, true, false, false))
 Read a file into the knowledge base. More...
 
int read_file (const VariableReference &variable, const std::string &filename, const EvalSettings &settings=EvalSettings(false, false, true, false, false))
 Atomically reads a file into a variable. More...
 
int read_policy (const std::string &policy_key, const std::string &policy_file)
 Read a policy into the knowledge base. More...
 
void release (void)
 Releases a recursive lock on the knowledge base. More...
 
size_t remove_transport (size_t index)
 Removes a transport. More...
 
madara::knowledge::KnowledgeRecord retrieve_index (const std::string &key, size_t index, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings(false))
 Retrieves a value at a specified index within a knowledge array. More...
 
madara::knowledge::KnowledgeRecord retrieve_index (const VariableReference &variable, size_t index, const KnowledgeReferenceSettings &settings=EvalSettings(false, false, true, false, false))
 Retrieves a value at a specified index within a knowledge array. More...
 
int64_t save_as_karl (const std::string &filename) const
 Saves the context to a file as karl assignments, rather than binary. More...
 
int64_t save_checkpoint (const std::string &filename, bool reset_modifieds=true)
 Saves a checkpoint of a list of changes to a file. More...
 
int64_t save_context (const std::string &filename) const
 Saves the context to a file. More...
 
VariableReferences save_modifieds (void) const
 Saves the list of modified records to use later for resending. More...
 
int send_modifieds (const std::string &prefix="KnowledgeBase::send_modifieds", const EvalSettings &settings=EvalSettings())
 Sends all modified variables through the attached transports. More...
 
int set (const VariableReference &variable, const std::string &value, const EvalSettings &settings=EvalSettings(false, false, true, false, false))
 Atomically sets the value of a variable to a string. More...
 
int set (const VariableReference &variable, const std::vector< double > &value, const EvalSettings &settings=EvalSettings(false, false, true, false, false))
 Atomically sets the value of a variable to a double array. More...
 
int set (const VariableReference &variable, const double *value, uint32_t size, const EvalSettings &settings=EvalSettings(false, false, true, false, false))
 Atomically sets the value of a variable to a double array. More...
 
int set (const VariableReference &variable, double value, const EvalSettings &settings=EvalSettings(false, false, true, false, false))
 Atomically sets the value of a variable to a double. More...
 
int set (const VariableReference &variable, const std::vector< KnowledgeRecord::Integer > &value, const EvalSettings &settings=EvalSettings(false, false, true, false, false))
 Atomically sets the value of a variable to an integer array. More...
 
int set (const VariableReference &variable, const madara::knowledge::KnowledgeRecord::Integer *value, uint32_t size, const EvalSettings &settings=EvalSettings(false, false, true, false, false))
 Atomically sets the value of a variable to an integer array. More...
 
int set (const VariableReference &variable, madara::knowledge::KnowledgeRecord::Integer value=knowledge::KnowledgeRecord::Integer(1), const EvalSettings &settings=EvalSettings(false, false, true, false, false))
 Atomically sets the value of a variable to an integer. More...
 
int set (const std::string &key, madara::knowledge::KnowledgeRecord::Integer value=madara::knowledge::KnowledgeRecord::MODIFIED, const EvalSettings &settings=EvalSettings(false, false, true, false, false))
 Sets a knowledge variable to a specified value. More...
 
int set (const std::string &key, const madara::knowledge::KnowledgeRecord::Integer *value, uint32_t size, const EvalSettings &settings=EvalSettings(false, false, true, false, false))
 Sets a knowledge variable to a specified value. More...
 
int set (const std::string &key, const std::vector< KnowledgeRecord::Integer > &value, const EvalSettings &settings=EvalSettings(false, false, true, false, false))
 Sets a knowledge variable to a specified value. More...
 
int set (const std::string &key, double value, const EvalSettings &settings=EvalSettings(false, false, true, false, false))
 Sets a knowledge variable to a specified value. More...
 
int set (const std::string &key, const double *value, uint32_t size, const EvalSettings &settings=EvalSettings(false, false, true, false, false))
 Sets a knowledge variable to a specified value. More...
 
int set (const std::string &key, const std::vector< double > &value, const EvalSettings &settings=EvalSettings(false, false, true, false, false))
 Sets a knowledge variable to a specified value. More...
 
int set (const std::string &key, const std::string &value, const EvalSettings &settings=EvalSettings(false, false, true, false, false))
 Sets a knowledge variable to a specified value. More...
 
int set_file (const std::string &key, const unsigned char *value, size_t size, const EvalSettings &settings=EvalSettings(false, false, true, false, false))
 Atomically sets the value of a variable to an arbitrary string. More...
 
int set_file (const VariableReference &variable, const unsigned char *value, size_t size, const EvalSettings &settings=EvalSettings(false, false, true, false, false))
 Atomically sets the value of a variable to an arbitrary string. More...
 
int set_index (const VariableReference &variable, size_t index, double value, const EvalSettings &settings=EvalSettings(false, false, true, false, false))
 Atomically sets the value of an array index to a double. More...
 
int set_index (const VariableReference &variable, size_t index, knowledge::KnowledgeRecord::Integer value=knowledge::KnowledgeRecord::Integer(1), const EvalSettings &settings=EvalSettings(false, false, true, false, false))
 Atomically sets the value of an array index to a double. More...
 
int set_index (const std::string &key, size_t index, madara::knowledge::KnowledgeRecord::Integer value, const EvalSettings &settings=EvalSettings(false, false, true, false, false))
 Sets an index within an array to a specified value. More...
 
int set_index (const std::string &key, size_t index, double value, const EvalSettings &settings=EvalSettings(false, false, true, false, false))
 Sets an index within an array to a specified value. More...
 
int set_jpeg (const std::string &key, const unsigned char *value, size_t size, const EvalSettings &settings=EvalSettings(false, false, true, false, false))
 Atomically sets the value of a variable to a JPEG image. More...
 
int set_jpeg (const VariableReference &variable, const unsigned char *value, size_t size, const EvalSettings &settings=EvalSettings(false, false, true, false, false))
 Atomically sets the value of a variable to a JPEG image. More...
 
void set_log_level (int level)
 Sets the log level. More...
 
void set_quality (const std::string &key, uint32_t quality, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings(false))
 Sets the quality of writing to a certain variable from this entity. More...
 
int set_text (const VariableReference &variable, const char *value, size_t size, const EvalSettings &settings=EvalSettings(false, false, true, false, false))
 Atomically sets the value of a variable to a text file's contents. More...
 
int set_xml (const VariableReference &variable, const char *value, size_t size, const EvalSettings &settings=EvalSettings(false, false, true, false, false))
 Atomically sets the value of a variable to an XML string. More...
 
std::string setup_unique_hostport (const std::string &host="")
 Binds to an ephemeral port for unique tie breakers in global ordering. More...
 
size_t to_map (const std::string &subject, std::map< std::string, knowledge::KnowledgeRecord > &target)
 Fills a variable map with Knowledge Records that match an expression. More...
 
size_t to_map (const std::string &prefix, const std::string &delimiter, const std::string &suffix, std::vector< std::string > &next_keys, std::map< std::string, knowledge::KnowledgeRecord > &result, bool just_keys=false)
 Fills a variable map with list of keys according to a matching prefix, suffix, and delimiter hierarchy. More...
 
knowledge::KnowledgeMap to_map (const std::string &prefix) const
 Creates a variable map with Knowledge Records that begin with the given prefix. More...
 
knowledge::KnowledgeMap to_map_stripped (const std::string &prefix) const
 Creates a map with Knowledge Records that begin with the given prefix. More...
 
void to_string (std::string &target, const std::string &array_delimiter=",", const std::string &record_delimiter=";\n", const std::string &key_val_delimiter="=") const
 Saves all keys and values into a string, using the underlying knowledge::KnowledgeRecord::to_string function. More...
 
size_t to_vector (const std::string &subject, unsigned int start, unsigned int end, std::vector< KnowledgeRecord > &target)
 Fills a vector with Knowledge Records that begin with a common subject and have a finite range of integer values. More...
 
madara::transport::TransportSettingstransport_settings (void)
 Returns a non-const reference to the Transport Settings. More...
 
void unlock (void)
 Unlocks the context to allow updates over the network (is only necessary if the context has been explicitly locked) More...
 
void use (ThreadSafeContext &original)
 Refer to and use another knowledge base's context. More...
 
madara::knowledge::KnowledgeRecord wait (const std::string &expression, const WaitSettings &settings=WaitSettings())
 Waits for an expression to be non-zero. More...
 
madara::knowledge::KnowledgeRecord wait (CompiledExpression &expression, const WaitSettings &settings=WaitSettings())
 Waits for an expression to be non-zero. More...
 
void wait_for_change (void)
 Wait for a change to happen to the context (e.g., from transports) More...
 
ssize_t write_file (const std::string &knowledge_key, const std::string &filename)
 Write a file from the knowledge base to a specified location. More...
 

Private Attributes

ThreadSafeContextcontext_
 A knowledge base can also be a facade for another knowledge base. More...
 
std::shared_ptr< KnowledgeBaseImplimpl_
 Pointer to actual implementation, i.e., the "bridge", which is reference counted to automate memory management. More...
 

Detailed Description

This class provides a distributed knowledge base to users.

Definition at line 44 of file KnowledgeBase.h.

Constructor & Destructor Documentation

madara::knowledge::KnowledgeBase::KnowledgeBase ( )

Constructor.

Definition at line 14 of file KnowledgeBase.cpp.

madara::knowledge::KnowledgeBase::KnowledgeBase ( const std::string &  host,
int  transport 
)

Constructor.

Parameters
hosthostname/ip of this machine
transporttransport to use for knowledge dissemination

Definition at line 19 of file KnowledgeBase.cpp.

madara::knowledge::KnowledgeBase::KnowledgeBase ( const std::string &  host,
int  transport,
const std::string &  domain 
)

Constructor.

Parameters
hosthostname/ip of this machine
transporttransport to use for knowledge dissemination
domainknowledge domain we want to join

Definition at line 25 of file KnowledgeBase.cpp.

madara::knowledge::KnowledgeBase::KnowledgeBase ( const std::string &  host,
const madara::transport::TransportSettings config 
)

Constructor.

Parameters
hosthostname/ip of this machine
configtransport settings to use for dissemination

Definition at line 33 of file KnowledgeBase.cpp.

madara::knowledge::KnowledgeBase::KnowledgeBase ( const KnowledgeBase original)

Copy constructor.

Parameters
originalknowledge base to copy

Definition at line 39 of file KnowledgeBase.cpp.

madara::knowledge::KnowledgeBase::~KnowledgeBase ( )

Destructor.

Definition at line 45 of file KnowledgeBase.cpp.

Member Function Documentation

void madara::knowledge::KnowledgeBase::acquire ( void  )

Acquires the recursive lock on the knowledge base.

This will block any other thread from updating or using the knowledge base until you call @ release.

Definition at line 1093 of file KnowledgeBase.cpp.

void madara::knowledge::KnowledgeBase::activate_transport ( void  )

Starts the transport mechanism for dissemination if it is closed.

Definition at line 1458 of file KnowledgeBase.cpp.

void madara::knowledge::KnowledgeBase::add_modifieds ( const VariableReferences modifieds) const

Adds a list of VariableReferences to the current modified list.

Parameters
modifiedsa list of variables to add to modified list

Definition at line 1552 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::apply_modified ( const EvalSettings settings = EvalSettings ())

Applies current time and modified to all global variables and tries to send them.

Parameters
settingsSettings for evaluating and printing
Returns
0 if there was not a problem.

Definition at line 179 of file KnowledgeBase.cpp.

void madara::knowledge::KnowledgeBase::attach_logger ( logger::Logger &  logger) const

Attaches a logger to be used for printing.

Parameters
loggerthe logger the context should lose

Definition at line 129 of file KnowledgeBase.cpp.

size_t madara::knowledge::KnowledgeBase::attach_transport ( madara::transport::Base transport)

Attaches a transport to the Knowledge Engine.

Note that the transport should use the same ThreadSafeContext as the Knowledge Engine.

Parameters
transporta new transport to attach to the Knowledge Base
Returns
the number of transports now attached

Definition at line 1467 of file KnowledgeBase.cpp.

size_t madara::knowledge::KnowledgeBase::attach_transport ( const std::string &  id,
transport::TransportSettings settings 
)

Adds a built-in transport with the specified settings.

Parameters
idunique identifier for this agent (empty string will use default generated id)
settingssettings for the new transport
Returns
the number of transports now attached

Definition at line 1494 of file KnowledgeBase.cpp.

bool madara::knowledge::KnowledgeBase::clear ( const std::string &  key,
const KnowledgeReferenceSettings settings = KnowledgeReferenceSettings () 
)

Clears a variable.

This is safer than erasing the variable. It clears the memory used in the variable and marks it as UNCREATED, meaning that it is effectively deleted, will not show up in

See also
print statements or
save_checkpoint.
Parameters
keyunique identifier of the variable
settingssettings for referring to variables
Returns
true if variable exists

Definition at line 1049 of file KnowledgeBase.cpp.

void madara::knowledge::KnowledgeBase::clear ( bool  erase = false)

Clears the knowledge base.

Parameters
eraseIf true, completely erase keys. If false, reset knowledge

Definition at line 1067 of file KnowledgeBase.cpp.

void madara::knowledge::KnowledgeBase::clear_map ( void  )

Clears the knowledge base.

Definition at line 1080 of file KnowledgeBase.cpp.

void madara::knowledge::KnowledgeBase::clear_modifieds ( void  )

Clear all modifications to the knowledge base.

This action may be useful if you are wanting to keep local changes but not inform other agents (possibly due to a need to further process and verify the information). The knowledge stays in its current form (i.e., this does not roll back state or anything like that)

Definition at line 1539 of file KnowledgeBase.cpp.

void madara::knowledge::KnowledgeBase::close_transport ( void  )

Closes the transport mechanism so no dissemination is possible.

Definition at line 197 of file KnowledgeBase.cpp.

madara::knowledge::CompiledExpression madara::knowledge::KnowledgeBase::compile ( const std::string &  expression)

Compiles a KaRL expression into an expression tree.

Parameters
expressionexpression to compile
Returns
compiled, optimized expression tree

Definition at line 1121 of file KnowledgeBase.cpp.

void madara::knowledge::KnowledgeBase::copy ( const KnowledgeBase source,
const CopySet copy_set = CopySet (),
bool  clean_copy = false 
)

Copies variables and values from source to this context.

PERFORMANCE NOTES: worst case depends on size of copy_set. If empty, performance is always O (n), where n is number of variables in the source context. If copy_set is not empty, then performance is O (m log n) where m is the number of variables in copy_set and n is number of variables in the source context.
 
Note that this is a deep copy due to the fact that source and destination are expected to have their own thread management (ref-counted variables can be problematic if shallow copy).

Parameters
sourcethe source knowledge base to copy from
copy_seta map of variables that should be copied. If empty, then everything is copied. If not empty, only the supplied variables will be copied.
clean_copyif true, clear the destination context (this) before copying.

Definition at line 157 of file KnowledgeBase.cpp.

std::string madara::knowledge::KnowledgeBase::debug_modifieds ( void  ) const

Retrieves a stringified list of all modified variables that are ready to send over transport on next send_modifieds call.

Returns
stringified list of the modified knowledge records

Definition at line 1597 of file KnowledgeBase.cpp.

void madara::knowledge::KnowledgeBase::define_function ( const std::string &  name,
knowledge::KnowledgeRecord(*)(FunctionArguments &, Variables &)  func 
)

Defines a function.

Parameters
namename of the function
funcexternal function to call with this name

Definition at line 1213 of file KnowledgeBase.cpp.

void madara::knowledge::KnowledgeBase::define_function ( const std::string &  name,
knowledge::KnowledgeRecord(*)(const char *, FunctionArguments &, Variables &)  func 
)

Defines a named function that can distinguish the name it was called with in MADARA.

Parameters
namename of the function
funcexternal function to call with this name

Definition at line 1198 of file KnowledgeBase.cpp.

void madara::knowledge::KnowledgeBase::define_function ( const std::string &  name,
const std::string &  expression 
)

Defines a MADARA KaRL function.

Parameters
namename of the function
expressionKaRL function body

Definition at line 1267 of file KnowledgeBase.cpp.

void madara::knowledge::KnowledgeBase::define_function ( const std::string &  name,
const CompiledExpression expression 
)

Defines a MADARA KaRL function.

Parameters
namename of the function
expressionKaRL function body

Definition at line 1286 of file KnowledgeBase.cpp.

madara::knowledge::KnowledgeRecord madara::knowledge::KnowledgeBase::evaluate ( const std::string &  expression,
const EvalSettings settings = EvalSettings () 
)

Evaluates an expression.

Parameters
expressionKaRL expression to evaluate
settingsSettings for evaluating and printing
Returns
value of expression

Definition at line 1136 of file KnowledgeBase.cpp.

madara::knowledge::KnowledgeRecord madara::knowledge::KnowledgeBase::evaluate ( CompiledExpression expression,
const EvalSettings settings = EvalSettings () 
)

Evaluates an expression.

Parameters
expressionKaRL expression to evaluate (result of compile)
settingsSettings for evaluating and printing
Returns
value of expression

Definition at line 1157 of file KnowledgeBase.cpp.

madara::knowledge::KnowledgeRecord madara::knowledge::KnowledgeBase::evaluate ( expression::ComponentNode root,
const EvalSettings settings = EvalSettings () 
)

Evaluates a root-based tree (result of compile)

Parameters
rootroot-based tree
settingsSettings for evaluating and printing
Returns
value of expression

Definition at line 1177 of file KnowledgeBase.cpp.

bool madara::knowledge::KnowledgeBase::exists ( const std::string &  key,
const KnowledgeReferenceSettings settings = KnowledgeReferenceSettings (false) 
) const

Checks if a knowledge location exists in the context.

Parameters
keyknowledge variable location
settingssettings for referring to knowledge variables
Returns
true if location has been set

Definition at line 893 of file KnowledgeBase.cpp.

bool madara::knowledge::KnowledgeBase::exists ( const VariableReference variable,
const KnowledgeReferenceSettings settings = KnowledgeReferenceSettings (false) 
) const

Checks if a knowledge variable exists in the context.

Parameters
variableknowledge variable reference
settingssettings for referring to knowledge variables
Returns
true if location has been set

Definition at line 912 of file KnowledgeBase.cpp.

std::string madara::knowledge::KnowledgeBase::expand_statement ( const std::string &  statement)

Expands a statement using variable expansion.

For example, if the statement were MyKnowledge.{.id}, and .id==1, then the statement would be expanded to MyKnowledge.1

Parameters
statementstatement to expand
Returns
expanded statement

Definition at line 460 of file KnowledgeBase.cpp.

void madara::knowledge::KnowledgeBase::facade_for ( ThreadSafeContext target)

Change the knowledge base to become a facade for another context.

It is extremely important that the context stays within scope for the duration of the life of this Knowledge Base. Otherwise, the Knowledge Base will eventually point to invalid memory

Parameters
targetthe target context to manipulate

Definition at line 1681 of file KnowledgeBase.cpp.

madara::knowledge::KnowledgeRecord madara::knowledge::KnowledgeBase::get ( const std::string &  key,
const KnowledgeReferenceSettings settings = KnowledgeReferenceSettings (false) 
)

Retrieves a knowledge value.

Parameters
keyknowledge location
settingssettings for referring to knowledge variables
Returns
value at knowledge location

Definition at line 206 of file KnowledgeBase.cpp.

madara::knowledge::KnowledgeRecord madara::knowledge::KnowledgeBase::get ( const VariableReference variable,
const KnowledgeReferenceSettings settings = KnowledgeReferenceSettings (false) 
)

Atomically returns the value of a variable.

Parameters
variablereference to a variable (
See also
get_ref)
Parameters
settingsthe settings for referring to variables
Returns
the madara::knowledge::KnowledgeRecord::Integer value for the variable

Definition at line 242 of file KnowledgeBase.cpp.

madara::knowledge::ThreadSafeContext & madara::knowledge::KnowledgeBase::get_context ( void  )

Returns the ThreadSafeContext associated with this Knowledge Base.

This is necessary for creating custom transports.

Returns
the context used by the knowledge base

Definition at line 1522 of file KnowledgeBase.cpp.

std::string madara::knowledge::KnowledgeBase::get_id ( void  )

Returns the unique host and ephemeral binding for this Knowlede Base.

Returns
host:port identifier for this knowledge base

Definition at line 1618 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::get_log_level ( void  )

Gets the log level.

Returns
the maximum detail level to print

Definition at line 99 of file KnowledgeBase.cpp.

madara::logger::Logger & madara::knowledge::KnowledgeBase::get_logger ( void  ) const

Gets the logger used for information printing.

Returns
the context's logger

Definition at line 116 of file KnowledgeBase.cpp.

void madara::knowledge::KnowledgeBase::get_matches ( const std::string &  prefix,
const std::string &  suffix,
VariableReferences matches 
)

Creates an iteration of VariableReferences to all keys matching the prefix and suffix.

Parameters
prefixstring that the key must start with
suffixstring that the key must end with
matchesall VariableReferences matching the prefix and suffix

Definition at line 1666 of file KnowledgeBase.cpp.

size_t madara::knowledge::KnowledgeBase::get_num_transports ( void  )

Gets the number of transports.

Returns
the number of transports

Definition at line 1481 of file KnowledgeBase.cpp.

madara::knowledge::VariableReference madara::knowledge::KnowledgeBase::get_ref ( const std::string &  key,
const KnowledgeReferenceSettings settings = KnowledgeReferenceSettings (false) 
)

Atomically returns a reference to the variable.

Variable references are efficient mechanisms for reference variables individually–similar to speedups seen from CompiledExpression.

Parameters
keyunique identifier of the variable
settingssettings for referring to knowledge variables
Returns
reference to the variable in the context

Definition at line 224 of file KnowledgeBase.cpp.

int64_t madara::knowledge::KnowledgeBase::load_context ( const std::string &  filename,
bool  use_id = true,
const KnowledgeUpdateSettings settings = KnowledgeUpdateSettings (true, true, true, false) 
)

Loads the context from a file.

Parameters
filenamename of the file to open
use_idif true, sets the unique identifier to the one found in the saved context. If false, keeps the default identifier.
settingssettings to use when applying updates to context
Returns
total bytes read

Definition at line 1822 of file KnowledgeBase.cpp.

void madara::knowledge::KnowledgeBase::lock ( void  )

Locks the context to prevent updates over the network.

Definition at line 73 of file KnowledgeBase.cpp.

void madara::knowledge::KnowledgeBase::mark_modified ( const VariableReference variable,
const KnowledgeUpdateSettings settings = KnowledgeUpdateSettings() 
)

Marks the variable reference as updated.

Parameters
variablereference to a variable (
See also
get_ref)
Parameters
settingssettings for applying the update

Definition at line 498 of file KnowledgeBase.cpp.

void madara::knowledge::KnowledgeBase::mark_modified ( const std::string &  name,
const KnowledgeUpdateSettings settings = KnowledgeUpdateSettings() 
)

Marks the variable as updated.

Parameters
namename of the variable
settingssettings for applying the update

Definition at line 513 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::modify ( const EvalSettings settings = EvalSettings ())
inline

Alias for apply_modified.

See also
apply_modified
Parameters
settingsSettings for evaluating and printing
Returns
0 if there was not a problem.

Definition at line 16 of file KnowledgeBase.inl.

void madara::knowledge::KnowledgeBase::operator= ( const KnowledgeBase original)

Assigns another instance's knowledge and settings to this instance.

Assignment operator.

Parameters
originalknowledge base to copy

Definition at line 52 of file KnowledgeBase.cpp.

void madara::knowledge::KnowledgeBase::print ( unsigned int  level = 0) const

Prints all knowledge variables and values in the context.

Parameters
levellevel to log the knowledge at

Definition at line 987 of file KnowledgeBase.cpp.

void madara::knowledge::KnowledgeBase::print ( const std::string &  statement,
unsigned int  level = 0 
) const

Expands and prints a user provided statement at a logging level.

For example, if the statement were MyKnowledge.{.id}, and .id==1, then the statement would be expanded to MyKnowledge.1

Parameters
statementstatement to expand with variable values
levellevel to log the knowledge at

Definition at line 1035 of file KnowledgeBase.cpp.

void madara::knowledge::KnowledgeBase::print_knowledge ( unsigned int  level = 0) const

Deprecated alias for.

See also
print with only level. This class member will print all knowledge in the context.
Parameters
levellevel to log the knowledge at

Definition at line 1001 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::read_file ( const std::string &  knowledge_key,
const std::string &  filename,
const EvalSettings settings = EvalSettings (false, false, true, false, false) 
)

Read a file into the knowledge base.

Parameters
filenamefile to read
knowledge_keykey to store the file into
settingssettings to use when evaluating/updating

Definition at line 300 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::read_file ( const VariableReference variable,
const std::string &  filename,
const EvalSettings settings = EvalSettings (false, false, true, false, false) 
)

Atomically reads a file into a variable.

Parameters
variablereference to a variable (
See also
get_ref)
Parameters
filenamefile to read
settingssettings for applying the update
Returns
0 if the value was set. -1 if unsuccessful

Definition at line 320 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::read_policy ( const std::string &  policy_key,
const std::string &  policy_file 
)

Read a policy into the knowledge base.

Parameters
policy_keykey to read the policy into
policy_filefile to read the policy from

Definition at line 430 of file KnowledgeBase.cpp.

void madara::knowledge::KnowledgeBase::release ( void  )

Releases a recursive lock on the knowledge base.

This will allow other thread to access the knowledge base if you had previously called @ acquire.

Definition at line 1106 of file KnowledgeBase.cpp.

size_t madara::knowledge::KnowledgeBase::remove_transport ( size_t  index)

Removes a transport.

Parameters
indexindex of the transport to remove. If invalid, nothing is removed.
Returns
the size of transports now attached

Definition at line 1508 of file KnowledgeBase.cpp.

madara::knowledge::KnowledgeRecord madara::knowledge::KnowledgeBase::retrieve_index ( const std::string &  key,
size_t  index,
const KnowledgeReferenceSettings settings = KnowledgeReferenceSettings (false) 
)

Retrieves a value at a specified index within a knowledge array.

Parameters
keyknowledge location
indexindex within the array
settingssettings for referring to knowledge variables
Returns
value at knowledge location

Definition at line 261 of file KnowledgeBase.cpp.

madara::knowledge::KnowledgeRecord madara::knowledge::KnowledgeBase::retrieve_index ( const VariableReference variable,
size_t  index,
const KnowledgeReferenceSettings settings = EvalSettings (false, false, true, false, false) 
)

Retrieves a value at a specified index within a knowledge array.

Parameters
variablereference to a variable (
See also
get_ref)
Parameters
indexindex within the array
settingssettings for referring to knowledge variables
Returns
value at knowledge location

Definition at line 280 of file KnowledgeBase.cpp.

int64_t madara::knowledge::KnowledgeBase::save_as_karl ( const std::string &  filename) const

Saves the context to a file as karl assignments, rather than binary.

Parameters
filenamename of the file to save to
Returns
total bytes written

Definition at line 1784 of file KnowledgeBase.cpp.

int64_t madara::knowledge::KnowledgeBase::save_checkpoint ( const std::string &  filename,
bool  reset_modifieds = true 
)

Saves a checkpoint of a list of changes to a file.

Parameters
filenamename of the file to open
reset_modifiedsif true, resets the modified list to empty.
Returns
total bytes written

Definition at line 1803 of file KnowledgeBase.cpp.

int64_t madara::knowledge::KnowledgeBase::save_context ( const std::string &  filename) const

Saves the context to a file.

Parameters
filenamename of the file to save to
Returns
total bytes written

Definition at line 1765 of file KnowledgeBase.cpp.

madara::knowledge::VariableReferences madara::knowledge::KnowledgeBase::save_modifieds ( void  ) const

Saves the list of modified records to use later for resending.

This does not clear the modified list. This feature is useful if you want to remember what has been modified and then resend later, e.g., if you believe packets may be dropped and want to resend information. Use this function in conjunction with

See also
add_modifieds to remodify
Returns
a vector of VariableReferences to the current modified list

Definition at line 1565 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::send_modifieds ( const std::string &  prefix = "KnowledgeBase::send_modifieds",
const EvalSettings settings = EvalSettings () 
)

Sends all modified variables through the attached transports.

Parameters
prefixfor logging purposes, the descriptor prefix for calling method
settingssettings for sending modifications
Returns
number of transports the modifications were sent to

Definition at line 1582 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::set ( const VariableReference variable,
const std::string &  value,
const EvalSettings settings = EvalSettings (false, false, true, false, false) 
)

Atomically sets the value of a variable to a string.

Parameters
variablereference to a variable (
See also
get_ref)
Parameters
valuenew value of the variable
settingssettings for applying the update
Returns
0 if the value was set. -1 if null key

Definition at line 855 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::set ( const VariableReference variable,
const std::vector< double > &  value,
const EvalSettings settings = EvalSettings (false, false, true, false, false) 
)

Atomically sets the value of a variable to a double array.

Parameters
variablereference to a variable (
See also
get_ref)
Parameters
valuea STL vector of doubles
settingssettings for applying the update
Returns
0 if the value was set. -1 if null key

Definition at line 816 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::set ( const VariableReference variable,
const double *  value,
uint32_t  size,
const EvalSettings settings = EvalSettings (false, false, true, false, false) 
)

Atomically sets the value of a variable to a double array.

Parameters
variablereference to a variable (
See also
get_ref)
Parameters
valuean array of doubles
sizenumber of elements in the array
settingssettings for applying the update
Returns
0 if the value was set. -1 if null key

Definition at line 775 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::set ( const VariableReference variable,
double  value,
const EvalSettings settings = EvalSettings (false, false, true, false, false) 
)

Atomically sets the value of a variable to a double.

Parameters
variablereference to a variable (
See also
get_ref)
Parameters
valuenew value of the variable
settingssettings for applying the update
Returns
0 if the value was set. -1 if null key

Definition at line 692 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::set ( const VariableReference variable,
const std::vector< KnowledgeRecord::Integer > &  value,
const EvalSettings settings = EvalSettings (false, false, true, false, false) 
)

Atomically sets the value of a variable to an integer array.

Parameters
variablereference to a variable (
See also
get_ref)
Parameters
valuea STL vector of Integers
settingssettings for applying the update
Returns
0 if the value was set. -1 if null key

Definition at line 652 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::set ( const VariableReference variable,
const madara::knowledge::KnowledgeRecord::Integer value,
uint32_t  size,
const EvalSettings settings = EvalSettings (false, false, true, false, false) 
)

Atomically sets the value of a variable to an integer array.

Parameters
variablereference to a variable (
See also
get_ref)
Parameters
valuean array of Integers
sizenumber of elements in the array
settingssettings for applying the update
Returns
0 if the value was set. -1 if null key

Definition at line 611 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::set ( const VariableReference variable,
madara::knowledge::KnowledgeRecord::Integer  value = knowledge::KnowledgeRecord::Integer (1),
const EvalSettings settings = EvalSettings (false, false, true, false, false) 
)

Atomically sets the value of a variable to an integer.

Parameters
variablereference to a variable (
See also
get_ref)
Parameters
valuenew value of the variable
settingssettings for applying the update
Returns
0 if the value was set. -1 if null key

Definition at line 528 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::set ( const std::string &  key,
madara::knowledge::KnowledgeRecord::Integer  value = madara::knowledge::KnowledgeRecord::MODIFIED,
const EvalSettings settings = EvalSettings (false, false, true, false, false) 
)

Sets a knowledge variable to a specified value.

Parameters
keyknowledge variable location
valuevalue to set at location
settingssettings for applying the update
Returns
0 if successful, -1 if key is null, and -2 if quality isn't high enough

Definition at line 478 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::set ( const std::string &  key,
const madara::knowledge::KnowledgeRecord::Integer value,
uint32_t  size,
const EvalSettings settings = EvalSettings (false, false, true, false, false) 
)

Sets a knowledge variable to a specified value.

Parameters
keyknowledge variable location
valuearray of integers to set at the location
sizenumber of elements in the array
settingssettings for applying the update
Returns
0 if successful, -1 if key is null, and -2 if quality isn't high enough

Definition at line 590 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::set ( const std::string &  key,
const std::vector< KnowledgeRecord::Integer > &  value,
const EvalSettings settings = EvalSettings (false, false, true, false, false) 
)

Sets a knowledge variable to a specified value.

Parameters
keyknowledge variable location
valuearray of integers to set at the location
settingssettings for applying the update
Returns
0 if successful, -1 if key is null, and -2 if quality isn't high enough

Definition at line 632 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::set ( const std::string &  key,
double  value,
const EvalSettings settings = EvalSettings (false, false, true, false, false) 
)

Sets a knowledge variable to a specified value.

Parameters
keyknowledge variable location
valuevalue to set at location
settingssettings for applying the update
Returns
0 if successful, -1 if key is null, and -2 if quality isn't high enough

Definition at line 672 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::set ( const std::string &  key,
const double *  value,
uint32_t  size,
const EvalSettings settings = EvalSettings (false, false, true, false, false) 
)

Sets a knowledge variable to a specified value.

Parameters
keyknowledge variable location
valuearray of doubles to set at the location
sizenumber of elements in the array
settingssettings for applying the update
Returns
0 if successful, -1 if key is null, and -2 if quality isn't high enough

Definition at line 754 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::set ( const std::string &  key,
const std::vector< double > &  value,
const EvalSettings settings = EvalSettings (false, false, true, false, false) 
)

Sets a knowledge variable to a specified value.

Parameters
keyknowledge variable location
valuearray of doubles to set at the location
settingssettings for applying the update
Returns
0 if successful, -1 if key is null, and -2 if quality isn't high enough

Definition at line 796 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::set ( const std::string &  key,
const std::string &  value,
const EvalSettings settings = EvalSettings (false, false, true, false, false) 
)

Sets a knowledge variable to a specified value.

Parameters
keyknowledge variable location
valuevalue to set at location
settingssettings for applying the update
Returns
0 if successful, -1 if key is null, and -2 if quality isn't high enough

Definition at line 836 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::set_file ( const std::string &  key,
const unsigned char *  value,
size_t  size,
const EvalSettings settings = EvalSettings (false, false, true, false, false) 
)

Atomically sets the value of a variable to an arbitrary string.

Parameters
keyname of a variable
valuenew value of the variable
sizeindicates the size of the value buffer
settingssettings for applying the update
Returns
0 if the value was set. -1 if null key

Definition at line 340 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::set_file ( const VariableReference variable,
const unsigned char *  value,
size_t  size,
const EvalSettings settings = EvalSettings (false, false, true, false, false) 
)

Atomically sets the value of a variable to an arbitrary string.

Parameters
variablereference to a variable (
See also
get_ref)
Parameters
valuenew value of the variable
sizeindicates the size of the value buffer
settingssettings for applying the update
Returns
0 if the value was set. -1 if null key

Definition at line 365 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::set_index ( const VariableReference variable,
size_t  index,
double  value,
const EvalSettings settings = EvalSettings (false, false, true, false, false) 
)

Atomically sets the value of an array index to a double.

Parameters
variablereference to a variable (
See also
get_ref)
Parameters
indexindex within array
valuenew value of the array index
settingssettings for applying the update
Returns
0 if the value was set. -1 if null key

Definition at line 733 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::set_index ( const VariableReference variable,
size_t  index,
knowledge::KnowledgeRecord::Integer  value = knowledge::KnowledgeRecord::Integer (1),
const EvalSettings settings = EvalSettings (false, false, true, false, false) 
)

Atomically sets the value of an array index to a double.

Parameters
variablereference to a variable (
See also
get_ref)
Parameters
indexindex within array
valuenew value of the array index
settingssettings for applying the update
Returns
0 if the value was set. -1 if null key

Definition at line 569 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::set_index ( const std::string &  key,
size_t  index,
madara::knowledge::KnowledgeRecord::Integer  value,
const EvalSettings settings = EvalSettings (false, false, true, false, false) 
)

Sets an index within an array to a specified value.

Parameters
keyknowledge variable location
indexindex of the location in the array
valuevalue to set at location
settingssettings for applying the update
Returns
0 if successful, -1 if key is null, and -2 if quality isn't high enough

Definition at line 548 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::set_index ( const std::string &  key,
size_t  index,
double  value,
const EvalSettings settings = EvalSettings (false, false, true, false, false) 
)

Sets an index within an array to a specified value.

Parameters
keyknowledge variable location
indexindex of the location in the array
valuevalue to set at location
settingssettings for applying the update
Returns
0 if successful, -1 if key is null, and -2 if quality isn't high enough

Definition at line 712 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::set_jpeg ( const std::string &  key,
const unsigned char *  value,
size_t  size,
const EvalSettings settings = EvalSettings (false, false, true, false, false) 
)

Atomically sets the value of a variable to a JPEG image.

Parameters
keyname of a variable
valuenew value of the variable
sizeindicates the size of the value buffer
settingssettings for applying the update
Returns
0 if the value was set. -1 if null key

Definition at line 385 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::set_jpeg ( const VariableReference variable,
const unsigned char *  value,
size_t  size,
const EvalSettings settings = EvalSettings (false, false, true, false, false) 
)

Atomically sets the value of a variable to a JPEG image.

Parameters
variablereference to a variable (
See also
get_ref)
Parameters
valuenew value of the variable
sizeindicates the size of the value buffer
settingssettings for applying the update
Returns
0 if the value was set. -1 if null key

Definition at line 410 of file KnowledgeBase.cpp.

void madara::knowledge::KnowledgeBase::set_log_level ( int  level)

Sets the log level.

Parameters
levelthe maximum detail level to print

Definition at line 143 of file KnowledgeBase.cpp.

void madara::knowledge::KnowledgeBase::set_quality ( const std::string &  key,
uint32_t  quality,
const KnowledgeReferenceSettings settings = KnowledgeReferenceSettings (false) 
)

Sets the quality of writing to a certain variable from this entity.

Set quality of writing to a variable.

Parameters
keyknowledge variable location
qualityquality of writing to this location
settingssettings for referring to knowledge variables

Definition at line 877 of file KnowledgeBase.cpp.

int madara::knowledge::KnowledgeBase::set_text ( const VariableReference variable,
const char *  value,
size_t  size,
const EvalSettings settings = EvalSettings(false, false, true, false, false) 
)

Atomically sets the value of a variable to a text file's contents.

Parameters
variablereference to a variable (
See also
get_ref)
Parameters
valuenew value of the variable
sizeindicates the size of the value buffer
settingssettings for applying the update
Returns
0 if the value was set. -1 if null key
int madara::knowledge::KnowledgeBase::set_xml ( const VariableReference variable,
const char *  value,
size_t  size,
const EvalSettings settings = EvalSettings(false, false, true, false, false) 
)

Atomically sets the value of a variable to an XML string.

Parameters
variablereference to a variable (
See also
get_ref)
Parameters
valuenew value of the variable
sizeindicates the size of the value buffer
settingssettings for applying the update
Returns
0 if the value was set. -1 if null key
std::string madara::knowledge::KnowledgeBase::setup_unique_hostport ( const std::string &  host = "")

Binds to an ephemeral port for unique tie breakers in global ordering.

Call this function if you want to generate a unique id for a custom transport to use (or a built-in transport if you are creating one outside of the KnowledgeBase.

Parameters
hostunique host identifier string ("" if requesting a generated id.
Returns
unique host id (same as host param if host is not "")

Definition at line 1855 of file KnowledgeBase.cpp.

size_t madara::knowledge::KnowledgeBase::to_map ( const std::string &  subject,
std::map< std::string, knowledge::KnowledgeRecord > &  target 
)

Fills a variable map with Knowledge Records that match an expression.

At the moment, this expression must be of the form "subject*"

Parameters
subjectAn expression that matches the variable names that are of interest. Wildcards may only be at the end.
targetThe map that will be filled with variable names and the Knowledge Records they correspond to
Returns
entries in the resulting map

Definition at line 1689 of file KnowledgeBase.cpp.

size_t madara::knowledge::KnowledgeBase::to_map ( const std::string &  prefix,
const std::string &  delimiter,
const std::string &  suffix,
std::vector< std::string > &  next_keys,
std::map< std::string, knowledge::KnowledgeRecord > &  result,
bool  just_keys = false 
)

Fills a variable map with list of keys according to a matching prefix, suffix, and delimiter hierarchy.

This is useful for understanding the logical hierarchy of your variables (and also a key utility of containers like

See also
containers::FlexMap).
Parameters
prefixText that must be present at the front of the key
delimiterText that signifies a logical boundary in hierarchy If empty, no check is performed.
suffixText that must be present at the end of the key. If empty, no check is performed.
next_keysThe immediate keys in the hierarchy after prefix
resultThe map that will be filled with full variable names and the Knowledge Records that correspond to
just_keysif true, do not fill result, only next_keys
Returns
entries in the resulting map

Definition at line 1708 of file KnowledgeBase.cpp.

madara::knowledge::KnowledgeMap madara::knowledge::KnowledgeBase::to_map ( const std::string &  prefix) const

Creates a variable map with Knowledge Records that begin with the given prefix.

Runs in O(log n + m) time, where n is the size of the KnowledgeBase, and m is the number of matching records

Parameters
prefixPrefix string to match with
Returns
A new map with just entries starting with prefix

Definition at line 1733 of file KnowledgeBase.cpp.

madara::knowledge::KnowledgeMap madara::knowledge::KnowledgeBase::to_map_stripped ( const std::string &  prefix) const

Creates a map with Knowledge Records that begin with the given prefix.

Runs in O(log n + m) time, where n is the size of the KnowledgeBase, and m is the number of matching records

All key names have the "prefix" portion stripped off their front in the returned map.

Parameters
prefixPrefix string to match with
Returns
A new map with just entries starting with prefix

Definition at line 1749 of file KnowledgeBase.cpp.

void madara::knowledge::KnowledgeBase::to_string ( std::string &  target,
const std::string &  array_delimiter = ",",
const std::string &  record_delimiter = ";\n",
const std::string &  key_val_delimiter = "=" 
) const

Saves all keys and values into a string, using the underlying knowledge::KnowledgeRecord::to_string function.

This is an optimized version that allows the specification of a target string to avoid string copying (which can be expensive with longer strings across multiple function boundaries). This function differs from knowledge::KnowledgeRecord to_string in that it is intended to save the database in a format that can be easily parseable. Consequently, strings are delineated in this function by being included in single quotes. Arrays are delineated with array indices [].

This is not appropriate for saving the context if it has binary data inside of it, as only the size of the data entry would be saved.

Parameters
targetwhere to store the resulting string operation.
array_delimiterfor any arrays, the characters in between data elements.
record_delimiterthe characters to place between individual key/value pairs
key_val_delimiterthe characters to place between keys and values.

Definition at line 1015 of file KnowledgeBase.cpp.

size_t madara::knowledge::KnowledgeBase::to_vector ( const std::string &  subject,
unsigned int  start,
unsigned int  end,
std::vector< KnowledgeRecord > &  target 
)

Fills a vector with Knowledge Records that begin with a common subject and have a finite range of integer values.

Parameters
subjectThe common subject of the variable names. For instance, if we are looking for a range of vars like "var0", "var1", "var2", then the common subject would be "var".
startAn inclusive start index
endAn inclusive end index
targetThe vector that will be filled with Knowledge Record instances within the subject range.
Returns
entries in the resulting vector

Definition at line 1645 of file KnowledgeBase.cpp.

madara::transport::TransportSettings & madara::knowledge::KnowledgeBase::transport_settings ( void  )

Returns a non-const reference to the Transport Settings.

Returns
settings reference

Definition at line 981 of file KnowledgeBase.cpp.

void madara::knowledge::KnowledgeBase::unlock ( void  )

Unlocks the context to allow updates over the network (is only necessary if the context has been explicitly locked)

Definition at line 86 of file KnowledgeBase.cpp.

void madara::knowledge::KnowledgeBase::use ( ThreadSafeContext original)

Refer to and use another knowledge base's context.

Parameters
originalknowledge base to refer to

Definition at line 65 of file KnowledgeBase.cpp.

madara::knowledge::KnowledgeRecord madara::knowledge::KnowledgeBase::wait ( const std::string &  expression,
const WaitSettings settings = WaitSettings () 
)

Waits for an expression to be non-zero.

Always disseminates modifications.

Parameters
expressionKaRL expression to wait on
settingsSettings for the underlying expression evaluation and printing
Returns
value of expression

Definition at line 1436 of file KnowledgeBase.cpp.

madara::knowledge::KnowledgeRecord madara::knowledge::KnowledgeBase::wait ( CompiledExpression expression,
const WaitSettings settings = WaitSettings () 
)

Waits for an expression to be non-zero.

Provides additional settings for fine-tuning the time to wait and atomic print statements.

Parameters
expressionKaRL expression to wait on (result of compile)
settingsSettings for the underlying expression evaluation and printing
Returns
value of expression

The only situation this can be useful will be if the thread safe context is being used as a shared memory structure between threads. This should not be used for processes communicating together because the wait statement is unable to send modifieds as it has zero concept of transports. The type of knowledge base handled here is a facade for another knowledge base's context.

Definition at line 1300 of file KnowledgeBase.cpp.

void madara::knowledge::KnowledgeBase::wait_for_change ( void  )

Wait for a change to happen to the context (e.g., from transports)

Definition at line 1842 of file KnowledgeBase.cpp.

ssize_t madara::knowledge::KnowledgeBase::write_file ( const std::string &  knowledge_key,
const std::string &  filename 
)

Write a file from the knowledge base to a specified location.

Parameters
filenamefile to write to
knowledge_keykey to read the file from

Definition at line 445 of file KnowledgeBase.cpp.

Member Data Documentation

ThreadSafeContext* madara::knowledge::KnowledgeBase::context_
private

A knowledge base can also be a facade for another knowledge base.

Definition at line 1193 of file KnowledgeBase.h.

std::shared_ptr<KnowledgeBaseImpl> madara::knowledge::KnowledgeBase::impl_
private

Pointer to actual implementation, i.e., the "bridge", which is reference counted to automate memory management.

Definition at line 1189 of file KnowledgeBase.h.


The documentation for this class was generated from the following files: