// vim: set ts=4 sw=4 tw=99 noet: #ifndef _INCLUDE_SOURCEPAWN_ENGINE_2_H_ #define _INCLUDE_SOURCEPAWN_ENGINE_2_H_ #include namespace SourcePawn { /** * @brief Outlines the interface a Virtual Machine (JIT) must expose */ class SourcePawnEngine2 : public ISourcePawnEngine2 { public: SourcePawnEngine2(); public: unsigned int GetAPIVersion(); const char *GetEngineName(); const char *GetVersionString(); IPluginRuntime *LoadPlugin(ICompilation *co, const char *file, int *err); SPVM_NATIVE_FUNC CreateFakeNative(SPVM_FAKENATIVE_FUNC callback, void *pData); void DestroyFakeNative(SPVM_NATIVE_FUNC func); IDebugListener *SetDebugListener(IDebugListener *listener); ICompilation *StartCompilation(); const char *GetErrorString(int err); bool Initialize(); void Shutdown(); IPluginRuntime *CreateEmptyRuntime(const char *name, uint32_t memory); bool InstallWatchdogTimer(size_t timeout_ms); bool SetJitEnabled(bool enabled) { jit_enabled_ = enabled; return true; } bool IsJitEnabled() { return jit_enabled_; } void SetProfiler(IProfiler *profiler) { // Deprecated. } void EnableProfiling() { profiling_enabled_ = !!profiler_; } void DisableProfiling() { profiling_enabled_ = false; } bool IsProfilingEnabled() { return profiling_enabled_; } void SetProfilingTool(IProfilingTool *tool) { profiler_ = tool; } public: IProfilingTool *GetProfiler() { return profiler_; } private: IProfilingTool *profiler_; bool jit_enabled_; bool profiling_enabled_; }; } extern SourcePawn::SourcePawnEngine2 g_engine2; class EnterProfileScope { public: EnterProfileScope(const char *group, const char *name) { if (g_engine2.IsProfilingEnabled()) g_engine2.GetProfiler()->EnterScope(group, name); } ~EnterProfileScope() { if (g_engine2.IsProfilingEnabled()) g_engine2.GetProfiler()->LeaveScope(); } }; #endif //_INCLUDE_SOURCEPAWN_ENGINE_2_H_