recycler

Name

recycler -- 

Synopsis



recycler_t* RecyclerCreate                  (size_t ChunkSize,
                                             unsigned int ChunksMax);
int         RecyclerDestroy                 (recycler_t *Recycler,
                                             int Force);
int         RecyclerGrow                    (recycler_t *Recycler,
                                             unsigned int ChunksCount);
int         RecyclerShrink                  (recycler_t *Recycler,
                                             unsigned int ChunksCount);
void*       RecyclerGetChunk                (recycler_t *Recycler);
void        RecyclerLockChunk               (const void *Data);
void        RecyclerReleaseChunk            (const void *Data);
int         RecyclerIsLocked                (const void *data);
#define     RecyclerGetChunksMax            (recycler)
#define     RecyclerGetChunksCount          (recycler)
#define     RecyclerHasFreeChunks           (recycler)

Description

Details

RecyclerCreate ()

recycler_t* RecyclerCreate                  (size_t ChunkSize,
                                             unsigned int ChunksMax);

Create a recycler. It will be capable to handle ChunksMax elements of size ChunkSize bytes.

ChunkSize : The size of one element
ChunksMax : The number of element to be created
Returns : An handle or NULL for error (see errno in this case).


RecyclerDestroy ()

int         RecyclerDestroy                 (recycler_t *Recycler,
                                             int Force);

Liberate the memory used by a recycler. After this function return, the passed handle is invalid. Force tell RecyclerDestroy() to free the recycler even if it is not empty.

Recycler : A recycler
Force : A boolean
Returns : 0 for success, -1 for error, with errno == EINVAL(bad handle), ENOTEMPTY(some chunk were not released).


RecyclerGrow ()

int         RecyclerGrow                    (recycler_t *Recycler,
                                             unsigned int ChunksCount);

Add ChunksCount new free elements to a recycler.

Recycler : A recycler to grow
ChunksCount : Number of new element
Returns : 0 on succes, or -1 on error (see errno).


RecyclerShrink ()

int         RecyclerShrink                  (recycler_t *Recycler,
                                             unsigned int ChunksCount);

Remove ChunksCount new free elements to a recycler. Be carefull: the element returned by the last RecyclerGetChunk() call will be free if it wasn't locked.

Recycler : A recycler to shrink
ChunksCount : Number of elements to remove.
Returns : 0 for success, -1 for error (see errno).


RecyclerGetChunk ()

void*       RecyclerGetChunk                (recycler_t *Recycler);

The returned element isn't locked: a second call to RecyclerGetChunk() without a call to RecyclerLockChunk() will return the same element.

Recycler : A recycler to get a chunk from


RecyclerLockChunk ()

void        RecyclerLockChunk               (const void *Data);

Lock a recycler element to avoid it to be reused.

Data : The data to be locked.


RecyclerReleaseChunk ()

void        RecyclerReleaseChunk            (const void *Data);

Liberate an element from recycler for it to be reused.

Data : An element to be released


RecyclerIsLocked ()

int         RecyclerIsLocked                (const void *data);

data : Data from a recycler
Returns : How many reference to this chunk exist.


RecyclerGetChunksMax()

#define RecyclerGetChunksMax(recycler) recycler->max

recycler : 


RecyclerGetChunksCount()

#define RecyclerGetChunksCount(recycler) recycler->count

recycler : 


RecyclerHasFreeChunks()

#define RecyclerHasFreeChunks(recycler) (Recycler->freelist != NULL)

recycler :