forked from enlightenment/efl
eina: add an API to check if a pointer is a valid element of a mempool.
This commit is contained in:
parent
45bcc87e76
commit
b5cede94ea
|
@ -52,6 +52,10 @@ struct _Eina_Mempool_Backend
|
|||
* available in the backend.
|
||||
* @see Eina_Mempool_Repack_Cb */
|
||||
void (*repack)(void *data, Eina_Mempool_Repack_Cb cb, void *cb_data);
|
||||
/** Function to check is a valid element from a mempool.
|
||||
* @see eina_mempool_from
|
||||
*/
|
||||
Eina_Bool (*from)(void *data, void *element);
|
||||
};
|
||||
|
||||
struct _Eina_Mempool_Backend_ABI1
|
||||
|
@ -69,6 +73,7 @@ struct _Eina_Mempool_Backend_ABI1
|
|||
struct _Eina_Mempool_Backend_ABI2
|
||||
{
|
||||
void (*repack)(void *data, Eina_Mempool_Repack_Cb cb, void *cb_data);
|
||||
Eina_Bool (*from)(void *data, void *element);
|
||||
};
|
||||
|
||||
struct _Eina_Mempool
|
||||
|
@ -104,6 +109,13 @@ eina_mempool_free(Eina_Mempool *mp, void *element)
|
|||
if (element) mp->backend.free(mp->backend_data, element);
|
||||
}
|
||||
|
||||
static inline Eina_Bool
|
||||
eina_mempool_from(Eina_Mempool *mp, void *element)
|
||||
{
|
||||
if (!element) return EINA_FALSE;
|
||||
return mp->backend2->from(mp->backend_data, element);
|
||||
}
|
||||
|
||||
static inline unsigned int
|
||||
eina_mempool_alignof(unsigned int size)
|
||||
{
|
||||
|
|
|
@ -91,11 +91,12 @@ _new_va(const char *name,
|
|||
SBP(shutdown);
|
||||
#undef SBP
|
||||
|
||||
if (be->repack)
|
||||
if (be->repack || be->from)
|
||||
{
|
||||
mp->backend2 = calloc(1, sizeof (Eina_Mempool_Backend_ABI2));
|
||||
if (mp->backend2)
|
||||
mp->backend2->repack = be->repack;
|
||||
if (!mp->backend2) goto on_error;
|
||||
mp->backend2->repack = be->repack;
|
||||
mp->backend2->from = be->from;
|
||||
}
|
||||
|
||||
mp->backend_data = mp->backend.init(context, options, args);
|
||||
|
|
|
@ -169,7 +169,7 @@ static inline void eina_mempool_free(Eina_Mempool *mp, void *element) EINA_ARG_
|
|||
* @see Eina_Mempool_Repack_Cb
|
||||
* @see _Eina_Mempool_Backend
|
||||
*/
|
||||
EAPI void eina_mempool_repack(Eina_Mempool *mp, Eina_Mempool_Repack_Cb cb, void *data) EINA_ARG_NONNULL(1, 2);
|
||||
EAPI void eina_mempool_repack(Eina_Mempool *mp, Eina_Mempool_Repack_Cb cb, void *data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Runs a garbage collection cycle.
|
||||
|
@ -178,6 +178,17 @@ EAPI void eina_mempool_repack(Eina_Mempool *mp, Eina_Mempool_Repack_Cb c
|
|||
*/
|
||||
EAPI void eina_mempool_gc(Eina_Mempool *mp) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @brief Check if a pointer is a valid element from the mempool
|
||||
*
|
||||
* @param[in] mp The mempool
|
||||
* @param[in] element The data to free
|
||||
* @return #EINA_TRUE if the element is a valid element of the mempool, #EINA_FALSE otherwise
|
||||
*
|
||||
* @since 1.20
|
||||
*/
|
||||
static inline Eina_Bool eina_mempool_from(Eina_Mempool *mp, void *element);
|
||||
|
||||
/**
|
||||
* @brief Has the backend update its internal statistics.
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue