system: Linux mars.sprixweb.com 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
#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 */