#include "function.h" // Virtual Function Information template __VirtualFunctionInfo::__VirtualFunctionInfo(T *const addr_, void *const parent_): addr(addr_), parent(parent_) {} template bool __VirtualFunctionInfo::can_overwrite() const { return ((void *) *addr) != parent; } // Function Information template __Function::__Function(const char *const name_, const __Function::ptr_type func_, const __Function::ptr_type thunk_): is_virtual(false), func(func_), enabled(true), name(name_), backup(func_), thunk(thunk_) {} template __Function::__Function(const char *const name_, __Function::ptr_type *const func_, void *const parent, const __Function::ptr_type thunk_): is_virtual(true), func(__VirtualFunctionInfo(func_, parent)), enabled(std::get<__VirtualFunctionInfo>(func).can_overwrite()), name(name_), backup(*get_vtable_addr()), thunk(thunk_) {} // Thunks thunk_enabler_t thunk_enabler;