#ifndef ZABBIX_ZBXALGO_H
#define ZABBIX_ZBXALGO_H
#include "zbxnum.h"
#include "log.h"
typedef zbx_uint32_t zbx_hash_t;
zbx_hash_t zbx_hash_modfnv(const void *data, size_t len, zbx_hash_t seed);
zbx_hash_t zbx_hash_splittable64(const void *data);
#define ZBX_DEFAULT_HASH_ALGO zbx_hash_modfnv
#define ZBX_DEFAULT_PTR_HASH_ALGO zbx_hash_modfnv
#define ZBX_DEFAULT_UINT64_HASH_ALGO zbx_hash_modfnv
#define ZBX_DEFAULT_STRING_HASH_ALGO zbx_hash_modfnv
typedef zbx_hash_t (*zbx_hash_func_t)(const void *data);
zbx_hash_t zbx_default_ptr_hash_func(const void *data);
zbx_hash_t zbx_default_string_hash_func(const void *data);
zbx_hash_t zbx_default_uint64_pair_hash_func(const void *data);
#define ZBX_DEFAULT_HASH_SEED 0
#define ZBX_DEFAULT_PTR_HASH_FUNC zbx_default_ptr_hash_func
#define ZBX_DEFAULT_UINT64_HASH_FUNC zbx_hash_splittable64
#define ZBX_DEFAULT_STRING_HASH_FUNC zbx_default_string_hash_func
#define ZBX_DEFAULT_UINT64_PAIR_HASH_FUNC zbx_default_uint64_pair_hash_func
typedef int (*zbx_compare_func_t)(const void *d1, const void *d2);
int zbx_default_int_compare_func(const void *d1, const void *d2);
int zbx_default_uint64_compare_func(const void *d1, const void *d2);
int zbx_default_uint64_ptr_compare_func(const void *d1, const void *d2);
int zbx_default_str_compare_func(const void *d1, const void *d2);
int zbx_default_str_ptr_compare_func(const void *d1, const void *d2);
int zbx_natural_str_compare_func(const void *d1, const void *d2);
int zbx_default_ptr_compare_func(const void *d1, const void *d2);
int zbx_default_uint64_pair_compare_func(const void *d1, const void *d2);
int zbx_default_dbl_compare_func(const void *d1, const void *d2);
#define ZBX_DEFAULT_INT_COMPARE_FUNC zbx_default_int_compare_func
#define ZBX_DEFAULT_UINT64_COMPARE_FUNC zbx_default_uint64_compare_func
#define ZBX_DEFAULT_UINT64_PTR_COMPARE_FUNC zbx_default_uint64_ptr_compare_func
#define ZBX_DEFAULT_STR_COMPARE_FUNC zbx_default_str_compare_func
#define ZBX_DEFAULT_STR_PTR_COMPARE_FUNC zbx_default_str_ptr_compare_func
#define ZBX_DEFAULT_PTR_COMPARE_FUNC zbx_default_ptr_compare_func
#define ZBX_DEFAULT_UINT64_PAIR_COMPARE_FUNC zbx_default_uint64_pair_compare_func
#define ZBX_DEFAULT_DBL_COMPARE_FUNC zbx_default_dbl_compare_func
typedef void *(*zbx_mem_malloc_func_t)(void *old, size_t size);
typedef void *(*zbx_mem_realloc_func_t)(void *old, size_t size);
typedef void (*zbx_mem_free_func_t)(void *ptr);
void *zbx_default_mem_malloc_func(void *old, size_t size);
void *zbx_default_mem_realloc_func(void *old, size_t size);
void zbx_default_mem_free_func(void *ptr);
#define ZBX_DEFAULT_MEM_MALLOC_FUNC zbx_default_mem_malloc_func
#define ZBX_DEFAULT_MEM_REALLOC_FUNC zbx_default_mem_realloc_func
#define ZBX_DEFAULT_MEM_FREE_FUNC zbx_default_mem_free_func
typedef void (*zbx_clean_func_t)(void *data);
#define ZBX_RETURN_IF_NOT_EQUAL(a, b) \
\
if ((a) < (b)) \
return -1; \
if ((a) > (b)) \
return +1