diff --git a/docs/old/mempool.rst b/docs/old/mempool.rst index 34dd433..85bf112 100644 --- a/docs/old/mempool.rst +++ b/docs/old/mempool.rst @@ -126,7 +126,9 @@ instance, we might as well try to reuse the memory for the ``scratch_space`` field, as well. To do this, you provide initialization and finalization callbacks: -.. function:: void cork_mempool_set_callbacks(struct cork_mempool \*mp, void \*user_data, cork_free_f free_user_data, cork_init_f init_object, cork_done_f done_object) +.. function:: void cork_mempool_set_user_data(struct cork_mempool \*mp, void \*user_data, cork_free_f free_user_data) + void cork_mempool_set_init_object(struct cork_mempool \*mp, cork_init_f init_object) + void cork_mempool_set_done_object(struct cork_mempool \*mp, cork_done_f done_object) Provide callback functions that will be used to initialize and finalize each object created by the memory pool. @@ -152,7 +154,8 @@ logic goes into ``done_object``, and not our destructor:: static cork_mempool *pool; pool = cork_mempool_new(pool, struct my_data); - cork_mempool_set_callbacks(pool, NULL, NULL, my_data_init, my_data_done); + cork_mempool_set_init_object(pool, my_data_init); + cork_mempool_set_done_object(pool, my_data_done); struct my_data * my_data_new(void) diff --git a/include/libcork/core/mempool.h b/include/libcork/core/mempool.h index e762bef..aaf745d 100644 --- a/include/libcork/core/mempool.h +++ b/include/libcork/core/mempool.h @@ -41,6 +41,18 @@ CORK_API void cork_mempool_free(struct cork_mempool *mp); +CORK_API void +cork_mempool_set_user_data(struct cork_mempool *mp, + void *user_data, cork_free_f free_user_data); + +CORK_API void +cork_mempool_set_init_object(struct cork_mempool *mp, cork_init_f init_object); + +CORK_API void +cork_mempool_set_done_object(struct cork_mempool *mp, cork_done_f done_object); + +/* Deprecated; you should now use separate calls to cork_mempool_set_user_data, + * cork_mempool_set_init_object, and cork_mempool_set_done_object. */ CORK_API void cork_mempool_set_callbacks(struct cork_mempool *mp, void *user_data, cork_free_f free_user_data, diff --git a/src/libcork/core/mempool.c b/src/libcork/core/mempool.c index 9600839..ad00371 100644 --- a/src/libcork/core/mempool.c +++ b/src/libcork/core/mempool.c @@ -108,18 +108,37 @@ cork_mempool_free(struct cork_mempool *mp) void -cork_mempool_set_callbacks(struct cork_mempool *mp, - void *user_data, cork_free_f free_user_data, - cork_init_f init_object, - cork_done_f done_object) +cork_mempool_set_user_data(struct cork_mempool *mp, + void *user_data, cork_free_f free_user_data) { cork_free_user_data(mp); mp->user_data = user_data; mp->free_user_data = free_user_data; +} + +void +cork_mempool_set_init_object(struct cork_mempool *mp, cork_init_f init_object) +{ mp->init_object = init_object; +} + +void +cork_mempool_set_done_object(struct cork_mempool *mp, cork_done_f done_object) +{ mp->done_object = done_object; } +void +cork_mempool_set_callbacks(struct cork_mempool *mp, + void *user_data, cork_free_f free_user_data, + cork_init_f init_object, + cork_done_f done_object) +{ + cork_mempool_set_user_data(mp, user_data, free_user_data); + cork_mempool_set_init_object(mp, init_object); + cork_mempool_set_done_object(mp, done_object); +} + /* If this function succeeds, then we guarantee that there will be at * least one object in mp->free_list. */ diff --git a/tests/test-mempool.c b/tests/test-mempool.c index 134fb6e..9b5842c 100644 --- a/tests/test-mempool.c +++ b/tests/test-mempool.c @@ -100,8 +100,9 @@ START_TEST(test_mempool_reuse_01) size_t done_call_count = 0; struct cork_mempool *mp; mp = cork_mempool_new_ex(int64_t, BLOCK_SIZE); - cork_mempool_set_callbacks - (mp, &done_call_count, NULL, int64_init, int64_done); + cork_mempool_set_user_data(mp, &done_call_count, NULL); + cork_mempool_set_init_object(mp, int64_init); + cork_mempool_set_done_object(mp, int64_done); int64_t *obj; fail_if((obj = cork_mempool_new_object(mp)) == NULL,