#ifndef LIBVMEM_H
#define LIBVMEM_H 1
#ifdef _WIN32
#ifndef PMDK_UTF8_API
#define vmem_create vmem_createW
#define vmem_check_version vmem_check_versionW
#define vmem_errormsg vmem_errormsgW
#else
#define vmem_create vmem_createU
#define vmem_check_version vmem_check_versionU
#define vmem_errormsg vmem_errormsgU
#endif
#endif
#ifdef __cplusplus
extern "C" {
#endif
#include <sys/types.h>
#include <stddef.h>
typedef struct vmem VMEM;
#define VMEM_MIN_POOL ((size_t)(1024 * 1024 * 14))
#ifndef _WIN32
VMEM *vmem_create(const char *dir, size_t size);
#else
VMEM *vmem_createU(const char *dir, size_t size);
VMEM *vmem_createW(const wchar_t *dir, size_t size);
#endif
VMEM *vmem_create_in_region(void *addr, size_t size);
void vmem_delete(VMEM *vmp);
int vmem_check(VMEM *vmp);
void vmem_stats_print(VMEM *vmp, const char *opts);
void *vmem_malloc(VMEM *vmp, size_t size);
void vmem_free(VMEM *vmp, void *ptr);
void *vmem_calloc(VMEM *vmp, size_t nmemb, size_t size);
void *vmem_realloc(VMEM *vmp, void *ptr, size_t size);
void *vmem_aligned_alloc(VMEM *vmp, size_t alignment, size_t size);
char *vmem_strdup(VMEM *vmp, const char *s);
wchar_t *vmem_wcsdup(VMEM *vmp, const wchar_t *s);
size_t vmem_malloc_usable_size(VMEM *vmp, void *ptr);
#define VMEM_MAJOR_VERSION 1
#define VMEM_MINOR_VERSION 1
#ifndef _WIN32
const char *vmem_check_version(unsigned major_required,
unsigned minor_required);
#else
const char *vmem_check_versionU(unsigned major_required,
unsigned minor_required);
const wchar_t *vmem_check_versionW(unsigned major_required,
unsigned minor_required);
#endif
void vmem_set_funcs(
void *(*malloc_func)(size_t size),
void (*free_func)(void *ptr),
void *(*realloc_func)(void *ptr, size_t size),
char *(*strdup_func)(const char *s),
void (*print_func)(const char *s));
#ifndef _WIN32
const char *vmem_errormsg(void);
#else
const char *vmem_errormsgU(void);
const wchar_t *vmem_errormsgW(void);
#endif
#ifdef __cplusplus
}
#endif
#endif