1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
#pragma once
namespace storm {
class Engine;
/**
* Object used as the first parameter to STORM_ENGINE_FN. The wrapping utility needs
* to store some extra data on the stack, which this class accommodates.
*/
class EnginePtr {
public:
// Ctor, so that we can call EnginePtr functions from C++ as well.
inline EnginePtr(Engine &e) : v(e) {}
// Automatic cast to Engine.
inline operator Engine &() {
return v;
}
// The engine itself.
Engine &v;
private:
// Additional data required:
#ifdef X86
// The return address and the return value, in some order.
void *returnData[2];
#endif
};
}
|