From 3d982a304202a59e69c31732b3c181094d7901b6 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Thu, 4 Jul 2019 01:53:30 -0700 Subject: [PATCH] ircd::m::room: Optimize the state::count(type) to elide value query. --- ircd/m_room.cc | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/ircd/m_room.cc b/ircd/m_room.cc index b6a41aa5b..650c816d0 100644 --- a/ircd/m_room.cc +++ b/ircd/m_room.cc @@ -2149,12 +2149,21 @@ size_t ircd::m::room::state::count(const string_view &type) const { - size_t ret{0}; - for_each(type, event::closure_idx{[&ret] - (const event::idx &event_idx) + if(!present()) + return count(type); + + const db::gopts &opts { - ++ret; - }}); + this->fopts? this->fopts->gopts : db::gopts{} + }; + + size_t ret(0); + auto &column{dbs::room_state}; + for(auto it{column.begin(room_id, opts)}; bool(it); ++it) + { + const auto key(dbs::room_state_key(it->first)); + ret += std::get<0>(key) == type; + } return ret; }