pisa
pisa copied to clipboard
Cursor concept discussion
template <typename T>
concept bool CursorLike = requires(T cursor, DocId docid, Position pos)
{
{ cursor.reset() } -> void;
{ cursor.next() } -> void;
{ cursor.next_geq(docid) } -> void;
{ cursor.move(pos) } -> void;
{ cursor.docid() } -> DocId;
{ cursor.position() } -> Position;
{ cursor.size() } -> std::size_t;
};
template <typename T>
concept bool FreqCursorLike = CursorLike<T> && requires(T cursor)
{
{ cursor.freq() } -> Frequency;
};
template <typename T>
concept bool ScoredCursorLike = CursorLike<T> && requires(T cursor)
{
{ cursor.score() } -> Score;
};
template <typename T>
concept bool BlockCursorLike = CursorLike<T> && requires(T cursor)
{
{ cursor.num_blocks() } -> Score;
{ cursor.block() } -> std::size_t;
};