Files
UnrealEngine/Engine/Source/ThirdParty/FakeIt/2.0.2/include/mockutils/FakeObject.hpp
2025-05-18 13:04:45 +08:00

89 lines
1.9 KiB
C++

/*
* FakeObject.hpp
* Copyright (c) 2014 Eran Pe'er.
*
* This program is made available under the terms of the MIT License.
*
* Created on Jun 8, 2014
*/
#pragma once
#include <new>
#ifdef _MSC_VER
#include "mockutils/mscpp/VirtualTable.hpp"
#else
#include "mockutils/gcc/VirtualTable.hpp"
#endif
namespace fakeit {
// silent GCC compiler warning: iso c++ forbids zero-size array [-Wpedantic]
#ifdef __GNUG__
#ifndef __clang__
#pragma GCC diagnostic ignored "-Wpedantic"
#endif
#endif
// silent MSC++ compiler warning: C4200: nonstandard extension used : zero-sized array in struct/union.
#ifdef _MSC_VER
#pragma warning( push )
#pragma warning( disable : 4200 )
#endif
template<typename C, typename ... baseclasses>
class FakeObject {
VirtualTable<C, baseclasses...> vtable;
static const size_t SIZE = sizeof(C) - sizeof(VirtualTable<C, baseclasses...>);
char instanceArea[SIZE ? SIZE : 0];
FakeObject(FakeObject const &) = delete; // undefined
FakeObject &operator=(FakeObject const &) = delete; // undefined
public:
FakeObject() : vtable() {
initializeDataMembersArea();
}
~FakeObject() {
vtable.dispose();
}
void initializeDataMembersArea() {
for (size_t i = 0; i < SIZE; ++i) instanceArea[i] = (char) 0;
}
void setMethod(unsigned int index, void *method) {
vtable.setMethod(index, method);
}
VirtualTable<C, baseclasses...> &getVirtualTable() {
return vtable;
}
void setVirtualTable(VirtualTable<C, baseclasses...> &t) {
vtable = t;
}
void setDtor(void *dtor) {
vtable.setDtor(dtor);
}
};
#ifdef _MSC_VER
#pragma warning( pop )
#endif
#ifdef __GNUG__
#ifndef __clang__
#pragma GCC diagnostic pop
#endif
#endif
}