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::symbol_resolver_ref Class Reference

Type-erased, two-word handle to a symbol resolver. More...

#include <symbol_resolver.hpp>

Classes

struct  vtable
 Virtual table of symbol-resolution operations. More...
 

Public Member Functions

constexpr symbol_resolver_ref () noexcept=default
 Constructs an empty (invalid) handle.
 
template<typename Tag , typename Traits = symbol_resolver_traits<Tag>, std::enable_if_t< std::is_void_v< typename Traits::context_type >, int > = 0>
constexpr symbol_resolver_ref (Tag) noexcept
 Constructs a handle for a stateless resolver tag.
 
template<typename Tag , typename Context , typename Traits = symbol_resolver_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 symbol_resolver_ref (Tag, const Context &ctx RELOCO_LIFETIMEBOUND RELOCO_LIFETIME_CAPTURE_BY_THIS) noexcept
 Constructs a handle for a stateful resolver tag.
 
template<typename Tag , typename Context , std::enable_if_t<!std::is_lvalue_reference_v< Context >, int > = 0>
constexpr symbol_resolver_ref (Tag, Context &&)=delete
 
bool resolve (uintptr_t addr, symbol_resolution_context &context) const noexcept
 Resolves an address and computes the derived offsets.
 
bool resolve (uintptr_t addr, span< char > scratch, raw_resolved_symbol &raw_storage, resolved_symbol_info &out_info) const noexcept
 Resolves an address using caller-owned intermediate storage.
 
constexpr operator bool () const noexcept
 Reports whether the handle is bound to a resolver.
 

Static Public Member Functions

template<typename Tag , typename Traits = symbol_resolver_traits<Tag>, std::enable_if_t< std::is_void_v< typename Traits::context_type >, int > = 0>
static constexpr symbol_resolver_ref make () noexcept
 Creates a handle for a stateless resolver tag.
 
template<typename Tag , typename Context , typename Traits = symbol_resolver_traits<Tag>, std::enable_if_t<!std::is_void_v< typename Traits::context_type >, int > = 0>
static constexpr symbol_resolver_ref make (const Context &ctx RELOCO_LIFETIMEBOUND) noexcept
 Creates a handle for a stateful resolver tag.
 
template<typename Tag , typename Context , std::enable_if_t<!std::is_lvalue_reference_v< Context >, int > = 0>
static symbol_resolver_ref make (Context &&)=delete
 

Detailed Description

Type-erased, two-word handle to a symbol resolver.

Resolves addresses to symbols and derives the relative offsets stored in resolved_symbol_info.

Constructor & Destructor Documentation

◆ symbol_resolver_ref() [1/4]

constexpr microfmt::symbol_resolver_ref::symbol_resolver_ref ( )
constexprdefaultnoexcept

Constructs an empty (invalid) handle.

◆ symbol_resolver_ref() [2/4]

template<typename Tag , typename Traits = symbol_resolver_traits<Tag>, std::enable_if_t< std::is_void_v< typename Traits::context_type >, int > = 0>
constexpr microfmt::symbol_resolver_ref::symbol_resolver_ref ( Tag  )
inlineexplicitconstexprnoexcept

Constructs a handle for a stateless resolver tag.

Template Parameters
TagResolver tag type.
TraitsSpecialized traits, enabled when context_type is void.

◆ symbol_resolver_ref() [3/4]

template<typename Tag , typename Context , typename Traits = symbol_resolver_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::symbol_resolver_ref::symbol_resolver_ref ( Tag  ,
const Context &ctx RELOCO_LIFETIMEBOUND  RELOCO_LIFETIME_CAPTURE_BY_THIS 
)
inlineconstexprnoexcept

Constructs a handle for a stateful resolver tag.

Template Parameters
TagResolver tag type.
ContextConcrete context type.
TraitsSpecialized traits, enabled when context_type is non-void and Context converts to it.
Parameters
ctxContext object performing the resolution.

◆ symbol_resolver_ref() [4/4]

template<typename Tag , typename Context , std::enable_if_t<!std::is_lvalue_reference_v< Context >, int > = 0>
constexpr microfmt::symbol_resolver_ref::symbol_resolver_ref ( Tag  ,
Context &&   
)
constexprdelete

Member Function Documentation

◆ make() [1/3]

template<typename Tag , typename Traits = symbol_resolver_traits<Tag>, std::enable_if_t< std::is_void_v< typename Traits::context_type >, int > = 0>
static constexpr symbol_resolver_ref microfmt::symbol_resolver_ref::make ( )
inlinestaticconstexprnoexcept

Creates a handle for a stateless resolver tag.

Template Parameters
TagResolver tag type.
TraitsSpecialized traits, enabled when context_type is void.
Returns
An symbol_resolver_ref for the tag.

◆ make() [2/3]

template<typename Tag , typename Context , typename Traits = symbol_resolver_traits<Tag>, std::enable_if_t<!std::is_void_v< typename Traits::context_type >, int > = 0>
static constexpr symbol_resolver_ref microfmt::symbol_resolver_ref::make ( const Context &ctx  RELOCO_LIFETIMEBOUND)
inlinestaticconstexprnoexcept

Creates a handle for a stateful resolver tag.

Template Parameters
TagResolver tag type.
ContextConcrete context type.
TraitsSpecialized traits, enabled when context_type is non-void.
Parameters
ctxContext object performing the resolution.
Returns
An symbol_resolver_ref bound to ctx.

◆ make() [3/3]

template<typename Tag , typename Context , std::enable_if_t<!std::is_lvalue_reference_v< Context >, int > = 0>
static symbol_resolver_ref microfmt::symbol_resolver_ref::make ( Context &&  )
staticdelete

◆ operator bool()

constexpr microfmt::symbol_resolver_ref::operator bool ( ) const
inlineexplicitconstexprnoexcept

Reports whether the handle is bound to a resolver.

Returns
true when the handle is valid.

◆ resolve() [1/2]

bool microfmt::symbol_resolver_ref::resolve ( uintptr_t  addr,
span< char >  scratch,
raw_resolved_symbol &  raw_storage,
resolved_symbol_info &  out_info 
) const
inlinenoexcept

Resolves an address using caller-owned intermediate storage.

Parameters
addrAddress to resolve.
scratchScratch buffer available to the backend.
raw_storageStorage used for the backend's raw result.
out_infoReceives the derived symbol info.
Returns
true on success, false when the handle is empty or resolution fails.

◆ resolve() [2/2]

bool microfmt::symbol_resolver_ref::resolve ( uintptr_t  addr,
symbol_resolution_context &  context 
) const
inlinenoexcept

Resolves an address and computes the derived offsets.

Parameters
addrAddress to resolve.
scratchScratch buffer available to the backend.
out_infoReceives the derived symbol info.
Returns
true on success, false when the handle is empty or resolution fails.

The documentation for this class was generated from the following file: