diff --git a/include/ircd/m/room/content.h b/include/ircd/m/room/iterate.h similarity index 61% rename from include/ircd/m/room/content.h rename to include/ircd/m/room/iterate.h index 61abe0f38..599ce8b16 100644 --- a/include/ircd/m/room/content.h +++ b/include/ircd/m/room/iterate.h @@ -1,7 +1,7 @@ // The Construct // // Copyright (C) The Construct Developers, Authors & Contributors -// Copyright (C) 2016-2020 Jason Volk +// Copyright (C) 2016-2023 Jason Volk // // Permission to use, copy, modify, and/or distribute this software for any // purpose with or without fee is hereby granted, provided that the above @@ -9,22 +9,22 @@ // full license for this software is available in the LICENSE file. #pragma once -#define HAVE_IRCD_M_ROOM_CONTENT_H +#define HAVE_IRCD_M_ROOM_ITERATE_H -/// Interfaced optimized for iterating the `content` of room events. +/// Interfaced optimized for pipelined iterations of room events. /// -struct ircd::m::room::content +struct ircd::m::room::iterate { using entry = pair; using closure = util::function_bool < - const json::object &, const uint64_t &, const event::idx & + const string_view, const uint64_t, const event::idx >; - static const size_t prefetch_max; static conf::item prefetch; m::room room; + string_view column; std::pair range; // highest (inclusive) to lowest (exclusive) size_t queue_max; std::unique_ptr buf; @@ -32,17 +32,20 @@ struct ircd::m::room::content public: bool for_each(const closure &) const; - content(const m::room &, - const decltype(range) & = { -1UL, -1L }); + iterate(const m::room &, + const string_view &column = {}, + const decltype(range) & = { -1UL, -1L }); - content(const content &) = delete; - content(content &&) = delete; + iterate(const iterate &) = delete; + iterate(iterate &&) = delete; }; inline -ircd::m::room::content::content(const m::room &room, +ircd::m::room::iterate::iterate(const m::room &room, + const string_view &column, const decltype(range) &range) :room{room} +,column{column} ,range{range} ,queue_max{prefetch} ,buf diff --git a/include/ircd/m/room/room.h b/include/ircd/m/room/room.h index a9ffa1222..411fc0b72 100644 --- a/include/ircd/m/room/room.h +++ b/include/ircd/m/room/room.h @@ -112,6 +112,7 @@ namespace ircd::m struct ircd::m::room { struct events; + struct iterate; struct missing; struct horizon; struct sounding; @@ -128,7 +129,6 @@ struct ircd::m::room struct message; struct messages; struct bootstrap; - struct content; struct purge; using id = m::id::room; @@ -195,6 +195,7 @@ struct ircd::m::room }; #include "events.h" +#include "iterate.h" #include "sounding.h" #include "missing.h" #include "horizon.h" @@ -205,7 +206,6 @@ struct ircd::m::room #include "members.h" #include "origins.h" #include "type.h" -#include "content.h" #include "head.h" #include "head_generate.h" #include "head_fetch.h" diff --git a/matrix/Makefile.am b/matrix/Makefile.am index 062f78f92..43e998ec2 100644 --- a/matrix/Makefile.am +++ b/matrix/Makefile.am @@ -114,6 +114,7 @@ libircd_matrix_la_SOURCES += room_missing.cc libircd_matrix_la_SOURCES += room_horizon.cc libircd_matrix_la_SOURCES += room_head.cc libircd_matrix_la_SOURCES += room_head_fetch.cc +libircd_matrix_la_SOURCES += room_iterate.cc libircd_matrix_la_SOURCES += room_state_fetch.cc libircd_matrix_la_SOURCES += room_join.cc libircd_matrix_la_SOURCES += room_leave.cc @@ -121,7 +122,6 @@ libircd_matrix_la_SOURCES += room_visible.cc libircd_matrix_la_SOURCES += room_members.cc libircd_matrix_la_SOURCES += room_origins.cc libircd_matrix_la_SOURCES += room_type.cc -libircd_matrix_la_SOURCES += room_content.cc libircd_matrix_la_SOURCES += room_message.cc libircd_matrix_la_SOURCES += room_messages.cc libircd_matrix_la_SOURCES += room_power.cc diff --git a/matrix/room_content.cc b/matrix/room_iterate.cc similarity index 74% rename from matrix/room_content.cc rename to matrix/room_iterate.cc index 2337d3df5..59cca55fe 100644 --- a/matrix/room_content.cc +++ b/matrix/room_iterate.cc @@ -1,22 +1,22 @@ // The Construct // // Copyright (C) The Construct Developers, Authors & Contributors -// Copyright (C) 2016-2020 Jason Volk +// Copyright (C) 2016-2023 Jason Volk // // Permission to use, copy, modify, and/or distribute this software for any // purpose with or without fee is hereby granted, provided that the above // copyright notice and this permission notice is present in all copies. The // full license for this software is available in the LICENSE file. -decltype(ircd::m::room::content::prefetch) -ircd::m::room::content::prefetch +decltype(ircd::m::room::iterate::prefetch) +ircd::m::room::iterate::prefetch { - { "name", "ircd.m.room.content.prefetch" }, + { "name", "ircd.m.room.iterate.prefetch" }, { "default", 512L }, }; bool -ircd::m::room::content::for_each(const closure &closure) +ircd::m::room::iterate::for_each(const closure &closure) const { entry *const __restrict__ queue @@ -30,9 +30,9 @@ const bool ret{true}; const auto call_user { - [&closure, &queue, &pos, &ret](const json::object &content) + [&closure, &queue, &pos, &ret](const string_view &val) { - ret = closure(content, queue[pos].first, queue[pos].second); + ret = closure(val, queue[pos].first, queue[pos].second); } }; @@ -48,20 +48,20 @@ const // Fetch the content for the event at the current queue pos; this will // be a no-op on the first iteration when the entries are all zero. - m::get(std::nothrow, event_idx, "content", call_user); + m::get(std::nothrow, event_idx, column, call_user); // After the user consumed the fetched entry, overwrite it with the // next prefetch and continue the iteration. depth = it.depth(); event_idx = it.event_idx(); - m::prefetch(event_idx, "content"); + m::prefetch(event_idx, column); } // The primary loop completes when there's no more events left to // prefetch, but another loop around the queue needs to be made for // any fetches still in flight. for(size_t j(i); ret && i < j + queue_max; ++i, pos = i % queue_max) - m::get(std::nothrow, queue[pos].second, "content", call_user); + m::get(std::nothrow, queue[pos].second, column, call_user); return ret; } diff --git a/modules/client/search.cc b/modules/client/search.cc index eb3bc7fad..0a09e9012 100644 --- a/modules/client/search.cc +++ b/modules/client/search.cc @@ -396,9 +396,9 @@ ircd::m::search::query_room(result &result, string_view{room_id}, }; - const m::room::content content + const m::room::iterate content { - room + room, "content" }; return content.for_each([&result, &query]