rockbox/firmware/include/core_alloc.h
Thomas Martitz af4e408555 buflib: Change buflib_available() and add buflib_allocatable().
buflib_allocatable() is what buflib_available() was before (it was in fact
simply renamed). It returns the largest contiguous block of memory. This
can be allocated and will definitely succeed, although larger allocations
may also succeed if the buffer can be compacted and shrinked.

buflib_available() now counts all free bytes, contiguous or not. This
better matches the description and how the caller use it.

Change-Id: I511e4eb5f4cf1821d957b3f4ef8a685ce40fe289
Reviewed-on: http://gerrit.rockbox.org/481
Reviewed-by: Thomas Martitz <kugel@rockbox.org>
Tested-by: Thomas Martitz <kugel@rockbox.org>
2013-07-07 10:46:07 +02:00

49 lines
1.5 KiB
C

#ifndef __CORE_ALLOC_H__
#define __CORE_ALLOC_H__
#include <string.h>
#include <stdbool.h>
#include "config.h"
#include "buflib.h"
/* All functions below are wrappers for functions in buflib.h, except
* they have a predefined context
*/
void core_allocator_init(void) INIT_ATTR;
int core_alloc(const char* name, size_t size);
int core_alloc_ex(const char* name, size_t size, struct buflib_callbacks *ops);
int core_alloc_maximum(const char* name, size_t *size, struct buflib_callbacks *ops);
bool core_shrink(int handle, void* new_start, size_t new_size);
int core_free(int handle);
size_t core_available(void);
size_t core_allocatable(void);
/* DO NOT ADD wrappers for buflib_buffer_out/in. They do not call
* the move callbacks and are therefore unsafe in the core */
#ifdef BUFLIB_DEBUG_BLOCKS
void core_print_allocs(void (*print)(const char*));
void core_print_blocks(void (*print)(const char*));
#endif
#ifdef BUFLIB_DEBUG_BLOCK_SINGLE
int core_get_num_blocks(void);
void core_print_block_at(int block_num, char* buf, size_t bufsize);
#endif
/* frees the debug test alloc created at initialization,
* since this is the first any further alloc should force a compaction run */
bool core_test_free(void);
static inline void* core_get_data(int handle)
{
extern struct buflib_context core_ctx;
return buflib_get_data(&core_ctx, handle);
}
static inline const char* core_get_name(int handle)
{
extern struct buflib_context core_ctx;
return buflib_get_name(&core_ctx, handle);
}
#endif /* __CORE_ALLOC_H__ */