mirror of
https://github.com/matrix-construct/construct
synced 2024-11-25 08:12:37 +01:00
ircd:Ⓜ️:room::head::fetch: Add opts for result limitations.
This commit is contained in:
parent
d322a0c52c
commit
e2f495c4a8
2 changed files with 14 additions and 1 deletions
|
@ -65,6 +65,12 @@ struct ircd::m::room::head::fetch::opts
|
||||||
m::id::event{}, 0L, 0UL
|
m::id::event{}, 0L, 0UL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// Limits total results
|
||||||
|
size_t max_results {-1UL};
|
||||||
|
|
||||||
|
/// Limits results per server (spec sez 20)
|
||||||
|
size_t max_results_per_server {32};
|
||||||
|
|
||||||
/// When true, results are stored in the head set and duplicate results
|
/// When true, results are stored in the head set and duplicate results
|
||||||
/// are not provided to the closure. When false, the head set is not used.
|
/// are not provided to the closure. When false, the head set is not used.
|
||||||
bool unique {true};
|
bool unique {true};
|
||||||
|
|
|
@ -210,9 +210,16 @@ ircd::m::room::head::fetch::fetch(const opts &opts,
|
||||||
json::get<"depth"_>(result) = depth;
|
json::get<"depth"_>(result) = depth;
|
||||||
}
|
}
|
||||||
|
|
||||||
return m::for_each(prev, [this, &opts, &closure, &result]
|
size_t i(0);
|
||||||
|
return m::for_each(prev, [this, &opts, &closure, &result, &i]
|
||||||
(const event::id &event_id)
|
(const event::id &event_id)
|
||||||
{
|
{
|
||||||
|
if(unlikely(i++ > opts.max_results_per_server))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if(unlikely(this->head.size() >= opts.max_results))
|
||||||
|
return false;
|
||||||
|
|
||||||
auto it
|
auto it
|
||||||
{
|
{
|
||||||
this->head.lower_bound(event_id)
|
this->head.lower_bound(event_id)
|
||||||
|
|
Loading…
Reference in a new issue