#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) { ctx->Unprepare(); _pool.push_back(ctx); } }; #endif // PKMNLIB_CONTEXTPOOL_HPP