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::value_range_scanner_ref< T > Class Template Reference

Type-erased reference for scanning memory for a scalar value within a [min, max] range. More...

#include <advanced_scanners.hpp>

Classes

struct  vtable
 

Public Member Functions

constexpr value_range_scanner_ref () noexcept=default
 
template<typename Tag , typename Traits = value_range_scanner_traits<Tag, T>, std::enable_if_t< std::is_void_v< typename Traits::context_type >, int > = 0>
constexpr value_range_scanner_ref (Tag) noexcept
 
template<typename Tag , typename Context , typename Traits = value_range_scanner_traits<Tag, T>, 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 value_range_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 value_range_scanner_ref (Tag, Context &&)=delete
 
expected< memory_scan_result, address_space_error > scan (uintptr_t start_addr, size_t search_length, const T &min_val, const T &max_val, size_t stride=alignof(T)) const noexcept
 Scans memory for a value falling within the inclusive bounds [min_val, max_val].
 
constexpr operator bool () const noexcept
 

Static Public Member Functions

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

Detailed Description

template<typename T>
class microfmt::value_range_scanner_ref< T >

Type-erased reference for scanning memory for a scalar value within a [min, max] range.

Abstracts the underlying memory traversal and chunking logic. Iterates over the address space at a specified stride, interpreting bytes as type T and comparing them against bounds.

Template Parameters
TTrivially copyable type to interpret from memory.

Constructor & Destructor Documentation

◆ value_range_scanner_ref() [1/4]

template<typename T >
constexpr microfmt::value_range_scanner_ref< T >::value_range_scanner_ref ( )
constexprdefaultnoexcept

◆ value_range_scanner_ref() [2/4]

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

◆ value_range_scanner_ref() [3/4]

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

◆ value_range_scanner_ref() [4/4]

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

Member Function Documentation

◆ make() [1/2]

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

◆ make() [2/2]

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

◆ operator bool()

template<typename T >
constexpr microfmt::value_range_scanner_ref< T >::operator bool ( ) const
inlineexplicitconstexprnoexcept

◆ scan()

template<typename T >
expected< memory_scan_result, address_space_error > microfmt::value_range_scanner_ref< T >::scan ( uintptr_t  start_addr,
size_t  search_length,
const T &  min_val,
const T &  max_val,
size_t  stride = alignof(T) 
) const
inlinenoexcept

Scans memory for a value falling within the inclusive bounds [min_val, max_val].

Parameters
start_addrAbsolute memory address to begin scanning.
search_lengthMaximum number of bytes to inspect.
min_valMinimum acceptable value (inclusive).
max_valMaximum acceptable value (inclusive).
strideByte alignment to step forward after each window check.

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