rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | Private Attributes
TaggedPointer< T > Struct Template Reference

#include <scheduler.h>

Collaboration diagram for TaggedPointer< T >:
Collaboration graph
[legend]

Public Member Functions

constexpr T * getOriginalPointer () const
 
constexpr bool getFlag () const
 
constexpr scheduler_arg_t getRaw () const
 
constexpr operator bool () const
 
 TaggedPointer (scheduler_arg_t const raw) noexcept
 
 TaggedPointer () noexcept=default
 
 TaggedPointer (TaggedPointer const &) noexcept=default
 
 TaggedPointer (TaggedPointer &&other) noexcept
 
TaggedPointeroperator= (TaggedPointer const &) noexcept=default
 
TaggedPointeroperator= (TaggedPointer &&other) noexcept
 

Static Public Member Functions

static constexpr TaggedPointer fromRaw (scheduler_arg_t raw)
 
template<typename U = T>
requires std::is_pointer_v<U>
static constexpr TaggedPointer make (U ptr, const bool flag)
 

Private Attributes

scheduler_arg_t m_raw {}
 

Detailed Description

template<typename T>
struct TaggedPointer< T >

Definition at line 42 of file scheduler.h.

Constructor & Destructor Documentation

◆ TaggedPointer() [1/4]

template<typename T >
TaggedPointer< T >::TaggedPointer ( scheduler_arg_t const  raw)
inlineexplicitnoexcept

Definition at line 78 of file scheduler.h.

78: m_raw{raw} { }
scheduler_arg_t m_raw
Definition scheduler.h:45

◆ TaggedPointer() [2/4]

template<typename T >
TaggedPointer< T >::TaggedPointer ( )
defaultnoexcept

◆ TaggedPointer() [3/4]

template<typename T >
TaggedPointer< T >::TaggedPointer ( TaggedPointer< T > const &  )
defaultnoexcept

◆ TaggedPointer() [4/4]

template<typename T >
TaggedPointer< T >::TaggedPointer ( TaggedPointer< T > &&  other)
inlinenoexcept

Definition at line 83 of file scheduler.h.

83 : m_raw{other.m_raw} {
84 other.m_raw = 0;
85 }

Member Function Documentation

◆ fromRaw()

template<typename T >
static constexpr TaggedPointer TaggedPointer< T >::fromRaw ( scheduler_arg_t  raw)
inlinestaticconstexpr

Definition at line 52 of file scheduler.h.

52 {
53 return TaggedPointer{raw};
54 }

Referenced by turnInjectionPinHigh().

Here is the caller graph for this function:

◆ getFlag()

template<typename T >
constexpr bool TaggedPointer< T >::getFlag ( ) const
inlineconstexpr

Definition at line 68 of file scheduler.h.

68 {
69 return m_raw & scheduler_arg_t{1};
70 }
uintptr_t scheduler_arg_t
Definition scheduler.h:21

◆ getOriginalPointer()

template<typename T >
constexpr T * TaggedPointer< T >::getOriginalPointer ( ) const
inlineconstexpr

Definition at line 64 of file scheduler.h.

64 {
65 return reinterpret_cast<T*>(m_raw & ~scheduler_arg_t{1});
66 }

Referenced by turnInjectionPinHigh().

Here is the caller graph for this function:

◆ getRaw()

template<typename T >
constexpr scheduler_arg_t TaggedPointer< T >::getRaw ( ) const
inlineconstexpr

Definition at line 72 of file scheduler.h.

72 {
73 return m_raw;
74 }

◆ make()

template<typename T >
template<typename U = T>
requires std::is_pointer_v<U>
static constexpr TaggedPointer TaggedPointer< T >::make ( ptr,
const bool  flag 
)
inlinestaticconstexpr

Definition at line 57 of file scheduler.h.

57 {
58 #if EFI_UNIT_TEST
59 assert((reinterpret_cast<scheduler_arg_t>(ptr) & scheduler_arg_t{1}) == 0);
60 #endif
61 return TaggedPointer{reinterpret_cast<scheduler_arg_t>(ptr) | (flag ? 1 : 0)};
62 }

◆ operator bool()

template<typename T >
constexpr TaggedPointer< T >::operator bool ( ) const
inlineexplicitconstexpr

Definition at line 76 of file scheduler.h.

76{ return m_raw != 0; }

◆ operator=() [1/2]

template<typename T >
TaggedPointer & TaggedPointer< T >::operator= ( TaggedPointer< T > &&  other)
inlinenoexcept

Definition at line 88 of file scheduler.h.

88 {
89 m_raw = other.m_raw;
90 other.m_raw = 0;
91 return *this;
92 }

◆ operator=() [2/2]

template<typename T >
TaggedPointer & TaggedPointer< T >::operator= ( TaggedPointer< T > const &  )
defaultnoexcept

Field Documentation

◆ m_raw

template<typename T >
scheduler_arg_t TaggedPointer< T >::m_raw {}
private

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