Derive-C
Loading...
Searching...
No Matches
Trampoline< Function, MockFunction > Class Template Reference

#include <trampoline.hpp>

Public Types

using FunctionLocationType = decltype(Function)
using FunctionPtrType = std::remove_pointer_t<FunctionLocationType>
using MockFunctionType = decltype(MockFunction)
using MockType = member_pointer_class_t<MockFunctionType>

Public Member Functions

 Trampoline (MockType *mock)
void Disable ()
void Enable ()
 ~Trampoline ()

Static Public Member Functions

template<typename... Args>
static auto trampolineImpl (Args... args) -> decltype((std::declval< MockType * >() -> *mockFunc)(args...))

Static Public Attributes

static FunctionLocationType func = Function
static constexpr MockFunctionType mockFunc = MockFunction
static FunctionPtrType realFunc = *func
static MockTypesMock = nullptr

Detailed Description

template<auto * Function, auto MockFunction>
class Trampoline< Function, MockFunction >

A utility that 'bounces' calls to a free function, to a member function of a given instance.

  • Runtime checks ensure only one trampoline is active at once.
  • Not thread safe.
  • Allows for bouncing calls to google mock methods.

Definition at line 21 of file trampoline.hpp.

Member Typedef Documentation

◆ FunctionLocationType

template<auto * Function, auto MockFunction>
using Trampoline< Function, MockFunction >::FunctionLocationType = decltype(Function)

Definition at line 23 of file trampoline.hpp.

◆ FunctionPtrType

template<auto * Function, auto MockFunction>
using Trampoline< Function, MockFunction >::FunctionPtrType = std::remove_pointer_t<FunctionLocationType>

Definition at line 24 of file trampoline.hpp.

◆ MockFunctionType

template<auto * Function, auto MockFunction>
using Trampoline< Function, MockFunction >::MockFunctionType = decltype(MockFunction)

Definition at line 25 of file trampoline.hpp.

◆ MockType

template<auto * Function, auto MockFunction>
using Trampoline< Function, MockFunction >::MockType = member_pointer_class_t<MockFunctionType>

Definition at line 26 of file trampoline.hpp.

Constructor & Destructor Documentation

◆ Trampoline()

template<auto * Function, auto MockFunction>
Trampoline< Function, MockFunction >::Trampoline ( MockType * mock)
inlineexplicit

Definition at line 38 of file trampoline.hpp.

38 : mMock(*mock) {
39 if (sMock != nullptr) {
40 throw std::runtime_error("Trampoline already in use");
41 }
42 sMock = &mMock;
43 Enable();
44 }
void Enable()
static MockType * sMock
Here is the call graph for this function:

◆ ~Trampoline()

template<auto * Function, auto MockFunction>
Trampoline< Function, MockFunction >::~Trampoline ( )
inline

Definition at line 56 of file trampoline.hpp.

56 {
57 *func = realFunc;
58 sMock = nullptr;
59 }
static FunctionPtrType realFunc
static FunctionLocationType func

Member Function Documentation

◆ Disable()

template<auto * Function, auto MockFunction>
void Trampoline< Function, MockFunction >::Disable ( )
inline

Definition at line 46 of file trampoline.hpp.

46 {
47 CheckOwnership();
48 *func = realFunc;
49 }

◆ Enable()

template<auto * Function, auto MockFunction>
void Trampoline< Function, MockFunction >::Enable ( )
inline

Definition at line 51 of file trampoline.hpp.

51 {
52 CheckOwnership();
54 }
static auto trampolineImpl(Args... args) -> decltype((std::declval< MockType * >() -> *mockFunc)(args...))
Here is the call graph for this function:
Here is the caller graph for this function:

◆ trampolineImpl()

template<auto * Function, auto MockFunction>
template<typename... Args>
auto Trampoline< Function, MockFunction >::trampolineImpl ( Args... args) -> decltype((std::declval<MockType*>()->*mockFunc)(args...))
inlinestatic

Definition at line 34 of file trampoline.hpp.

34 {
35 return (sMock->*mockFunc)(args...);
36 }
static constexpr MockFunctionType mockFunc
Here is the caller graph for this function:

Member Data Documentation

◆ func

template<auto * Function, auto MockFunction>
FunctionLocationType Trampoline< Function, MockFunction >::func = Function
inlinestatic

Definition at line 28 of file trampoline.hpp.

◆ mockFunc

template<auto * Function, auto MockFunction>
MockFunctionType Trampoline< Function, MockFunction >::mockFunc = MockFunction
staticconstexpr

Definition at line 29 of file trampoline.hpp.

◆ realFunc

template<auto * Function, auto MockFunction>
FunctionPtrType Trampoline< Function, MockFunction >::realFunc = *func
inlinestatic

Definition at line 30 of file trampoline.hpp.

◆ sMock

template<auto * Function, auto MockFunction>
MockType* Trampoline< Function, MockFunction >::sMock = nullptr
inlinestatic

Definition at line 31 of file trampoline.hpp.


The documentation for this class was generated from the following file:
  • /home/runner/work/derive-C/derive-C/src/derive-c/test/trampoline.hpp