You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.9 KiB
C
74 lines
2.9 KiB
C
#ifndef XC_ALLOCATOR_H_155E773CA8AFC18F3CCCDCF0831EE41D
|
|
#define XC_ALLOCATOR_H_155E773CA8AFC18F3CCCDCF0831EE41D
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif /* _MSC_VER > 1000 */
|
|
|
|
#include "xc_shm.h"
|
|
|
|
typedef struct _xc_allocator_vtable_t xc_allocator_vtable_t;
|
|
|
|
#ifndef _xc_allocator_t
|
|
struct _xc_allocator_t {
|
|
const xc_allocator_vtable_t *vtable;
|
|
xc_shm_t *shm;
|
|
};
|
|
#endif
|
|
|
|
typedef struct _xc_allocator_t xc_allocator_t;
|
|
typedef struct _xc_allocator_block_t xc_allocator_block_t;
|
|
typedef xc_shmsize_t xc_memsize_t;
|
|
|
|
/* allocator */
|
|
#define XC_ALLOCATOR_MALLOC(func) void *func(xc_allocator_t *allocator, xc_memsize_t size)
|
|
#define XC_ALLOCATOR_FREE(func) xc_memsize_t func(xc_allocator_t *allocator, const void *p)
|
|
#define XC_ALLOCATOR_CALLOC(func) void *func(xc_allocator_t *allocator, xc_memsize_t memb, xc_memsize_t size)
|
|
#define XC_ALLOCATOR_REALLOC(func) void *func(xc_allocator_t *allocator, const void *p, xc_memsize_t size)
|
|
#define XC_ALLOCATOR_AVAIL(func) xc_memsize_t func(const xc_allocator_t *allocator)
|
|
#define XC_ALLOCATOR_SIZE(func) xc_memsize_t func(const xc_allocator_t *allocator)
|
|
#define XC_ALLOCATOR_FREEBLOCK_FIRST(func) const xc_allocator_block_t *func(const xc_allocator_t *allocator)
|
|
#define XC_ALLOCATOR_FREEBLOCK_NEXT(func) const xc_allocator_block_t *func(const xc_allocator_block_t *block)
|
|
#define XC_ALLOCATOR_BLOCK_SIZE(func) xc_memsize_t func(const xc_allocator_block_t *block)
|
|
#define XC_ALLOCATOR_BLOCK_OFFSET(func) xc_memsize_t func(const xc_allocator_t *allocator, const xc_allocator_block_t *block)
|
|
|
|
#define XC_ALLOCATOR_INIT(func) xc_allocator_t *func(xc_shm_t *shm, xc_allocator_t *allocator, xc_memsize_t size)
|
|
#define XC_ALLOCATOR_DESTROY(func) void func(xc_allocator_t *allocator)
|
|
|
|
#define XC_ALLOCATOR_VTABLE(name) { \
|
|
xc_##name##_malloc \
|
|
, xc_##name##_free \
|
|
, xc_##name##_calloc \
|
|
, xc_##name##_realloc \
|
|
, xc_##name##_avail \
|
|
, xc_##name##_size \
|
|
, xc_##name##_freeblock_first \
|
|
, xc_##name##_freeblock_next \
|
|
, xc_##name##_block_size \
|
|
, xc_##name##_block_offset \
|
|
\
|
|
, xc_##name##_init \
|
|
, xc_##name##_destroy \
|
|
}
|
|
|
|
struct _xc_allocator_vtable_t {
|
|
XC_ALLOCATOR_MALLOC((*malloc));
|
|
XC_ALLOCATOR_FREE((*free));
|
|
XC_ALLOCATOR_CALLOC((*calloc));
|
|
XC_ALLOCATOR_REALLOC((*realloc));
|
|
XC_ALLOCATOR_AVAIL((*avail));
|
|
XC_ALLOCATOR_SIZE((*size));
|
|
XC_ALLOCATOR_FREEBLOCK_FIRST((*freeblock_first));
|
|
XC_ALLOCATOR_FREEBLOCK_NEXT((*freeblock_next));
|
|
XC_ALLOCATOR_BLOCK_SIZE((*block_size));
|
|
XC_ALLOCATOR_BLOCK_OFFSET((*block_offset));
|
|
|
|
XC_ALLOCATOR_INIT((*init));
|
|
XC_ALLOCATOR_DESTROY((*destroy));
|
|
};
|
|
|
|
int xc_allocator_register(const char *name, const xc_allocator_vtable_t *allocator_vtable);
|
|
const xc_allocator_vtable_t *xc_allocator_find(const char *name);
|
|
|
|
#endif /* XC_ALLOCATOR_H_155E773CA8AFC18F3CCCDCF0831EE41D */
|