void madara::knowledge::containers::IntegerVector::transfer_to (IntegerVector & other) { if (context_ && other.context_) { ContextGuard context_guard (*context_); ContextGuard other_context_guard (*other.context_); MADARA_GUARD_TYPE guard (mutex_); MADARA_GUARD_TYPE guard2 (other.mutex_); size_t other_size = other.vector_.size (); size_t this_size = this->vector_.size (); size_t size = other_size + this_size; other.resize ((int)size); for (size_t i = 0, j = other_size; i < this_size; ++i, ++j) { other.context_->set (other.vector_[j], (*this)[i], other.settings_); } this->resize (0, true); } }
void madara::knowledge::containers::IntegerVector::exchange ( IntegerVector & other, bool refresh_keys, bool delete_keys) { if (context_ && other.context_) { ContextGuard context_guard (*context_); ContextGuard other_context_guard (*other.context_); MADARA_GUARD_TYPE guard (mutex_), guard2 (other.mutex_); if (refresh_keys) { other.resize (); this->resize (); } size_t other_size = other.vector_.size (); size_t this_size = this->vector_.size (); for (size_t i = 0; i < this_size; ++i) { // temp = this[i]; knowledge::KnowledgeRecord temp = context_->get (this->vector_[i], settings_); if (i < other_size) { // this[i] = other[i]; context_->set (this->vector_[i], context_->get (other.vector_[i], other.settings_), settings_); // other[i] = temp; other.context_->set (other.vector_[i], temp, other.settings_); } else { if (delete_keys) { std::stringstream buffer; buffer << this->name_; buffer << delimiter_; buffer << i; this->context_->delete_variable (buffer.str (), other.settings_); } else { knowledge::KnowledgeRecord zero; this->context_->set (this->vector_[i], zero, this->settings_); } { std::stringstream buffer; buffer << other.name_; buffer << delimiter_; buffer << i; // other[i] = temp; other.context_->set (buffer.str (), temp, other.settings_); } } } // copy the other vector's elements to this vector's location for (size_t i = this_size; i < other_size; ++i) { std::stringstream buffer; buffer << this->name_; buffer << delimiter_; buffer << i; context_->set (buffer.str (), other.context_->get (other.vector_[i], other.settings_), this->settings_); } // set the size appropriately this->context_->set (this->size_, knowledge::KnowledgeRecord::Integer (other_size), this->settings_); other.context_->set (other.size_, knowledge::KnowledgeRecord::Integer (this_size), other.settings_); if (refresh_keys) { this->resize (-1, true); other.resize (-1, true); } } }