diff options
author | Max Horn | 2006-07-30 12:21:54 +0000 |
---|---|---|
committer | Max Horn | 2006-07-30 12:21:54 +0000 |
commit | 53f73eac8569010ccddfeebeddcdb2619b2616aa (patch) | |
tree | 542e09fc5045ea616390d07f6543dfb32845df98 /common/hash-str.h | |
parent | bd49091afd55cf2663095a1882bab34496ef01f0 (diff) | |
download | scummvm-rg350-53f73eac8569010ccddfeebeddcdb2619b2616aa.tar.gz scummvm-rg350-53f73eac8569010ccddfeebeddcdb2619b2616aa.tar.bz2 scummvm-rg350-53f73eac8569010ccddfeebeddcdb2619b2616aa.zip |
Added explicit string equals/hash functors to a new header common/hash-str.h; removed Hash functor specialization for String and char pointers; changed all code using hashmaps with string keys to explicitly specify whether they honor or ignore case
svn-id: r23634
Diffstat (limited to 'common/hash-str.h')
-rw-r--r-- | common/hash-str.h | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/common/hash-str.h b/common/hash-str.h new file mode 100644 index 0000000000..bb61e3091d --- /dev/null +++ b/common/hash-str.h @@ -0,0 +1,79 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2002-2006 The ScummVM project + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + */ + +#ifndef COMMON_HASH_STR_H +#define COMMON_HASH_STR_H + +#include "common/hashmap.h" +#include "common/str.h" + +namespace Common { + +uint hashit(const char *str); +uint hashit_lower(const char *str); // Generate a hash based on the lowercase version of the string + + +// FIXME: The following functors obviously are not consistently named + +struct CaseSensitiveString_EqualTo { + bool operator()(const String& x, const String& y) const { return strcmp(x.c_str(), y.c_str()) == 0; } +}; + +struct CaseSensitiveString_Hash { + uint operator()(const String& x) const { return hashit(x.c_str()); } +}; + + +struct IgnoreCase_EqualTo { + bool operator()(const String& x, const String& y) const { return scumm_stricmp(x.c_str(), y.c_str()) == 0; } +}; + +struct IgnoreCase_Hash { + uint operator()(const String& x) const { return hashit_lower(x.c_str()); } +}; + + + +typedef HashMap<String, String, IgnoreCase_Hash, IgnoreCase_EqualTo> StringMap; + + +#if 0 +// Specalization of the Hash functor for String objects. +template <> +struct Hash<String> { + uint operator()(const String& s) const { + return hashit(s.c_str()); + } +}; + +template <> +struct Hash<const char *> { + uint operator()(const char *s) const { + return hashit(s); + } +}; +#endif + + +} // End of namespace Common + + +#endif |