#ifndef LIBPMEMCTO_H
#define LIBPMEMCTO_H 1
#ifdef _WIN32
#include <pmemcompat.h>
#ifndef PMDK_UTF8_API
#define pmemcto_open pmemcto_openW
#define pmemcto_create pmemcto_createW
#define pmemcto_check pmemcto_checkW
#define pmemcto_check_version pmemcto_check_versionW
#define pmemcto_errormsg pmemcto_errormsgW
#else
#define pmemcto_open pmemcto_openU
#define pmemcto_create pmemcto_createU
#define pmemcto_check pmemcto_checkU
#define pmemcto_check_version pmemcto_check_versionU
#define pmemcto_errormsg pmemcto_errormsgU
#endif
#endif
#ifdef __cplusplus
extern "C" {
#endif
#include <sys/types.h>
#include <wchar.h>
typedef struct pmemcto PMEMctopool;
#define PMEMCTO_MAJOR_VERSION 1
#define PMEMCTO_MINOR_VERSION 0
#ifndef _WIN32
const char *pmemcto_check_version(unsigned major_required,
unsigned minor_required);
#else
const char *pmemcto_check_versionU(unsigned major_required,
unsigned minor_required);
const wchar_t *pmemcto_check_versionW(unsigned major_required,
unsigned minor_required);
#endif
#define PMEMCTO_MIN_POOL ((size_t)(1024 * 1024 * 16))
#define PMEMCTO_MIN_PART ((size_t)(1024 * 1024 * 2))
#define PMEMCTO_MAX_LAYOUT ((size_t)1024)
#ifndef _WIN32
PMEMctopool *pmemcto_open(const char *path, const char *layout);
#else
PMEMctopool *pmemcto_openU(const char *path, const char *layout);
PMEMctopool *pmemcto_openW(const wchar_t *path, const wchar_t *layout);
#endif
#ifndef _WIN32
PMEMctopool *pmemcto_create(const char *path, const char *layout,
size_t poolsize, mode_t mode);
#else
PMEMctopool *pmemcto_createU(const char *path, const char *layout,
size_t poolsize, mode_t mode);
PMEMctopool *pmemcto_createW(const wchar_t *path, const wchar_t *layout,
size_t poolsize, mode_t mode);
#endif
#ifndef _WIN32
int pmemcto_check(const char *path, const char *layout);
#else
int pmemcto_checkU(const char *path, const char *layout);
int pmemcto_checkW(const wchar_t *path, const wchar_t *layout);
#endif
void pmemcto_close(PMEMctopool *pcp);
void pmemcto_stats_print(PMEMctopool *pcp, const char *opts);
void *pmemcto_malloc(PMEMctopool *pcp, size_t size);
void pmemcto_free(PMEMctopool *pcp, void *ptr);
void *pmemcto_calloc(PMEMctopool *pcp, size_t nmemb, size_t size);
void *pmemcto_realloc(PMEMctopool *pcp, void *ptr, size_t size);
void *pmemcto_aligned_alloc(PMEMctopool *pcp, size_t alignment, size_t size);
char *pmemcto_strdup(PMEMctopool *pcp, const char *s);
wchar_t *pmemcto_wcsdup(PMEMctopool *pcp, const wchar_t *s);
size_t pmemcto_malloc_usable_size(PMEMctopool *pcp, void *ptr);
void pmemcto_set_root_pointer(PMEMctopool *pcp, void *ptr);
void *pmemcto_get_root_pointer(PMEMctopool *pcp);
void pmemcto_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 *pmemcto_errormsg(void);
#else
const char *pmemcto_errormsgU(void);
const wchar_t *pmemcto_errormsgW(void);
#endif
#ifdef __cplusplus
}
#endif
#endif