00001 /* ScummVM - Graphic Adventure Engine00002 *00003 * ScummVM is the legal property of its developers, whose names00004 * are too numerous to list here. Please refer to the COPYRIGHT00005 * file distributed with this source distribution.00006 *00007 * This program is free software; you can redistribute it and/or00008 * modify it under the terms of the GNU General Public License00009 * as published by the Free Software Foundation; either version 200010 * of the License, or (at your option) any later version.00011 *00012 * This program is distributed in the hope that it will be useful,00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the00015 * GNU General Public License for more details.00016 *00017 * You should have received a copy of the GNU General Public License00018 * along with this program; if not, write to the Free Software00019 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.00020 *00021 */00022
00023 #ifndef COMMON_HASH_STR_H00024 #define COMMON_HASH_STR_H00025
00026 #include "common/hashmap.h"00027 #include "common/str.h"00028
00029 namespace Common {
00030
00031 uinthashit(constchar *str);
00032 uinthashit_lower(constchar *str); // Generate a hash based on the lowercase version of the string00033inlineuinthashit(constString &str) { returnhashit(str.c_str()); }
00034inlineuinthashit_lower(constString &str) { returnhashit_lower(str.c_str()); }
00035
00036 // FIXME: The following functors obviously are not consistently named00037
00038struct CaseSensitiveString_EqualTo {
00039booloperator()(constString& x, constString& y) const { return x.equals(y); }
00040 };
00041
00042struct CaseSensitiveString_Hash {
00043uintoperator()(constString& x) const { returnhashit(x.c_str()); }
00044 };
00045
00046
00047struct IgnoreCase_EqualTo {
00048booloperator()(constString& x, constString& y) const { return x.equalsIgnoreCase(y); }
00049 };
00050
00051struct IgnoreCase_Hash {
00052uintoperator()(constString& x) const { returnhashit_lower(x.c_str()); }
00053 };
00054
00055 // Specalization of the Hash functor for String objects.00056 // We do case sensitve hashing here, because that is what00057 // the default EqualTo is compatible with. If one wants to use00058 // case insensitve hashing, then only because one wants to use00059 // IgnoreCase_EqualTo, and then one has to specify a custom00060 // hash anyway.00061 template<>
00062struct Hash<String> {
00063uintoperator()(constString& s) const {
00064 returnhashit(s.c_str());
00065 }
00066 };
00067
00068 template<>
00069struct Hash<const char *> {
00070uintoperator()(constchar *s) const {
00071 returnhashit(s);
00072 }
00073 };
00074
00075 // String map -- by default case insensitive00076typedefHashMap<String, String, IgnoreCase_Hash, IgnoreCase_EqualTo>StringMap;
00077
00078 } // End of namespace Common00079
00080 #endif
Generated on Sat Feb 16 2019 05:00:54 for ResidualVM by 1.7.1