// Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved.
// This source file is part of the Cangjie project, licensed under Apache-2.0
// with Runtime Library Exception.
//
// See https://cangjie-lang.cn/pages/LICENSE for license information.

// The Cangjie API is in Beta. For details on its capabilities and limitations, please refer to the README file.


#ifndef HASH_UTILS_H
#define HASH_UTILS_H

#include "Base/CString.h"
#include "Base/Types.h"
namespace MapleRuntime {

struct HashString {
    // 211 is a proper prime, which can reduce the conflict rate.
    const U32 properPrime = 211;
    
    size_t operator()(const char* key) const
    {
        U32 hash = 0;
        while ((*key) != '\0') {
            U32 keyChar = *key;
            hash = hash * properPrime + keyChar;
            key += 1;
        }
        return hash;
    }
};
struct EqualString {
    bool operator()(const char* lhs, const char* rhs) const { return strcmp(lhs, rhs) == 0; }
};

} // namespace MapleRuntime

#endif // MRT_BASE_LOG_H