diff --git a/include/ircd/m/room.h b/include/ircd/m/room.h index 0c7748876..3165cbdca 100644 --- a/include/ircd/m/room.h +++ b/include/ircd/m/room.h @@ -251,6 +251,7 @@ struct ircd::m::room::origins m::room room; + bool _test_(const closure_bool &view) const; bool test(const closure_bool &view) const; void for_each(const closure &view) const; size_t count() const; diff --git a/ircd/m/room.cc b/ircd/m/room.cc index 1230d33b6..7b514927e 100644 --- a/ircd/m/room.cc +++ b/ircd/m/room.cc @@ -670,6 +670,31 @@ const bool ircd::m::room::origins::test(const closure_bool &view) const +{ + string_view last; + char lastbuf[256]; + return _test_([&last, &lastbuf, &view] + (const string_view &key) + { + const string_view &origin //TODO: XXX + { + split(key, "@").first + }; + + if(origin == last) + return false; + + if(view(origin)) + return true; + + last = { lastbuf, copy(lastbuf, origin) }; + return false; + }); +} + +bool +ircd::m::room::origins::_test_(const closure_bool &view) +const { db::index &index { @@ -681,28 +706,15 @@ const index.begin(room.room_id) }; - string_view last; - char lastbuf[256]; for(; bool(it); ++it) { - const string_view &key{it->first}; - const string_view &origin_member //TODO: XXX + const string_view &key //TODO: XXX { - split(key, ":::").second + lstrip(it->first, ":::") }; - const string_view &origin //TODO: XXX - { - split(origin_member, "@").first - }; - - if(origin == last) - continue; - - if(view(origin)) + if(view(key)) return true; - - last = { lastbuf, copy(lastbuf, origin) }; } return false;