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

Type-erased reference for scanning memory using a custom logical predicate. More...

#include <advanced_scanners.hpp>

Classes

struct  vtable
 

Public Member Functions

constexpr dependent_value_scanner_ref () noexcept=default
 
template<typename Tag , typename Traits = dependent_value_scanner_traits<Tag>, std::enable_if_t< std::is_void_v< typename Traits::context_type >, int > = 0>
constexpr dependent_value_scanner_ref (Tag) noexcept
 
template<typename Tag , typename Context , typename Traits = dependent_value_scanner_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 dependent_value_scanner_ref (Tag, const Context &ctx RELOCO_LIFETIMEBOUND RELOCO_LIFETIME_CAPTURE_BY_THIS) noexcept
 
template<typename Tag , typename Context , std::enable_if_t<!std::is_lvalue_reference_v< Context >, int > = 0>
constexpr dependent_value_scanner_ref (Tag, Context &&)=delete
 
expected< memory_scan_result, address_space_error > scan (uintptr_t start_addr, size_t search_length, size_t window_size, size_t stride, dependent_predicate_fn predicate, void *user_context=nullptr) const noexcept
 Scans memory using a custom sliding-window callback.
 
constexpr operator bool () const noexcept
 

Static Public Member Functions

template<typename Tag , typename Traits = dependent_value_scanner_traits<Tag>, std::enable_if_t< std::is_void_v< typename Traits::context_type >, int > = 0>
static constexpr dependent_value_scanner_ref make () noexcept
 
template<typename Tag , typename Context , typename Traits = dependent_value_scanner_traits<Tag>, std::enable_if_t<!std::is_void_v< typename Traits::context_type >, int > = 0>
static constexpr dependent_value_scanner_ref make (const Context &context RELOCO_LIFETIMEBOUND) noexcept
 

Detailed Description

Type-erased reference for scanning memory using a custom logical predicate.

Iterates a sliding window over the remote address space, invoking a caller-provided callback on each chunk. Ideal for locating complex data structures (like OS control blocks) by validating internal constraints (e.g., magic numbers combined with bounds-checked enums) when debugging symbols are unavailable.

Constructor & Destructor Documentation

◆ dependent_value_scanner_ref() [1/4]

constexpr microfmt::dependent_value_scanner_ref::dependent_value_scanner_ref ( )
constexprdefaultnoexcept

◆ dependent_value_scanner_ref() [2/4]

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

◆ dependent_value_scanner_ref() [3/4]

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

◆ dependent_value_scanner_ref() [4/4]

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

Member Function Documentation

◆ make() [1/2]

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

◆ make() [2/2]

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

◆ operator bool()

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

◆ scan()

expected< memory_scan_result, address_space_error > microfmt::dependent_value_scanner_ref::scan ( uintptr_t  start_addr,
size_t  search_length,
size_t  window_size,
size_t  stride,
dependent_predicate_fn  predicate,
void *  user_context = nullptr 
) const
inlinenoexcept

Scans memory using a custom sliding-window callback.

Parameters
start_addrAbsolute memory address to begin scanning.
search_lengthMaximum number of bytes to inspect.
window_sizeByte width passed to the predicate function.
strideByte alignment to step forward after each window check.
predicateCallback returning true if the window contents match the target structure.
user_contextOpaque pointer forwarded to the predicate.

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