root/src/add-ons/kernel/file_systems/packagefs/util/StringKey.h
/*
 * Copyright 2013, Ingo Weinhold, ingo_weinhold@gmx.de.
 * Distributed under the terms of the MIT License.
 */
#ifndef STRING_KEY_H
#define STRING_KEY_H


#include "String.h"


class StringKey {
public:
        StringKey(const ::String& string)
                :
                fString(string.Data()),
                fHash(string.Hash())
        {
        }

        explicit StringKey(const char* string)
                :
                fString(string),
                fHash(hash_hash_string(string))
        {
        }

        const char* String() const
        {
                return fString;
        }

        uint32 Hash() const
        {
                return fHash;
        }

        inline int Compare(const ::StringKey& other) const
        {
                if (fHash == other.fHash) {
                        if (fString == other.fString)
                                return 0;
                        return strcmp(fString, other.fString);
                }
                return (fHash < other.fHash) ? -1 : 1;
        }

        bool operator==(const ::String& other) const
        {
                return Compare(StringKey(other)) == 0;
        }

        bool operator!=(const ::String& other) const
        {
                return !(*this == other);
        }

private:
        const char*     fString;
        uint32          fHash;
};


#endif  // STRING_KEY_H