int freelist_new( struct freelist_state **fs, atom_t number_elements, int (*user_data_init_function)(void **user_data, void *user_state), void *user_state );
struct freelist_state **fs
- The address of a pointer onto which is allocated the state which represents this freelist. The pointer is set to NULL if freelist creation fails.
- The maximum number of elements which can be present in the freelist. These elements will be allocated when the freelist is created. If not all elements could be allocated (malloc() fails, or user_data_init_function returns an error), freelist creation fails.
int (*user_data_init_function)(void **user_data, void *user_state)
- This is a callback function, which can be NULL. Each element in the freelist contains as its payload a single void pointer, which the user can set to any value (typically, it points to state the user has allocated). When the freelist is created, this callback function will be called for each element, where the address of the user data void pointer is provided to the user, for example, to have memory allocated onto it. This function must return 1 on successful initialisation and 0 on failure.
- This is passed to each call of user_data_init_function as the second argument to that function. The user is expected to use this to pass state information into his initialisation function. For example, if to initialise freelist elements, a lookup must occur into another data structure, that data structure can be made visible in the initialisation function by being passed in via this argument.
Returns 1 on success and 0 on failure, with *fs being set to NULL on failure.
This function instantiates a freelist. The values of user_data_init_function and user_state are stored in the freelist state and are re-used when freelist_new_elements is called.