From 43b8ea9de71f8e8dba5ed2e2fb4fc06776ffba4e Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Thu, 28 Feb 2019 14:07:04 -0800 Subject: [PATCH] ircd::m::room::origins: Improve origins::random import definition. --- include/ircd/m/room/origins.h | 1 + ircd/m_room.cc | 18 ++++++++++++------ modules/m_room.cc | 16 ++++++---------- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/include/ircd/m/room/origins.h b/include/ircd/m/room/origins.h index 26e8f9f02..5b9eb72f4 100644 --- a/include/ircd/m/room/origins.h +++ b/include/ircd/m/room/origins.h @@ -33,6 +33,7 @@ struct ircd::m::room::origins size_t count() const; // select an origin in the room at random; use proffer to refuse and try another. + static bool random(const origins &, const closure &, const closure_bool &); string_view random(const mutable_buffer &buf, const closure_bool &proffer = nullptr) const; bool random(const closure &, const closure_bool &proffer = nullptr) const; diff --git a/ircd/m_room.cc b/ircd/m_room.cc index badbe726d..0b04fba4c 100644 --- a/ircd/m_room.cc +++ b/ircd/m_room.cc @@ -1861,16 +1861,22 @@ ircd::m::room::origins::random(const closure &view, const closure_bool &proffer) const { - using prototype = bool (const m::room &, - const m::room::origins::closure &, - const m::room::origins::closure_bool &); + return random(*this, view, proffer); +} - static mods::import random_origin +bool +ircd::m::room::origins::random(const origins &o, + const closure &view, + const closure_bool &proffer) +{ + using prototype = bool (const origins &, const closure &, const closure_bool &); + + static mods::import call { - "m_room", "random_origin" + "m_room", "ircd::m::room::origins::random" }; - return random_origin(room, view, proffer); + return call(o, view, proffer); } size_t diff --git a/modules/m_room.cc b/modules/m_room.cc index 3b862648e..40f961ee1 100644 --- a/modules/m_room.cc +++ b/modules/m_room.cc @@ -88,17 +88,13 @@ ircd::m::count_since(const m::room &room, return ret; } -extern "C" bool -random_origin(const m::room &room, - const m::room::origins::closure &view, - const m::room::origins::closure_bool &proffer = nullptr) +bool +IRCD_MODULE_EXPORT +ircd::m::room::origins::random(const origins &origins, + const closure &view, + const closure_bool &proffer) { bool ret{false}; - const m::room::origins origins - { - room - }; - const size_t max { origins.count() @@ -112,7 +108,7 @@ random_origin(const m::room &room, ssize_t(rand::integer(0, max - 1)) }; - const m::room::origins::closure_bool closure{[&proffer, &view, &select] + const closure_bool closure{[&proffer, &view, &select] (const string_view &origin) { if(select-- > 0)