mirror of
https://github.com/matrix-construct/construct
synced 2024-06-01 01:28:54 +02:00
ircd::mods: Add shared_from mod& sym_ptr ctor; adjust conversions.
This commit is contained in:
parent
bdd5006f32
commit
291b6dc286
|
@ -19,8 +19,8 @@ namespace ircd::mods
|
|||
struct ircd::mods::module
|
||||
:std::shared_ptr<mod>
|
||||
{
|
||||
operator const mod &() const;
|
||||
operator mod &();
|
||||
explicit operator const mod &() const;
|
||||
explicit operator mod &();
|
||||
|
||||
string_view name() const;
|
||||
string_view path() const;
|
||||
|
@ -47,7 +47,8 @@ template<class T>
|
|||
T &
|
||||
ircd::mods::module::get(const string_view &sym)
|
||||
{
|
||||
return mods::get<T>(*this, sym);
|
||||
mod &mod{*this};
|
||||
return mods::get<T>(mod, sym);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
|
@ -55,14 +56,16 @@ const T &
|
|||
ircd::mods::module::get(const string_view &sym)
|
||||
const
|
||||
{
|
||||
return mods::get<T>(*this, sym);
|
||||
const mod &mod{*this};
|
||||
return mods::get<T>(mod, sym);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
T *
|
||||
ircd::mods::module::ptr(const string_view &sym)
|
||||
{
|
||||
return mods::ptr<T>(*this, sym);
|
||||
mod &mod{*this};
|
||||
return mods::ptr<T>(mod, sym);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
|
@ -70,7 +73,8 @@ const T *
|
|||
ircd::mods::module::ptr(const string_view &sym)
|
||||
const
|
||||
{
|
||||
return mods::ptr<T>(*this, sym);
|
||||
const mod &mod{*this};
|
||||
return mods::ptr<T>(mod, sym);
|
||||
}
|
||||
|
||||
inline ircd::mods::module::operator
|
||||
|
|
|
@ -36,9 +36,10 @@ class ircd::mods::sym_ptr
|
|||
template<class T> T *operator->();
|
||||
template<class T> T &operator*();
|
||||
|
||||
sym_ptr() = default;
|
||||
explicit sym_ptr(mod &, const string_view &symname);
|
||||
sym_ptr(module, const string_view &symname);
|
||||
sym_ptr(const string_view &modname, const string_view &symname);
|
||||
sym_ptr() = default;
|
||||
};
|
||||
|
||||
template<class T>
|
||||
|
|
18
ircd/mods.cc
18
ircd/mods.cc
|
@ -204,6 +204,15 @@ ircd::mods::sym_ptr::sym_ptr(const string_view &modname,
|
|||
{
|
||||
}
|
||||
|
||||
ircd::mods::sym_ptr::sym_ptr(mod &mod,
|
||||
const string_view &symname)
|
||||
:sym_ptr
|
||||
{
|
||||
module(shared_from(mod)), symname
|
||||
}
|
||||
{
|
||||
}
|
||||
|
||||
ircd::mods::sym_ptr::sym_ptr(module module,
|
||||
const string_view &symname)
|
||||
:std::weak_ptr<mod>
|
||||
|
@ -275,21 +284,24 @@ ircd::string_view
|
|||
ircd::mods::module::path()
|
||||
const
|
||||
{
|
||||
return mods::path(*this);
|
||||
const mod &mod(*this);
|
||||
return mods::path(mod);
|
||||
}
|
||||
|
||||
ircd::string_view
|
||||
ircd::mods::module::name()
|
||||
const
|
||||
{
|
||||
return mods::name(*this);
|
||||
const mod &mod(*this);
|
||||
return mods::name(mod);
|
||||
}
|
||||
|
||||
bool
|
||||
ircd::mods::module::has(const string_view &name)
|
||||
const
|
||||
{
|
||||
return mods::has(*this, name);
|
||||
const mod &mod(*this);
|
||||
return mods::has(mod, name);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -66,5 +66,9 @@ struct ircd::mods::mod
|
|||
mod(const filesystem::path &,
|
||||
const load_mode::type & = load_mode::rtld_local | load_mode::rtld_now);
|
||||
|
||||
mod(mod &&) = delete;
|
||||
mod(const mod &) = delete;
|
||||
mod &operator=(mod &&) = delete;
|
||||
mod &operator=(const mod &) = delete;
|
||||
~mod() noexcept;
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue