Example #1
0
  void delete_row_(uint64_t index) {
    JUBATUS_ASSERT_LT(index, size(), "");

    for (std::vector<detail::abstract_column>::iterator jt = columns_.begin();
         jt != columns_.end();
         ++jt) {
      jt->remove(index);
    }
    {  // needs swap on last index
      index_table::iterator move_it = index_.find(keys_[tuples_ - 1]);
      move_it->second = index;
      index_.erase(keys_[index]);
    }

    if (index + 1 != keys_.size()) {
      std::swap(keys_[index], keys_.back());
    }
    keys_.pop_back();

    if (index + 1 != versions_.size()) {
      std::swap(versions_[index], versions_.back());
    }
    versions_.pop_back();

    --tuples_;
    ++clock_;

    JUBATUS_ASSERT_EQ(tuples_, index_.size(), "");
    JUBATUS_ASSERT_EQ(tuples_, keys_.size(), "");
    JUBATUS_ASSERT_EQ(tuples_, versions_.size(), "");
  }
Example #2
0
  input_window make_new_window_(double pos, const input_window& prev) const {
    double prev_start_pos = prev.get_start_pos();
    int i = static_cast<int>(
              std::floor((pos - prev_start_pos) / batch_interval_));
    int j = i - window_batch_size_/2;
    double new_start_pos = prev_start_pos + batch_interval_ * j;

    input_window new_window(
        new_start_pos, batch_interval_, window_batch_size_);

    // fill new_window's d&r vector
    std::pair<int, int> intersection = get_intersection(prev, new_window);
    for (int i = 0, j = intersection.first;
         j < intersection.second;
         ++i, ++j) {
      JUBATUS_ASSERT_LT(i, window_batch_size_, "");
      new_window.get_batch_by_index(i) = prev.get_batch_by_index(j);
    }

    return new_window;  // NRVO
  }