microfmt
Zero-allocation C++ formatting for constrained environments
Loading...
Searching...
No Matches
Classes | Public Member Functions | Static Public Member Functions | List of all members
microfmt::address_translator_ref Class Reference

Type-erased, two-word handle for virtual-to-physical address translation. More...

#include <address_translator.hpp>

Classes

struct  vtable
 Virtual table of address translation operations. More...
 

Public Member Functions

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
 

Static Public Member Functions

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
 

Detailed Description

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.

Constructor & Destructor Documentation

◆ 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

Member Function Documentation

◆ 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>
static constexpr address_translator_ref microfmt::address_translator_ref::make ( )
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>
static address_translator_ref microfmt::address_translator_ref::make ( Context &&  )
staticdelete

◆ 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_addrVirtual address to translate.
out_attrsReceives 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: