void madara::knowledge::containers::FlexMap::set_name( const std::string& var_name, KnowledgeBase& knowledge) { if (context_ != &(knowledge.get_context()) || name_ != var_name) { context_ = &(knowledge.get_context()); ContextGuard context_guard(*context_); MADARA_GUARD_TYPE guard(mutex_); name_ = var_name; if (context_->exists(var_name, settings_)) { KnowledgeUpdateSettings keep_local(true); variable_ = context_->get_ref(var_name, keep_local); } else { // reset variable reference variable_ = VariableReference(); } } }
void madara::knowledge::containers::FlexMap::update_variable(void) const { if (context_ && name_ != "") { ContextGuard context_guard(*context_); MADARA_GUARD_TYPE guard(mutex_); KnowledgeUpdateSettings keep_local(true); variable_ = context_->get_ref(name_, keep_local); } }
/** * Checks if the value in the record is false (0) * @return true if value is false **/ bool madara::knowledge::containers::FlexMap::is_false(void) const { ContextGuard context_guard(*context_); bool result(true); KnowledgeUpdateSettings keep_local(true); if (!variable_.is_valid()) { result = context_->get(variable_, keep_local).is_true(); } return result; }
madara::knowledge::KnowledgeRecord madara::knowledge::containers::IntegerVector::to_record ( size_t index) const { knowledge::KnowledgeRecord result; KnowledgeUpdateSettings keep_local (true); if (index < vector_.size () && context_) { ContextGuard context_guard (*context_); MADARA_GUARD_TYPE guard (mutex_); result = context_->get (vector_[index], keep_local); } return result; }
/** * Checks if the value in the record is not false (0) * @return true if value is not false **/ bool madara::knowledge::containers::FlexMap::is_true(void) const { ContextGuard context_guard(*context_); bool result(false); KnowledgeUpdateSettings keep_local(true); madara_logger_log(context_->get_logger(), logger::LOG_MAJOR, "Vector::is_true: checking for non-zero value\n"); if (variable_.is_valid()) { result = context_->get(variable_, keep_local).is_true(); } madara_logger_log(context_->get_logger(), logger::LOG_MAJOR, "FlexMap::is_true: final result is %d\n", (int)result); return result; }
madara::knowledge::VariableReference madara::knowledge::containers::IntegerVector::get_size_ref (void) { VariableReference ref; if (context_ && name_ != "") { KnowledgeUpdateSettings keep_local (true); std::stringstream buffer; ContextGuard context_guard (*context_); MADARA_GUARD_TYPE guard (mutex_); buffer << name_; buffer << delimiter_; buffer << "size"; ref = context_->get_ref (buffer.str (), keep_local); } return ref; }
madara::knowledge::KnowledgeRecord madara::knowledge::containers::IntegerVector::to_record (void) const { knowledge::KnowledgeRecord result; KnowledgeUpdateSettings keep_local (true); // if we have something to actually set if (vector_.size () > 0 && context_) { ContextGuard context_guard (*context_); MADARA_GUARD_TYPE guard (mutex_); // set last element first so we're not constantly resizing result.set_index (vector_.size () - 1, context_->get (vector_[vector_.size () - 1], keep_local).to_integer ()); for (size_t i = 0; i < vector_.size () - 1; ++i) { result.set_index (i, context_->get (vector_[i], keep_local).to_integer ()); } } return result; }