XCache is a fast, stable PHP opcode cacher that has been proven and is now running on production servers under high load.
https://xcache.lighttpd.net/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.9 KiB
73 lines
2.9 KiB
#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 */
|
|
|