Files
comaps/search/base/inverted_list.hpp
Konstantin Pastbin e3e4a1985a Organic Maps sources as of 02.04.2025 (fad26bbf22ac3da75e01e62aa01e5c8e11861005)
To expand with full Organic Maps and Maps.ME commits history run:
  git remote add om-historic [om-historic.git repo url]
  git fetch --tags om-historic
  git replace squashed-history historic-commits
2025-05-08 21:10:51 +07:00

57 lines
1.1 KiB
C++

#pragma once
#include "base/assert.hpp"
#include <algorithm>
#include <cstddef>
#include <vector>
namespace search_base
{
// This class is supposed to be used in inverted index to store list
// of document ids.
template <typename Id>
class InvertedList
{
public:
using value_type = Id;
using Value = Id;
bool Add(Id const & id)
{
auto it = std::lower_bound(m_ids.begin(), m_ids.end(), id);
if (it != m_ids.end() && *it == id)
return false;
m_ids.insert(it, id);
return true;
}
bool Erase(Id const & id)
{
auto it = std::lower_bound(m_ids.begin(), m_ids.end(), id);
if (it == m_ids.end() || *it != id)
return false;
m_ids.erase(it);
return true;
}
template <typename ToDo>
void ForEach(ToDo && toDo) const
{
for (auto const & id : m_ids)
toDo(id);
}
size_t Size() const { return m_ids.size(); }
bool Empty() const { return Size() == 0; }
void Clear() { m_ids.clear(); }
void Swap(InvertedList & rhs) { m_ids.swap(rhs.m_ids); }
private:
std::vector<Id> m_ids;
};
} // namespace search_base