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(), ""); }
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 }