2004-03-03 00:56:51 +01:00
|
|
|
#ifndef MEM_H
|
|
|
|
#define MEM_H
|
|
|
|
|
2004-10-06 16:00:43 +02:00
|
|
|
#include "handle.h"
|
2004-03-03 00:56:51 +01:00
|
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
2005-12-11 23:23:55 +01:00
|
|
|
typedef void (*MEM_DTOR)(void* p, size_t size, uintptr_t ctx);
|
2004-03-03 00:56:51 +01:00
|
|
|
|
|
|
|
// mem_alloc flags
|
|
|
|
enum
|
|
|
|
{
|
|
|
|
// RES_*
|
|
|
|
|
|
|
|
MEM_ZERO = 0x1000
|
|
|
|
};
|
|
|
|
|
2004-06-01 19:34:12 +02:00
|
|
|
extern void* mem_alloc(size_t size, size_t align = 1, uint flags = 0, Handle* ph = 0);
|
2004-03-03 00:56:51 +01:00
|
|
|
|
|
|
|
#define mem_free(p) mem_free_p((void*&)p)
|
2005-12-11 23:23:55 +01:00
|
|
|
extern LibError mem_free_p(void*& p);
|
2004-03-03 00:56:51 +01:00
|
|
|
|
2005-12-11 23:23:55 +01:00
|
|
|
extern LibError mem_free_h(Handle& hm);
|
2004-03-03 00:56:51 +01:00
|
|
|
|
|
|
|
// returns 0 if the handle is invalid
|
|
|
|
extern void* mem_get_ptr(Handle h, size_t* size = 0);
|
|
|
|
|
2005-12-11 23:23:55 +01:00
|
|
|
extern LibError mem_get(Handle hm, u8** pp, size_t* psize);
|
2004-03-03 00:56:51 +01:00
|
|
|
|
2005-10-12 17:09:32 +02:00
|
|
|
|
2005-10-21 09:47:38 +02:00
|
|
|
extern Handle mem_wrap(void* p, size_t size, uint flags, void* raw_p, size_t raw_size, MEM_DTOR dtor, uintptr_t ctx, void* owner);
|
2005-10-12 17:09:32 +02:00
|
|
|
|
|
|
|
// exception to normal resource shutdown: must not be called before
|
|
|
|
// h_mgr_shutdown! (this is because h_mgr calls us to free memory, which
|
|
|
|
// requires the pointer -> Handle index still be in place)
|
2005-01-23 18:54:20 +01:00
|
|
|
extern void mem_shutdown(void);
|
2005-01-07 02:13:48 +01:00
|
|
|
|
2005-09-02 05:03:06 +02:00
|
|
|
|
2005-10-12 17:09:32 +02:00
|
|
|
|
2005-09-02 05:03:06 +02:00
|
|
|
|
2005-10-12 06:35:01 +02:00
|
|
|
|
2004-03-03 00:56:51 +01:00
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif // #ifndef MEM_H
|