Add utility functions to create libab instances on the heap.

This commit is contained in:
Danila Fedorin 2018-08-12 00:46:37 -07:00
parent de0ad13785
commit 0065fe5e65
2 changed files with 34 additions and 0 deletions

View File

@ -187,5 +187,19 @@ void* libab_unwrap_param(libab_ref_vec* vec, size_t index);
* @param buffer_size the size of the to buffer. * @param buffer_size the size of the to buffer.
*/ */
void libab_sanitize(char* to, const char* from, size_t buffer_size); void libab_sanitize(char* to, const char* from, size_t buffer_size);
/**
* Creates a new instance of libabacus allocated on the heap.
* @param into the pointer into which to store the newly allocated libab instance.
* @param parse_function the function used to parse numbers.
* @param free_function the function used to free parsed numbers.
*/
libab_result libab_create_instance(libab** into,
void* (*parse_function)(const char*),
void (*free_function)(void*));
/**
* Destroys the given libabacus instance allocated on the stack.
* @param into the reference to destroy.
*/
void libab_destroy_instance(libab* into);
#endif #endif

View File

@ -481,3 +481,23 @@ void libab_sanitize(char* to, const char* from, size_t buffer_size) {
} }
to[index] = '\0'; to[index] = '\0';
} }
libab_result libab_create_instance(libab** into,
void* (*parse_function)(const char*),
void (*free_function)(void*)) {
libab_result result = LIBAB_SUCCESS;
if((*into = malloc(sizeof(**into)))) {
result = libab_init(*into, parse_function, free_function);
if(result != LIBAB_SUCCESS) {
free(*into);
*into = NULL;
}
} else {
result = LIBAB_MALLOC;
}
return result;
}
void libab_destroy_instance(libab* into) {
libab_free(into);
free(into);
}