Type-erased, two-word handle for virtual-to-physical address translation.
More...
#include <address_translator.hpp>
|
| struct | vtable |
| | Virtual table of address translation operations. More...
|
| |
|
| constexpr | address_translator_ref () noexcept=default |
| | Constructs an empty (invalid) handle.
|
| |
| template<typename Tag , typename Traits = address_translator_traits<Tag>, std::enable_if_t< std::is_void_v< typename Traits::context_type >, int > = 0> |
| constexpr | address_translator_ref (Tag) noexcept |
| | Constructs a handle for a stateless translator tag.
|
| |
| template<typename Tag , typename Context , typename Traits = address_translator_traits<Tag>, std::enable_if_t<!std::is_void_v< typename Traits::context_type > &&std::is_convertible_v< const Context *, const typename Traits::context_type * >, int > = 0> |
| constexpr | address_translator_ref (Tag, const Context &ctx RELOCO_LIFETIMEBOUND RELOCO_LIFETIME_CAPTURE_BY_THIS) noexcept |
| | Constructs a handle for a stateful translator tag.
|
| |
| template<typename Tag , typename Context , std::enable_if_t<!std::is_lvalue_reference_v< Context >, int > = 0> |
| constexpr | address_translator_ref (Tag, Context &&)=delete |
| |
| bool | translate (uintptr_t virt_addr, translation_attributes &out_attrs) const noexcept |
| | Translates a virtual address to physical address and populates attributes.
|
| |
| constexpr | operator bool () const noexcept |
| |
|
| template<typename Tag , typename Traits = address_translator_traits<Tag>, std::enable_if_t< std::is_void_v< typename Traits::context_type >, int > = 0> |
| static constexpr address_translator_ref | make () noexcept |
| |
| template<typename Tag , typename Context , typename Traits = address_translator_traits<Tag>, std::enable_if_t<!std::is_void_v< typename Traits::context_type >, int > = 0> |
| static constexpr address_translator_ref | make (const Context &ctx RELOCO_LIFETIMEBOUND) noexcept |
| |
| template<typename Tag , typename Context , std::enable_if_t<!std::is_lvalue_reference_v< Context >, int > = 0> |
| static address_translator_ref | make (Context &&)=delete |
| |
Type-erased, two-word handle for virtual-to-physical address translation.
Packs a context pointer and a virtual table into two words, avoiding allocations, RTTI, and virtual dispatch.
◆ address_translator_ref() [1/4]
| constexpr microfmt::address_translator_ref::address_translator_ref |
( |
| ) |
|
|
constexprdefaultnoexcept |
Constructs an empty (invalid) handle.
◆ address_translator_ref() [2/4]
template<typename Tag , typename Traits = address_translator_traits<Tag>, std::enable_if_t< std::is_void_v< typename Traits::context_type >, int > = 0>
| constexpr microfmt::address_translator_ref::address_translator_ref |
( |
Tag |
| ) |
|
|
inlineexplicitconstexprnoexcept |
Constructs a handle for a stateless translator tag.
◆ address_translator_ref() [3/4]
template<typename Tag , typename Context , typename Traits = address_translator_traits<Tag>, std::enable_if_t<!std::is_void_v< typename Traits::context_type > &&std::is_convertible_v< const Context *, const typename Traits::context_type * >, int > = 0>
| constexpr microfmt::address_translator_ref::address_translator_ref |
( |
Tag |
, |
|
|
const Context &ctx RELOCO_LIFETIMEBOUND |
RELOCO_LIFETIME_CAPTURE_BY_THIS |
|
) |
| |
|
inlineconstexprnoexcept |
Constructs a handle for a stateful translator tag.
◆ address_translator_ref() [4/4]
template<typename Tag , typename Context , std::enable_if_t<!std::is_lvalue_reference_v< Context >, int > = 0>
| constexpr microfmt::address_translator_ref::address_translator_ref |
( |
Tag |
, |
|
|
Context && |
|
|
) |
| |
|
constexprdelete |
◆ make() [1/3]
template<typename Tag , typename Traits = address_translator_traits<Tag>, std::enable_if_t< std::is_void_v< typename Traits::context_type >, int > = 0>
|
|
inlinestaticconstexprnoexcept |
◆ make() [2/3]
template<typename Tag , typename Context , typename Traits = address_translator_traits<Tag>, std::enable_if_t<!std::is_void_v< typename Traits::context_type >, int > = 0>
| static constexpr address_translator_ref microfmt::address_translator_ref::make |
( |
const Context &ctx |
RELOCO_LIFETIMEBOUND | ) |
|
|
inlinestaticconstexprnoexcept |
◆ make() [3/3]
template<typename Tag , typename Context , std::enable_if_t<!std::is_lvalue_reference_v< Context >, int > = 0>
◆ operator bool()
| constexpr microfmt::address_translator_ref::operator bool |
( |
| ) |
const |
|
inlineexplicitconstexprnoexcept |
◆ translate()
| bool microfmt::address_translator_ref::translate |
( |
uintptr_t |
virt_addr, |
|
|
translation_attributes & |
out_attrs |
|
) |
| const |
|
inlinenoexcept |
Translates a virtual address to physical address and populates attributes.
- Parameters
-
| virt_addr | Virtual address to translate. |
| out_attrs | Receives translation attributes. |
- Returns
true on success, false if the handle is empty or translation fails.
The documentation for this class was generated from the following file: