[Scummvm-cvs-logs] SF.net SVN: scummvm: [23634] scummvm/trunk/gui

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Sun Jul 30 14:22:10 CEST 2006


Revision: 23634
Author:   fingolfin
Date:     2006-07-30 05:21:54 -0700 (Sun, 30 Jul 2006)
ViewCVS:  http://svn.sourceforge.net/scummvm/?rev=23634&view=rev

Log Message:
-----------
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

Modified Paths:
--------------
    scummvm/trunk/common/config-manager.h
    scummvm/trunk/common/file.cpp
    scummvm/trunk/common/hashmap.h
    scummvm/trunk/common/str.cpp
    scummvm/trunk/engines/saga/game.cpp
    scummvm/trunk/engines/simon/game.cpp
    scummvm/trunk/graphics/fontman.h
    scummvm/trunk/gui/eval.h

Added Paths:
-----------
    scummvm/trunk/common/hash-str.h
Modified: scummvm/trunk/common/config-manager.h
===================================================================
--- scummvm/trunk/common/config-manager.h	2006-07-30 12:17:51 UTC (rev 23633)
+++ scummvm/trunk/common/config-manager.h	2006-07-30 12:21:54 UTC (rev 23634)
@@ -29,23 +29,10 @@
 #include "common/hashmap.h"
 #include "common/singleton.h"
 #include "common/str.h"
+#include "common/hash-str.h"
 
 namespace Common {
 
-struct IgnoreCase_Less {
-  bool operator()(const String& x, const String& y) const { return scumm_stricmp(x.c_str(), y.c_str()) < 0; }
-};
-
-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;
-
 /**
  * The (singleton) configuration manager, used to query & set configuration
  * values using string keys.

Modified: scummvm/trunk/common/file.cpp
===================================================================
--- scummvm/trunk/common/file.cpp	2006-07-30 12:17:51 UTC (rev 23633)
+++ scummvm/trunk/common/file.cpp	2006-07-30 12:21:54 UTC (rev 23634)
@@ -24,6 +24,7 @@
 #include "common/fs.h"
 #include "common/hashmap.h"
 #include "common/util.h"
+#include "common/hash-str.h"
 
 #ifdef MACOSX
 #include "CoreFoundation/CoreFoundation.h"
@@ -31,14 +32,13 @@
 
 namespace Common {
 
-typedef HashMap<String, String> FilesMap;
-typedef HashMap<String, int> StringIntMap;
+typedef HashMap<String, int, CaseSensitiveString_Hash, CaseSensitiveString_EqualTo> StringIntMap;
 
 // The following two objects could be turned into static members of class
 // File. However, then we would be forced to #include hashmap in file.h
 // which seems to be a high price just for a simple beautification...
 static StringIntMap *_defaultDirectories;
-static FilesMap *_filesMap;
+static StringMap *_filesMap;
 
 static FILE *fopenNoCase(const String &filename, const String &directory, const char *mode) {
 	FILE *file;
@@ -142,7 +142,7 @@
 	(*_defaultDirectories)[directory] = level;
 
 	if (!_filesMap)
-		_filesMap = new FilesMap;
+		_filesMap = new StringMap;
 
 	for (FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) {
 		if (file->isDirectory()) {

Added: scummvm/trunk/common/hash-str.h
===================================================================
--- scummvm/trunk/common/hash-str.h	                        (rev 0)
+++ scummvm/trunk/common/hash-str.h	2006-07-30 12:21:54 UTC (rev 23634)
@@ -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


Property changes on: scummvm/trunk/common/hash-str.h
___________________________________________________________________
Name: svn:mime-type
   + text/plain
Name: svn:keywords
   + Date Rev Author URL Id
Name: svn:eol-style
   + native

Modified: scummvm/trunk/common/hashmap.h
===================================================================
--- scummvm/trunk/common/hashmap.h	2006-07-30 12:17:51 UTC (rev 23633)
+++ scummvm/trunk/common/hashmap.h	2006-07-30 12:21:54 UTC (rev 23634)
@@ -58,24 +58,6 @@
 
 namespace Common { 
 
-uint hashit(const char *str);
-uint hashit_lower(const char *str);	// Generate a hash based on the lowercase version of the string
-
-// 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);
-	}
-};
-
 // data structure used by HashMap internally to keep
 // track of what's mapped to what.
 template <class Key, class Val>
@@ -85,15 +67,6 @@
 	BaseNode() {}
 	BaseNode(const Key &key) : _key(key) {}
 };
-	
-template <class Val>
-struct BaseNode<const char *, Val> {
-	char *_key;
-	Val _value;
-	BaseNode() {assert(0);}
-	BaseNode(const char *key) { _key = (char *)malloc(strlen(key)+1); strcpy(_key, key); }
-	~BaseNode() { free(_key); }
-};
 
 // The table sizes ideally are primes. We use a helper function to find
 // suitable table sizes.

Modified: scummvm/trunk/common/str.cpp
===================================================================
--- scummvm/trunk/common/str.cpp	2006-07-30 12:17:51 UTC (rev 23633)
+++ scummvm/trunk/common/str.cpp	2006-07-30 12:21:54 UTC (rev 23634)
@@ -22,7 +22,7 @@
 #include "common/stdafx.h"
 
 #include "common/str.h"
-#include "common/hash.h"
+#include "common/hash-str.h"
 #include "common/util.h"
 
 #include <ctype.h>

Modified: scummvm/trunk/engines/saga/game.cpp
===================================================================
--- scummvm/trunk/engines/saga/game.cpp	2006-07-30 12:17:51 UTC (rev 23633)
+++ scummvm/trunk/engines/saga/game.cpp	2006-07-30 12:21:54 UTC (rev 23634)
@@ -30,6 +30,7 @@
 #include "common/fs.h"
 #include "common/md5.h"
 #include "common/hashmap.h"
+#include "common/hash-str.h"
 #include "common/config-manager.h"
 #include "base/plugins.h"
 
@@ -98,10 +99,10 @@
 	int gamesCount = ARRAYSIZE(gameDescriptions);
 	int filesCount;
 
-	typedef Common::HashMap<Common::String, bool> StringSet;
+	typedef Common::HashMap<Common::String, bool, Common::CaseSensitiveString_Hash, Common::CaseSensitiveString_EqualTo> StringSet;
 	StringSet filesList;
 
-	typedef Common::HashMap<Common::String, Common::String> StringMap;
+	typedef Common::StringMap StringMap;
 	StringMap filesMD5;
 
 	Common::String tstr;

Modified: scummvm/trunk/engines/simon/game.cpp
===================================================================
--- scummvm/trunk/engines/simon/game.cpp	2006-07-30 12:17:51 UTC (rev 23633)
+++ scummvm/trunk/engines/simon/game.cpp	2006-07-30 12:21:54 UTC (rev 23634)
@@ -29,6 +29,8 @@
 #include "common/file.h"
 #include "common/fs.h"
 #include "common/md5.h"
+#include "common/hashmap.h"
+#include "common/hash-str.h"
 
 #include "simon/simon.h"
 
@@ -1349,10 +1351,10 @@
 	int gamesCount = ARRAYSIZE(gameDescriptions);
 	int filesCount;
 
-	typedef Common::HashMap<Common::String, bool> StringSet;
+	typedef Common::HashMap<Common::String, bool, Common::CaseSensitiveString_Hash, Common::CaseSensitiveString_EqualTo> StringSet;
 	StringSet filesList;
 
-	typedef Common::HashMap<Common::String, Common::String> StringMap;
+	typedef Common::StringMap StringMap;
 	StringMap filesMD5;
 
 	Common::String tstr, tstr2;

Modified: scummvm/trunk/graphics/fontman.h
===================================================================
--- scummvm/trunk/graphics/fontman.h	2006-07-30 12:17:51 UTC (rev 23633)
+++ scummvm/trunk/graphics/fontman.h	2006-07-30 12:21:54 UTC (rev 23634)
@@ -27,6 +27,7 @@
 #include "common/singleton.h"
 #include "common/str.h"
 #include "common/hashmap.h"
+#include "common/hash-str.h"
 #include "graphics/font.h"
 
 
@@ -81,7 +82,7 @@
 	friend class Common::Singleton<SingletonBaseType>;
 	FontManager();
 
-	Common::HashMap<Common::String, const Font *> _fontMap;
+	Common::HashMap<Common::String, const Font *, Common::CaseSensitiveString_Hash, Common::CaseSensitiveString_EqualTo> _fontMap;
 };
 
 

Modified: scummvm/trunk/gui/eval.h
===================================================================
--- scummvm/trunk/gui/eval.h	2006-07-30 12:17:51 UTC (rev 23633)
+++ scummvm/trunk/gui/eval.h	2006-07-30 12:21:54 UTC (rev 23634)
@@ -26,6 +26,7 @@
 #include "common/stdafx.h"
 #include "common/str.h"
 #include "common/hashmap.h"
+#include "common/hash-str.h"
 
 namespace GUI {
 
@@ -68,14 +69,28 @@
 
 	char *lastToken() { return _token; }
 
+	
+	template <class Val>
+	struct CharStar_BaseNode {
+		char *_key;
+		Val _value;
+		CharStar_BaseNode() {assert(0);}
+		CharStar_BaseNode(const char *key) { _key = (char *)malloc(strlen(key)+1); strcpy(_key, key); }
+		~CharStar_BaseNode() { free(_key); }
+	};
+
 	struct CharStar_EqualTo {
 		bool operator()(const char *x, const char *y) const { return strcmp(x, y) == 0; }
 	};
 
+	struct CharStar_Hash {
+		uint operator()(const char *x) const { return Common::hashit(x); }
+	};
+
 	//typedef HashMap<String, int> VariablesMap;
-	typedef HashMap<const char *, int, Common::Hash<const char *>, CharStar_EqualTo> VariablesMap;
-	typedef HashMap<const char *, String, Common::Hash<const char *>, CharStar_EqualTo> AliasesMap;
-	typedef HashMap<const char *, String, Common::Hash<const char *>, CharStar_EqualTo> StringsMap;
+	typedef HashMap<const char *, int, CharStar_Hash, CharStar_EqualTo, CharStar_BaseNode<int> > VariablesMap;
+	typedef HashMap<const char *, String, CharStar_Hash, CharStar_EqualTo, CharStar_BaseNode<String> > AliasesMap;
+	typedef HashMap<const char *, String, CharStar_Hash, CharStar_EqualTo, CharStar_BaseNode<String> > StringsMap;
 
 private:
 	enum TokenTypes {


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.





More information about the Scummvm-git-logs mailing list