From: <kla...@us...> - 2012-12-05 02:16:23
|
Revision: 13455 http://vegastrike.svn.sourceforge.net/vegastrike/?rev=13455&view=rev Author: klaussfreire Date: 2012-12-05 02:16:17 +0000 (Wed, 05 Dec 2012) Log Message: ----------- mingw compatibility patch by log0 (adapted a bit) Modified Paths: -------------- trunk/vegastrike/src/cmd/unit_const_cache.cpp trunk/vegastrike/src/cmd/unit_const_cache.h trunk/vegastrike/src/gnuhash.h Modified: trunk/vegastrike/src/cmd/unit_const_cache.cpp =================================================================== --- trunk/vegastrike/src/cmd/unit_const_cache.cpp 2012-12-01 05:41:30 UTC (rev 13454) +++ trunk/vegastrike/src/cmd/unit_const_cache.cpp 2012-12-05 02:16:17 UTC (rev 13455) @@ -1,41 +1,4 @@ -#include <string> -#include <vector> -#include <gnuhash.h> - -#include "unit_generic.h" #include "unit_const_cache.h" -#if (!defined (__GNUC__ ) ) || !(defined (__GNUC__) && ( ( __GNUC__ == 3 && __GNUC_MINOR__ >= 4) || __GNUC__ > 3 ) ) -#if !defined (_WIN32) && __GNUC__ != 2 -vsUMap< StringIntKey, Unit*, ConstHasher >UnitConstCache::unit_cache; -vsUMap< std::string, Mesh*, ConstHasher >WeaponMeshCache::unit_cache; -#else -vsUMap< StringIntKey, Unit* >UnitConstCache::unit_cache; -vsUMap< std::string, Mesh* >WeaponMeshCache::unit_cache; -#endif -#endif -#if 0 -typedef vsUMap< keyval, Unit* >UnitCacheType; -static UnitCacheType unit_cache; -const Unit * getCachedConstUnit( std::string name, int faction ) -{ - keyval kv( name, faction ); - UnitCacheType::const_iterator i = unit_cache.find( kv ); - if ( i != unit_cache.end() ) - return (*i).second; - return NULL; -} -const Unit * setCachedConstUnit( std::string name, int faction, Unit *un ) -{ - unit_cache.insert( pair< keyval, Unit* > ( keyval( name, faction ), un ) ); - return un; -} -void purgeCache() -{ - UnitCacheType::iterator i = unit_cache.begin(); - for (; i != unit_cache.end(); ++i) - (*i).second->Kill(); - unit_cache.clear(); -} -#endif - +template<> UnitConstCache::cache_map UnitConstCache::unit_cache = UnitConstCache::cache_map(); +template<> WeaponMeshCache::cache_map WeaponMeshCache::unit_cache = WeaponMeshCache::cache_map(); Modified: trunk/vegastrike/src/cmd/unit_const_cache.h =================================================================== --- trunk/vegastrike/src/cmd/unit_const_cache.h 2012-12-01 05:41:30 UTC (rev 13454) +++ trunk/vegastrike/src/cmd/unit_const_cache.h 2012-12-05 02:16:17 UTC (rev 13455) @@ -1,11 +1,13 @@ #ifndef __UNIT_CONST_CACHE_H #define __UNIT_CONST_CACHE_H #include "config.h" +#include "hashtable.h" #include <string> #include <gnuhash.h> -#ifndef WIN32 + +class Mesh; class ConstHasher; -#endif + class StringIntKey { friend class ConstHasher; @@ -31,7 +33,7 @@ } }; -#if !defined (_WIN32) && __GNUC__ != 2 +#if HAVE_TR1_UNORDERED_MAP || (!defined (_WIN32) && __GNUC__ != 2) class ConstHasher { public: @@ -50,11 +52,12 @@ template < class Typ, class Key > class ClassCache { -#if !defined (_WIN32) && __GNUC__ != 2 - static vsUMap< Key, Typ*, ConstHasher >unit_cache; +#if HAVE_TR1_UNORDERED_MAP || (!defined (_WIN32) && __GNUC__ != 2) + typedef vsUMap< Key, Typ*, ConstHasher > cache_map; #else - static vsUMap< Key, Typ* >unit_cache; + typedef vsUMap< Key, Typ* > cache_map; #endif + static cache_map unit_cache; public: static const Typ * getCachedConst( Key k ) { @@ -62,11 +65,7 @@ } static Typ * getCachedMutable( const Key &k ) { -#if !defined (_WIN32) && __GNUC__ != 2 - typename vsUMap< Key, Typ*, ConstHasher >::iterator i = unit_cache.find( k ); -#else - typename vsUMap< Key, Typ* >::iterator i = unit_cache.find( k ); -#endif + typename cache_map::iterator i = unit_cache.find( k ); if ( i != unit_cache.end() ) return (*i).second; return NULL; @@ -82,18 +81,13 @@ } static void purgeCache( void (*Kill)( Typ *un ) ) { - typename vsUMap< Key, Typ*, ConstHasher >::iterator i = unit_cache.begin(); + typename cache_map::iterator i = unit_cache.begin(); for (; i != unit_cache.end(); ++i) (*Kill)( (*i).second ); unit_cache.clear(); } }; -#if (defined (__GNUC__) && ( ( __GNUC__ == 3 && __GNUC_MINOR__ >= 4) || __GNUC__ > 3 ) ) -template < class Typ, class Key > -vsUMap< Key, Typ*, ConstHasher >ClassCache< Typ, Key >::unit_cache; -#endif - typedef ClassCache< Unit, StringIntKey >UnitConstCache; typedef ClassCache< Mesh, std::string > WeaponMeshCache; Modified: trunk/vegastrike/src/gnuhash.h =================================================================== --- trunk/vegastrike/src/gnuhash.h 2012-12-01 05:41:30 UTC (rev 13454) +++ trunk/vegastrike/src/gnuhash.h 2012-12-05 02:16:17 UTC (rev 13455) @@ -21,6 +21,11 @@ #define vsHash stdext::hash #endif +#ifdef HAVE_NO_HASH_COMPARE +#undef vsHashComp +#define vsHashComp vsHash +#endif + #ifdef _WIN32 #ifdef HAVE_TR1_UNORDERED_MAP #if defined(_MSC_VER) && _MSC_VER >= 1600 |