#ifndef ACL_MEM_HOOK_INCLUDE_H
#define ACL_MEM_HOOK_INCLUDE_H

#ifdef __cplusplus
extern "C" {
#endif

#include "acl_define.h"

/**
 * 设置内存分配、释放的注册函数，当ACL内部分配释放内存时便调用这些注册的函数
 * 在调用此函数进行注册时必须保证这几个函数指针参数均非空
 * @param malloc_hook {void *(*)(const char* fname, int lineno, size_t)}
 * @param calloc_hook {void *(*)(const char* fname, int lineno, size_t, size_t)}
 * @param realloc_hook {void *(*)(const char* fname, int lineno, void *, size_t)}
 * @param strdup_hook {void *(*)(const char* fname, int lineno, const char*)}
 * @param strndup_hook {void *(*)(const char* fname, int lineno, const char*, size_t)}
 * @param memdup_hook {void *(*)(const char* fname, int lineno, const void *, size_t)}
 * @param free_hook {void (*)(const char* fname, int lineno, void*)}
 */
ACL_API void acl_mem_hook(void *(*malloc_hook)(const char*, int, size_t),
		void *(*calloc_hook)(const char*, int, size_t, size_t),
		void *(*realloc_hook)(const char*, int, void*, size_t),
		char *(*strdup_hook)(const char*, int, const char*),
		char *(*strndup_hook)(const char*, int, const char*, size_t),
		void *(*memdup_hook)(const char*, int, const void*, size_t),
		void  (*free_hook)(const char*, int, void*));

/**
 * 取消之前设置的内存勾子函数，恢复为缺省状态
 */
ACL_API void acl_mem_unhook(void);

#ifdef __cplusplus
}
#endif

#endif
