/* SPDX-License-Identifier: BSD-2-Clause OR GPL-2.0+ */
#ifndef __EROFS_LIB_XXHASH_H
#define __EROFS_LIB_XXHASH_H

#ifdef __cplusplus
extern "C"
{
#endif

#include <stdint.h>

/*
 * xxh32() - calculate the 32-bit hash of the input with a given seed.
 *
 * @input:  The data to hash.
 * @length: The length of the data to hash.
 * @seed:   The seed can be used to alter the result predictably.
 *
 * Return:  The 32-bit hash of the data.
 */
uint32_t xxh32(const void *input, size_t length, uint32_t seed);

/*
 * xxh64() - calculate the 64-bit hash of the input with a given seed.
 *
 * @input:  The data to hash.
 * @length: The length of the data to hash.
 * @seed:   The seed can be used to alter the result predictably.
 *
 * This function runs 2x faster on 64-bit systems, but slower on 32-bit systems.
 *
 * Return:  The 64-bit hash of the data.
 */
uint64_t xxh64(const void *input, const size_t len, const uint64_t seed);

#ifdef __cplusplus
}
#endif

#endif
