mirror of
https://github.com/matrix-construct/construct
synced 2024-05-19 19:33:45 +02:00
ircd::mapi: Annotate noexcept; non-dynamic alloc; codegen reduction all modules.
This commit is contained in:
parent
0e5b1907d2
commit
f3a1416f65
|
@ -89,6 +89,15 @@ IRCD_MAPI_SERIAL
|
||||||
4
|
4
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct ircd::mapi::metablock
|
||||||
|
{
|
||||||
|
init_func init; // Executed after dlopen()
|
||||||
|
fini_func fini; // Executed before dlclose()
|
||||||
|
meta_data meta; // Various key-value metadata
|
||||||
|
|
||||||
|
metablock(const string_view, init_func &&, fini_func &&) noexcept;
|
||||||
|
};
|
||||||
|
|
||||||
/// Module Header
|
/// Module Header
|
||||||
///
|
///
|
||||||
/// A static instance of this class must be included in an IRCd module with
|
/// A static instance of this class must be included in an IRCd module with
|
||||||
|
@ -113,22 +122,16 @@ struct ircd::mapi::header
|
||||||
operator const mods::mod &() const;
|
operator const mods::mod &() const;
|
||||||
operator mods::mod &();
|
operator mods::mod &();
|
||||||
|
|
||||||
header(const string_view &,
|
header(const string_view,
|
||||||
init_func = {},
|
init_func = {},
|
||||||
fini_func = {});
|
fini_func = {});
|
||||||
|
|
||||||
header(header &&) = delete;
|
header(header &&) = delete;
|
||||||
header(const header &) = delete;
|
header(const header &) = delete;
|
||||||
~header() noexcept;
|
~header() noexcept;
|
||||||
};
|
|
||||||
|
|
||||||
struct ircd::mapi::metablock
|
// Non-throwing allocations
|
||||||
{
|
static uint8_t body[sizeof(metablock)];
|
||||||
init_func init; // Executed after dlopen()
|
|
||||||
fini_func fini; // Executed before dlclose()
|
|
||||||
meta_data meta; // Various key-value metadata
|
|
||||||
|
|
||||||
metablock(const string_view &, init_func &&, fini_func &&);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static_assert
|
static_assert
|
||||||
|
@ -144,14 +147,17 @@ static_assert
|
||||||
"The MAPI header size has changed on this platform."
|
"The MAPI header size has changed on this platform."
|
||||||
);
|
);
|
||||||
|
|
||||||
|
inline decltype(ircd::mapi::header::body)
|
||||||
|
ircd::mapi::header::body;
|
||||||
|
|
||||||
inline
|
inline
|
||||||
__attribute__((always_inline))
|
__attribute__((always_inline))
|
||||||
ircd::mapi::header::header(const string_view &description,
|
ircd::mapi::header::header(const string_view description,
|
||||||
init_func init,
|
init_func init,
|
||||||
fini_func fini)
|
fini_func fini)
|
||||||
:meta
|
:meta
|
||||||
{
|
{
|
||||||
new metablock
|
new (body) metablock
|
||||||
{
|
{
|
||||||
description, std::move(init), std::move(fini)
|
description, std::move(init), std::move(fini)
|
||||||
}
|
}
|
||||||
|
|
|
@ -403,9 +403,10 @@ const
|
||||||
// metablock
|
// metablock
|
||||||
//
|
//
|
||||||
|
|
||||||
ircd::mapi::metablock::metablock(const string_view &description,
|
ircd::mapi::metablock::metablock(const string_view description,
|
||||||
init_func &&init_func,
|
init_func &&init_func,
|
||||||
fini_func &&fini_func)
|
fini_func &&fini_func)
|
||||||
|
noexcept
|
||||||
:init{std::move(init_func)}
|
:init{std::move(init_func)}
|
||||||
,fini{std::move(fini_func)}
|
,fini{std::move(fini_func)}
|
||||||
,meta
|
,meta
|
||||||
|
@ -422,8 +423,9 @@ ircd::mapi::metablock::metablock(const string_view &description,
|
||||||
ircd::mapi::header::~header()
|
ircd::mapi::header::~header()
|
||||||
noexcept
|
noexcept
|
||||||
{
|
{
|
||||||
delete meta;
|
assert(meta);
|
||||||
meta = nullptr;
|
if(likely(meta))
|
||||||
|
meta->meta.clear();
|
||||||
|
|
||||||
static_destruction = true;
|
static_destruction = true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue