#ifndef DEVICE_CTRL_HASH_UTIL_H
#define DEVICE_CTRL_HASH_UTIL_H
#include <cwchar>
#include <memory>

namespace zsy::HashUtil
{
    /**
     * 哈希组合函数，用于混合多个哈希值
     * @tparam T 哈希值类型
     * @param seed 初始种子值
     * @param value 要组合的哈希值
     */
    template<typename T>
    void hash_combine(std::size_t &seed, const T &value) noexcept
    {
        // 核心逻辑：
        // 1. std::hash<T>()(value) 获取value的原始哈希值
        // 2. 旋转移位+异或，混合种子与原始哈希值
        // 3. 乘以黄金分割比（0x9e3779b9），分散比特位，减少冲突
        std::hash<T> hasher;
        seed ^= hasher(value) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
    }
}

#endif //DEVICE_CTRL_HASH_UTIL_H
