From df8fd36fdeaa9f52642cb325ca72c33aa5f01926 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Sat, 13 Jul 2019 15:17:23 -0700 Subject: [PATCH] ircd::m::user: Simplify user::room_tags impl w/ modern linkage. ircd::m::user: Simplify user::room_account_data impl w/ modern linkage. ircd::m::user: Modernize user::profile impl linkage. ircd::m::user: Modernize user::account_data impl linkage. ircd::m::user: Simplify user::ignores impl w/ modern linkage. --- include/ircd/m/user/account_data.h | 4 - include/ircd/m/user/ignores.h | 2 - include/ircd/m/user/profile.h | 3 - include/ircd/m/user/room_account_data.h | 3 - include/ircd/m/user/room_tags.h | 4 - ircd/m.cc | 507 ------------------------ modules/client/profile.cc | 43 +- modules/client/user/account_data.cc | 40 +- modules/client/user/rooms.cc | 95 ++++- modules/m_ignored_user_list.cc | 11 +- 10 files changed, 153 insertions(+), 559 deletions(-) diff --git a/include/ircd/m/user/account_data.h b/include/ircd/m/user/account_data.h index 8ea980569..9d1db34a3 100644 --- a/include/ircd/m/user/account_data.h +++ b/include/ircd/m/user/account_data.h @@ -18,10 +18,6 @@ struct ircd::m::user::account_data m::user user; - static bool for_each(const m::user &, const closure_bool &); - static bool get(std::nothrow_t, const m::user &, const string_view &type, const closure &); - static event::id::buf set(const m::user &, const string_view &type, const json::object &value); - public: bool for_each(const closure_bool &) const; bool get(std::nothrow_t, const string_view &type, const closure &) const; diff --git a/include/ircd/m/user/ignores.h b/include/ircd/m/user/ignores.h index 1e85907bc..4462caa35 100644 --- a/include/ircd/m/user/ignores.h +++ b/include/ircd/m/user/ignores.h @@ -19,8 +19,6 @@ struct ircd::m::user::ignores m::user user; static bool enforce(const string_view &type); - static bool for_each(const m::user &, const closure_bool &); - static bool has(const m::user &, const m::user::id &other); public: bool for_each(const closure_bool &) const; diff --git a/include/ircd/m/user/profile.h b/include/ircd/m/user/profile.h index 081a55051..0ecd4981e 100644 --- a/include/ircd/m/user/profile.h +++ b/include/ircd/m/user/profile.h @@ -20,9 +20,6 @@ struct ircd::m::user::profile m::user user; static void fetch(const m::user &, const net::hostport &, const string_view &key = {}); - static bool for_each(const m::user &, const closure_bool &); - static bool get(std::nothrow_t, const m::user &, const string_view &key, const closure &); - static event::id::buf set(const m::user &, const string_view &key, const string_view &value); public: bool for_each(const closure_bool &) const; diff --git a/include/ircd/m/user/room_account_data.h b/include/ircd/m/user/room_account_data.h index 6a485662e..840f9ad62 100644 --- a/include/ircd/m/user/room_account_data.h +++ b/include/ircd/m/user/room_account_data.h @@ -30,9 +30,6 @@ struct ircd::m::user::room_account_data m::room room; static string_view _type(const mutable_buffer &out, const m::room::id &); - static bool for_each(const m::user &, const m::room &, const closure_bool &); - static bool get(std::nothrow_t, const m::user &, const m::room &, const string_view &type, const closure &); - static event::id::buf set(const m::user &, const m::room &, const string_view &type, const json::object &value); public: bool for_each(const closure_bool &) const; diff --git a/include/ircd/m/user/room_tags.h b/include/ircd/m/user/room_tags.h index 227ac94e8..bd7d77fd8 100644 --- a/include/ircd/m/user/room_tags.h +++ b/include/ircd/m/user/room_tags.h @@ -30,10 +30,6 @@ struct ircd::m::user::room_tags m::room room; static string_view _type(const mutable_buffer &out, const m::room::id &); - static bool for_each(const m::user &, const m::room &, const closure_bool &); - static bool get(std::nothrow_t, const m::user &, const m::room &, const string_view &type, const closure &); - static event::id::buf set(const m::user &, const m::room &, const string_view &type, const json::object &value); - static bool del(const m::user &, const m::room &, const string_view &type); public: bool for_each(const closure_bool &) const; diff --git a/ircd/m.cc b/ircd/m.cc index c64346383..d93e37797 100644 --- a/ircd/m.cc +++ b/ircd/m.cc @@ -3467,14 +3467,6 @@ const // user::profile // -ircd::m::event::id::buf -ircd::m::user::profile::set(const string_view &key, - const string_view &val) -const -{ - return set(user, key, val); -} - ircd::string_view ircd::m::user::profile::get(const mutable_buffer &out, const string_view &key) @@ -3504,446 +3496,6 @@ const }; } -bool -ircd::m::user::profile::get(std::nothrow_t, - const string_view &key, - const closure &closure) -const -{ - return get(std::nothrow, user, key, closure); -} - -bool -ircd::m::user::profile::for_each(const closure_bool &closure) -const -{ - return for_each(user, closure); -} - -ircd::m::event::id::buf -ircd::m::user::profile::set(const m::user &u, - const string_view &k, - const string_view &v) -{ - using prototype = event::id::buf (const m::user &, const string_view &, const string_view &); - - static mods::import function - { - "client_profile", "ircd::m::user::profile::set" - }; - - return function(u, k, v); -} - -bool -ircd::m::user::profile::get(std::nothrow_t, - const m::user &u, - const string_view &k, - const closure &c) -{ - using prototype = bool (std::nothrow_t, const m::user &, const string_view &, const closure &); - - static mods::import function - { - "client_profile", "ircd::m::user::profile::get" - }; - - return function(std::nothrow, u, k, c); -} - -bool -ircd::m::user::profile::for_each(const m::user &u, - const closure_bool &c) -{ - using prototype = bool (const m::user &, const closure_bool &); - - static mods::import function - { - "client_profile", "ircd::m::user::profile::for_each" - }; - - return function(u, c); -} - -void -ircd::m::user::profile::fetch(const m::user &u, - const net::hostport &remote, - const string_view &key) -{ - using prototype = void (const m::user &, const net::hostport &, const string_view &); - - static mods::import function - { - "client_profile", "ircd::m::user::profile::fetch" - }; - - return function(u, remote, key); -} - -// -// user::account_data -// - -ircd::m::event::id::buf -ircd::m::user::account_data::set(const string_view &type, - const json::object &val) -const -{ - return set(user, type, val); -} - -ircd::json::object -ircd::m::user::account_data::get(const mutable_buffer &out, - const string_view &type) -const -{ - json::object ret; - get(std::nothrow, type, [&out, &ret] - (const string_view &type, const json::object &val) - { - ret = string_view { data(out), copy(out, val) }; - }); - - return ret; -} - -void -ircd::m::user::account_data::get(const string_view &type, - const closure &closure) -const -{ - if(!get(std::nothrow, user, type, closure)) - throw m::NOT_FOUND - { - "account data type '%s' for user %s not found", - type, - string_view{user.user_id} - }; -} - -bool -ircd::m::user::account_data::get(std::nothrow_t, - const string_view &type, - const closure &closure) -const -{ - return get(std::nothrow, user, type, closure); -} - -bool -ircd::m::user::account_data::for_each(const closure_bool &closure) -const -{ - return for_each(user, closure); -} - -ircd::m::event::id::buf -ircd::m::user::account_data::set(const m::user &u, - const string_view &t, - const json::object &v) -{ - using prototype = event::id::buf (const m::user &, const string_view &, const json::object &); - - static mods::import function - { - "client_user", "ircd::m::user::account_data::set" - }; - - return function(u, t, v); -} - -bool -ircd::m::user::account_data::get(std::nothrow_t, - const m::user &u, - const string_view &t, - const closure &c) -{ - using prototype = bool (std::nothrow_t, const m::user &, const string_view &, const closure &); - - static mods::import function - { - "client_user", "ircd::m::user::account_data::get" - }; - - return function(std::nothrow, u, t, c); -} - -bool -ircd::m::user::account_data::for_each(const m::user &u, - const closure_bool &c) -{ - using prototype = bool (const m::user &, const closure_bool &); - - static mods::import function - { - "client_user", "ircd::m::user::account_data::for_each" - }; - - return function(u, c); -} - -// -// user::room_account_data -// - -ircd::m::event::id::buf -ircd::m::user::room_account_data::set(const string_view &type, - const json::object &val) -const -{ - return set(user, room, type, val); -} - -ircd::json::object -ircd::m::user::room_account_data::get(const mutable_buffer &out, - const string_view &type) -const -{ - json::object ret; - get(std::nothrow, type, [&out, &ret] - (const string_view &type, const json::object &val) - { - ret = string_view { data(out), copy(out, val) }; - }); - - return ret; -} - -void -ircd::m::user::room_account_data::get(const string_view &type, - const closure &closure) -const -{ - if(!get(std::nothrow, user, room, type, closure)) - throw m::NOT_FOUND - { - "account data type '%s' for user %s in room %s not found", - type, - string_view{user.user_id}, - string_view{room.room_id} - }; -} - -bool -ircd::m::user::room_account_data::get(std::nothrow_t, - const string_view &type, - const closure &closure) -const -{ - return get(std::nothrow, user, room, type, closure); -} - -bool -ircd::m::user::room_account_data::for_each(const closure_bool &closure) -const -{ - return for_each(user, room, closure); -} - -ircd::m::event::id::buf -ircd::m::user::room_account_data::set(const m::user &u, - const m::room &r, - const string_view &t, - const json::object &v) -{ - using prototype = event::id::buf (const m::user &, const m::room &, const string_view &, const json::object &); - - static mods::import function - { - "client_user", "ircd::m::user::room_account_data::set" - }; - - return function(u, r, t, v); -} - -bool -ircd::m::user::room_account_data::get(std::nothrow_t, - const m::user &u, - const m::room &r, - const string_view &t, - const closure &c) -{ - using prototype = bool (std::nothrow_t, const m::user &, const m::room &, const string_view &, const closure &); - - static mods::import function - { - "client_user", "ircd::m::user::room_account_data::get" - }; - - return function(std::nothrow, u, r, t, c); -} - -bool -ircd::m::user::room_account_data::for_each(const m::user &u, - const m::room &r, - const closure_bool &c) -{ - using prototype = bool (const m::user &, const m::room &, const closure_bool &); - - static mods::import function - { - "client_user", "ircd::m::user::room_account_data::for_each" - }; - - return function(u, r, c); -} - -ircd::string_view -ircd::m::user::room_account_data::_type(const mutable_buffer &out, - const m::room::id &room_id) -{ - using prototype = string_view (const mutable_buffer &, const m::room::id &); - - static mods::import function - { - "client_user", "ircd::m::user::room_account_data::_type" - }; - - return function(out, room_id); -} - -// -// user::room_tags -// - -bool -ircd::m::user::room_tags::del(const string_view &type) -const -{ - return del(user, room, type); -} - -ircd::m::event::id::buf -ircd::m::user::room_tags::set(const string_view &type, - const json::object &val) -const -{ - return set(user, room, type, val); -} - -ircd::json::object -ircd::m::user::room_tags::get(const mutable_buffer &out, - const string_view &type) -const -{ - json::object ret; - get(std::nothrow, type, [&out, &ret] - (const string_view &type, const json::object &val) - { - ret = string_view { data(out), copy(out, val) }; - }); - - return ret; -} - -void -ircd::m::user::room_tags::get(const string_view &type, - const closure &closure) -const -{ - if(!get(std::nothrow, user, room, type, closure)) - throw m::NOT_FOUND - { - "account data type '%s' for user %s in room %s not found", - type, - string_view{user.user_id}, - string_view{room.room_id} - }; -} - -bool -ircd::m::user::room_tags::get(std::nothrow_t, - const string_view &type, - const closure &closure) -const -{ - return get(std::nothrow, user, room, type, closure); -} - -bool -ircd::m::user::room_tags::for_each(const closure_bool &closure) -const -{ - return for_each(user, room, closure); -} - -bool -ircd::m::user::room_tags::del(const m::user &u, - const m::room &r, - const string_view &t) -{ - using prototype = bool (const m::user &, const m::room &, const string_view &); - - static mods::import function - { - "client_user", "ircd::m::user::room_tags::del" - }; - - return function(u, r, t); -} - -ircd::m::event::id::buf -ircd::m::user::room_tags::set(const m::user &u, - const m::room &r, - const string_view &t, - const json::object &v) -{ - using prototype = event::id::buf (const m::user &, const m::room &, const string_view &, const json::object &); - - static mods::import function - { - "client_user", "ircd::m::user::room_tags::set" - }; - - return function(u, r, t, v); -} - -bool -ircd::m::user::room_tags::get(std::nothrow_t, - const m::user &u, - const m::room &r, - const string_view &t, - const closure &c) -{ - using prototype = bool (std::nothrow_t, const m::user &, const m::room &, const string_view &, const closure &); - - static mods::import function - { - "client_user", "ircd::m::user::room_tags::get" - }; - - return function(std::nothrow, u, r, t, c); -} - -bool -ircd::m::user::room_tags::for_each(const m::user &u, - const m::room &r, - const closure_bool &c) -{ - using prototype = bool (const m::user &, const m::room &, const closure_bool &); - - static mods::import function - { - "client_user", "ircd::m::user::room_tags::for_each" - }; - - return function(u, r, c); -} - -ircd::string_view -ircd::m::user::room_tags::_type(const mutable_buffer &out, - const m::room::id &room_id) -{ - using prototype = string_view (const mutable_buffer &, const m::room::id &); - - static mods::import function - { - "client_user", "ircd::m::user::room_tags::_type" - }; - - return function(out, room_id); -} - // // user::filter // @@ -4060,65 +3612,6 @@ ircd::m::user::filter::for_each(const m::user &u, return function(u, c); } -// -// user::ignores -// - -bool -ircd::m::user::ignores::has(const m::user::id &other) -const -{ - return has(user, other); -} - -bool -ircd::m::user::ignores::for_each(const closure_bool &closure) -const -{ - return for_each(user, closure); -} - -bool -ircd::m::user::ignores::has(const m::user &u, - const m::user::id &other) -{ - using prototype = bool (const m::user &, const m::user::id &); - - static mods::import call - { - "m_ignored_user_list", "ircd::m::user::ignores::has" - }; - - return call(u, other); -} - -bool -ircd::m::user::ignores::for_each(const m::user &u, - const closure_bool &c) -{ - using prototype = bool (const m::user &, const closure_bool &); - - static mods::import call - { - "m_ignored_user_list", "ircd::m::user::ignores::for_each" - }; - - return call(u, c); -} - -bool -ircd::m::user::ignores::enforce(const string_view &type) -{ - using prototype = bool (const string_view &); - - static mods::import call - { - "m_ignored_user_list", "ircd::m::user::ignores::enforce" - }; - - return call(type); -} - /////////////////////////////////////////////////////////////////////////////// // // m/txn.h diff --git a/modules/client/profile.cc b/modules/client/profile.cc index f78e96aba..1fdc0d7bf 100644 --- a/modules/client/profile.cc +++ b/modules/client/profile.cc @@ -332,9 +332,9 @@ catch(const server::error &e) m::event::id::buf IRCD_MODULE_EXPORT -ircd::m::user::profile::set(const m::user &user, - const string_view &key, +ircd::m::user::profile::set(const string_view &key, const string_view &val) +const { const m::user::room user_room { @@ -347,12 +347,43 @@ ircd::m::user::profile::set(const m::user &user, }); } +ircd::string_view +IRCD_MODULE_EXPORT +ircd::m::user::profile::get(const mutable_buffer &out, + const string_view &key) +const +{ + string_view ret; + get(std::nothrow, key, [&out, &ret] + (const string_view &key, const string_view &val) + { + ret = { data(out), copy(out, val) }; + }); + + return ret; +} + +void +IRCD_MODULE_EXPORT +ircd::m::user::profile::get(const string_view &key, + const closure &closure) +const +{ + if(!get(std::nothrow, key, closure)) + throw m::NOT_FOUND + { + "Property %s in profile for %s not found", + key, + string_view{user.user_id} + }; +} + bool IRCD_MODULE_EXPORT ircd::m::user::profile::get(std::nothrow_t, - const m::user &user, const string_view &key, const closure &closure) +const { const user::room user_room{user}; const room::state state{user_room}; @@ -375,8 +406,8 @@ ircd::m::user::profile::get(std::nothrow_t, bool IRCD_MODULE_EXPORT -ircd::m::user::profile::for_each(const m::user &user, - const closure_bool &closure) +ircd::m::user::profile::for_each(const closure_bool &closure) +const { const user::room user_room{user}; const room::state state{user_room}; @@ -439,7 +470,7 @@ ircd::m::user::profile::fetch(const m::user &user, }); if(!exists) - profile.set(user, member.first, member.second); + profile.set(member.first, member.second); } } diff --git a/modules/client/user/account_data.cc b/modules/client/user/account_data.cc index 3cd2b3821..6a3254ed9 100644 --- a/modules/client/user/account_data.cc +++ b/modules/client/user/account_data.cc @@ -76,9 +76,9 @@ get__account_data(client &client, ircd::m::event::id::buf IRCD_MODULE_EXPORT -ircd::m::user::account_data::set(const m::user &user, - const string_view &type, +ircd::m::user::account_data::set(const string_view &type, const json::object &value) +const { const m::user::room user_room { @@ -88,12 +88,42 @@ ircd::m::user::account_data::set(const m::user &user, return send(user_room, user, "ircd.account_data", type, value); } +ircd::json::object +IRCD_MODULE_EXPORT +ircd::m::user::account_data::get(const mutable_buffer &out, + const string_view &type) +const +{ + json::object ret; + get(std::nothrow, type, [&out, &ret] + (const string_view &type, const json::object &val) + { + ret = string_view { data(out), copy(out, val) }; + }); + + return ret; +} + +void +ircd::m::user::account_data::get(const string_view &type, + const closure &closure) +const +{ + if(!get(std::nothrow, type, closure)) + throw m::NOT_FOUND + { + "account data type '%s' for user %s not found", + type, + string_view{user.user_id} + }; +} + bool IRCD_MODULE_EXPORT ircd::m::user::account_data::get(std::nothrow_t, - const m::user &user, const string_view &type, const closure &closure) +const { const user::room user_room{user}; const room::state state{user_room}; @@ -111,8 +141,8 @@ ircd::m::user::account_data::get(std::nothrow_t, bool IRCD_MODULE_EXPORT -ircd::m::user::account_data::for_each(const m::user &user, - const closure_bool &closure) +ircd::m::user::account_data::for_each(const closure_bool &closure) +const { static const event::fetch::opts fopts { diff --git a/modules/client/user/rooms.cc b/modules/client/user/rooms.cc index d29405028..cd7a3e279 100644 --- a/modules/client/user/rooms.cc +++ b/modules/client/user/rooms.cc @@ -270,9 +270,8 @@ delete__tags(client &client, bool IRCD_MODULE_EXPORT -ircd::m::user::room_tags::del(const m::user &user, - const m::room &room, - const string_view &user_type) +ircd::m::user::room_tags::del(const string_view &user_type) +const { char typebuf[typebuf_size]; const string_view type @@ -304,10 +303,9 @@ ircd::m::user::room_tags::del(const m::user &user, m::event::id::buf IRCD_MODULE_EXPORT -ircd::m::user::room_tags::set(const m::user &user, - const m::room &room, - const string_view &user_type, +ircd::m::user::room_tags::set(const string_view &user_type, const json::object &value) +const { char typebuf[typebuf_size]; const string_view type @@ -323,13 +321,44 @@ ircd::m::user::room_tags::set(const m::user &user, return send(user_room, user, type, user_type, value); } +ircd::json::object +IRCD_MODULE_EXPORT +ircd::m::user::room_tags::get(const mutable_buffer &out, + const string_view &type) +const +{ + json::object ret; + get(std::nothrow, type, [&out, &ret] + (const string_view &type, const json::object &val) + { + ret = string_view { data(out), copy(out, val) }; + }); + + return ret; +} + +void +IRCD_MODULE_EXPORT +ircd::m::user::room_tags::get(const string_view &type, + const closure &closure) +const +{ + if(!get(std::nothrow, type, closure)) + throw m::NOT_FOUND + { + "account data type '%s' for user %s in room %s not found", + type, + string_view{user.user_id}, + string_view{room.room_id} + }; +} + bool IRCD_MODULE_EXPORT ircd::m::user::room_tags::get(std::nothrow_t, - const m::user &user, - const m::room &room, const string_view &user_type, const closure &closure) +const { char typebuf[typebuf_size]; const string_view type @@ -356,9 +385,8 @@ ircd::m::user::room_tags::get(std::nothrow_t, bool IRCD_MODULE_EXPORT -ircd::m::user::room_tags::for_each(const m::user &user, - const m::room &room, - const closure_bool &closure) +ircd::m::user::room_tags::for_each(const closure_bool &closure) +const { char typebuf[typebuf_size]; const string_view type @@ -474,10 +502,9 @@ get__account_data(client &client, m::event::id::buf IRCD_MODULE_EXPORT -ircd::m::user::room_account_data::set(const m::user &user, - const m::room &room, - const string_view &user_type, +ircd::m::user::room_account_data::set(const string_view &user_type, const json::object &value) +const { char typebuf[typebuf_size]; const string_view type @@ -493,13 +520,44 @@ ircd::m::user::room_account_data::set(const m::user &user, return send(user_room, user, type, user_type, value); } +ircd::json::object +IRCD_MODULE_EXPORT +ircd::m::user::room_account_data::get(const mutable_buffer &out, + const string_view &type) +const +{ + json::object ret; + get(std::nothrow, type, [&out, &ret] + (const string_view &type, const json::object &val) + { + ret = string_view { data(out), copy(out, val) }; + }); + + return ret; +} + +void +IRCD_MODULE_EXPORT +ircd::m::user::room_account_data::get(const string_view &type, + const closure &closure) +const +{ + if(!get(std::nothrow, type, closure)) + throw m::NOT_FOUND + { + "account data type '%s' for user %s in room %s not found", + type, + string_view{user.user_id}, + string_view{room.room_id} + }; +} + bool IRCD_MODULE_EXPORT ircd::m::user::room_account_data::get(std::nothrow_t, - const m::user &user, - const m::room &room, const string_view &user_type, const closure &closure) +const { char typebuf[typebuf_size]; const string_view type @@ -523,9 +581,8 @@ ircd::m::user::room_account_data::get(std::nothrow_t, bool IRCD_MODULE_EXPORT -ircd::m::user::room_account_data::for_each(const m::user &user, - const m::room &room, - const closure_bool &closure) +ircd::m::user::room_account_data::for_each(const closure_bool &closure) +const { char typebuf[typebuf_size]; const string_view type diff --git a/modules/m_ignored_user_list.cc b/modules/m_ignored_user_list.cc index c879bd28c..1e145c78a 100644 --- a/modules/m_ignored_user_list.cc +++ b/modules/m_ignored_user_list.cc @@ -99,10 +99,10 @@ handle_m_ignored_user(const m::event &event, bool IRCD_MODULE_EXPORT -ircd::m::user::ignores::has(const m::user &user, - const m::user::id &other) +ircd::m::user::ignores::has(const m::user::id &other) +const { - return !for_each(user, [&other] + return !for_each([&other] (const m::user::id &user_id, const json::object &) { return user_id != other; @@ -111,9 +111,8 @@ ircd::m::user::ignores::has(const m::user &user, bool IRCD_MODULE_EXPORT -ircd::m::user::ignores::for_each(const m::user &user, - const closure_bool &closure) -try +ircd::m::user::ignores::for_each(const closure_bool &closure) +const try { const m::user::account_data account_data {