diff options
| author | ruki <[email protected]> | 2025-05-07 00:49:24 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2025-08-28 11:35:53 +0800 |
| commit | f20b216bd906d1a5c6235f5c9520f4d69cddb2af (patch) | |
| tree | 15844a811cefd9317386d5d1ea0d376be090a405 | |
| parent | f2984b3ba5cc2b9c52891ffb44600be3dec23b52 (diff) | |
impl engine pool
| -rw-r--r-- | core/src/xmake/engine_pool.c | 36 | ||||
| -rw-r--r-- | core/src/xmake/engine_pool.h | 19 |
2 files changed, 46 insertions, 9 deletions
diff --git a/core/src/xmake/engine_pool.c b/core/src/xmake/engine_pool.c index 0a2102ee1..bd2502829 100644 --- a/core/src/xmake/engine_pool.c +++ b/core/src/xmake/engine_pool.c @@ -33,16 +33,38 @@ #include "engine_pool.h" /* ////////////////////////////////////////////////////////////////////////////////////// - * types + * macros */ - -// the engine pool type -typedef struct __xm_engine_pool_t -{ - -}xm_engine_pool_t; +#define XM_ENGINE_POOL_MAXN (128) /* ////////////////////////////////////////////////////////////////////////////////////// * implementation */ +xm_engine_pool_ref_t xm_engine_pool_init() +{ + return tb_single_list_init(0, tb_element_ptr(tb_null, tb_null)); +} + +tb_void_t xm_engine_pool_exit(xm_engine_pool_ref_t engine_pool) +{ + tb_single_list_exit(engine_pool); +} + +xm_engine_ref_t xm_engine_pool_alloc(xm_engine_pool_ref_t engine_pool) +{ + xm_engine_ref_t engine = tb_null; + if (tb_single_list_size(engine_pool) > 0) + { + engine = (xm_engine_ref_t)tb_single_list_head(engine_pool); + tb_single_list_remove_head(engine_pool); + } + return engine; +} + +tb_void_t xm_engine_pool_free(xm_engine_pool_ref_t engine_pool, xm_engine_ref_t engine) +{ + if (tb_single_list_size(engine_pool) < XM_ENGINE_POOL_MAXN) + tb_single_list_insert_tail(engine_pool, engine); + else xm_engine_exit(engine); +} diff --git a/core/src/xmake/engine_pool.h b/core/src/xmake/engine_pool.h index cc8cf8faf..47744f99a 100644 --- a/core/src/xmake/engine_pool.h +++ b/core/src/xmake/engine_pool.h @@ -36,7 +36,7 @@ __tb_extern_c_enter__ */ /// the xmake engine pool type -typedef struct {tb_int_t dummy;} const* xm_engine_pool_ref_t; +typedef tb_single_list_ref_t xm_engine_pool_ref_t; /* ////////////////////////////////////////////////////////////////////////////////////// * interfaces @@ -46,7 +46,7 @@ typedef struct {tb_int_t dummy;} const* xm_engine_pool_ref_t; * * @return the engine pool */ -xm_engine_pool_ref_t xm_engine_pool_init(tb_noargs_t); +xm_engine_pool_ref_t xm_engine_pool_init(tb_void_t); /*! exit the engine_pool * @@ -54,6 +54,21 @@ xm_engine_pool_ref_t xm_engine_pool_init(tb_noargs_t); */ tb_void_t xm_engine_pool_exit(xm_engine_pool_ref_t engine_pool); +/*! alloc a engine from the engine_pool + * + * @param engine_pool the engine_pool + * + * @return the engine + */ +xm_engine_ref_t xm_engine_pool_alloc(xm_engine_pool_ref_t engine_pool); + +/*! free a engine to the engine_pool + * + * @param engine_pool the engine_pool + * @param engine the engine + */ +tb_void_t xm_engine_pool_free(xm_engine_pool_ref_t engine_pool, xm_engine_ref_t engine); + /* ////////////////////////////////////////////////////////////////////////////////////// * extern */ |
