Exemplo n.º 1
0
void PointerCalculator::remove(const pos_list_t& pl) {
  std::unordered_set<pos_t> tmp(pl.begin(), pl.end());
  const auto& end = tmp.cend();
  auto res = std::remove_if(std::begin(*pos_list), std::end(*pos_list),[&tmp, &end](const pos_t& p){
    return tmp.count(p) != 0u;
  });
  (*pos_list).erase(res, pos_list->end());
}
Exemplo n.º 2
0
// This method iterates of the pos list and validates each position
void Store::validatePositions(pos_list_t& pos, tx::transaction_cid_t last_commit_id, tx::transaction_id_t tid) const {
  // Make sure we captured all rows
  assert(_cidBeginVector.size() == size() && _cidEndVector.size() == size() && _tidVector.size() == size());

  // Pos is nullptr, we should circumvent
  auto end = std::remove_if(std::begin(pos), std::end(pos), [&](const pos_t& v){

    return !isVisibleForTransaction(v, last_commit_id, tid);

  } );
  if (end != pos.end())
    pos.erase(end, pos.end());
}
Exemplo n.º 3
0
inline
std::vector<uint8_t> vb_encode(pos_list_t &numbers)
{
  std::vector<uint8_t> bytestream;
  //std::vector<uint32_t>::iterator itr = numbers.begin();
  pos_list_t::iterator itr = numbers.begin();
  //std::vector<uint32_t>::iterator itr_end = numbers.end();
  pos_list_t::iterator itr_end = numbers.end();
  int prev_doc_id = 0;
  int doc_id_gap;
  int num_postings = 0;

  int i = 0;
  for (; itr != itr_end; ++itr) {
    if (num_postings == 0) {
      ++i;
      doc_id_gap = *itr - prev_doc_id;
      prev_doc_id = *itr;
      vb_encode_num(doc_id_gap, bytestream);
      num_postings = *(++itr);
      vb_encode_num(num_postings, bytestream);
    } else {
      int prev_pos = 0;
      while (itr != itr_end) {
        vb_encode_num(*itr-prev_pos, bytestream);
        prev_pos = *itr;
        if (--num_postings > 0) {
          ++itr;
        } else {
          break;
        }
      }
    }
  }
  return bytestream;
}