Exemplo n.º 1
0
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();
    }
  }
}
Exemplo n.º 2
0
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);
  }
}
Exemplo n.º 3
0
/**
 * 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;
}
Exemplo n.º 4
0
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;
}
Exemplo n.º 5
0
/**
 * 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;
}
Exemplo n.º 6
0
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;
}
Exemplo n.º 7
0
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;
}