blob: 4b873448bbdb2109590c60dbbc4b3ffda3a5f2da [file] [log] [blame] [raw]
/*
copyright: Boaz segev, 2015
license: MIT
Feel free to copy, use and enjoy according to the license provided.
*/
#ifndef HTTP_OBJECT_POOL_H
#define HTTP_OBJECT_POOL_H
#define LIB_OBJECT_POOL_VERSION 0.1.0
typedef struct ObjectPool* object_pool;
extern struct __Object_Pool_API__ {
/**
Initialize a new ObjectPool that grows when there aren't available objects.
void* (*create)(void* arg):: a callback that returns a new object instance.
void* (*destroy)(void* object):: a callback that destroys an object.
void* arg:: a pointer that will be passed to the `create` callback.
size:: the (initial) number of items in the pool.
*/
void* (*new_dynamic)(void* (*create)(void),
void (*destroy)(void* object),
int size);
/**
Initialize a new ObjectPool that blocks and waits when there aren't any
available objects.
void* (*create)(void* arg):: a callback that returns a new object instance.
void* (*destroy)(void* object):: a callback that destroys an object.
void* arg:: a pointer that will be passed to the `create` callback.
size:: the (initial) number of items in the pool.
*/
void* (*new_blocking)(void* (*create)(void),
void (*destroy)(void* object),
int size);
/**
Destroys the pool object and any items in the pool.
*/
void (*destroy)(object_pool pool);
/**
Grabs an object from the pool, removing it from the pool's
registry.
The object will be removed from the pool until returned using `ObjectPool.push`.
*/
void* (*pop)(object_pool pool);
/**
Returns an object (or pushes a new object) to the pool, making it available for
future `ObjectPool.pop` calls.
*/
void (*push)(object_pool, void* object);
/**
Returns the (approximate) number of objects available the pool.
*/
int (*count)(object_pool pool);
} ObjectPool;
#endif /* end of include guard: HTTP_OBJECT_POOL_H */