#ifndef PKMNLIB_CONTEXTPOOL_HPP #define PKMNLIB_CONTEXTPOOL_HPP #include #include class ContextPool { std::vector _pool; asIScriptEngine* _engine; public: ContextPool(asIScriptEngine* engine) : _engine(engine) {} ~ContextPool(){ for (auto ctx: _pool){ ctx->Release(); } } asIScriptContext* RequestContext() { // Get a context from the pool, or create a new asIScriptContext* ctx = nullptr; if (!_pool.empty()) { ctx = *_pool.rbegin(); _pool.pop_back(); } else ctx = _engine->CreateContext(); return ctx; } void ReturnContextToPool(asIScriptContext* ctx) { _pool.push_back(ctx); ctx->Unprepare(); } }; #endif // PKMNLIB_CONTEXTPOOL_HPP