From 68965c0fa987e1aa73cc1d8cf143d99f61afe021 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Mon, 20 Jul 2015 02:06:22 -0600 Subject: [PATCH] Fix g++ build break (portibility problems with stl hash). This partly turns off the stl improvements. It also removes some old code that ancient compilers used to need. However, the main issue is getting access to hash functions for unordered_map in portable way. --- glslang/Include/Common.h | 25 ++++------------------ glslang/MachineIndependent/ParseHelper.h | 3 ++- .../MachineIndependent/preprocessor/PpContext.h | 6 ++++-- glslang/MachineIndependent/reflection.h | 3 ++- 4 files changed, 12 insertions(+), 25 deletions(-) diff --git a/glslang/Include/Common.h b/glslang/Include/Common.h index 3580a6d..468e56c 100644 --- a/glslang/Include/Common.h +++ b/glslang/Include/Common.h @@ -93,9 +93,9 @@ typedef pool_allocator TStringAllocator; typedef std::basic_string , TStringAllocator> TString; // Repackage the std::hash for use by unordered map/set with a TString key. -struct TStringHash { - size_t operator()(const TString& string) const { return std::hash()(string); } -}; +//struct TStringHash { +// size_t operator()(const TString& string) const { return std::hash()(string); } +//}; inline TString* NewPoolTString(const char* s) { @@ -128,31 +128,14 @@ public: }; template class TList : public std::list > { -public: - typedef typename std::list >::size_type size_type; - TList() : std::list >() {} - TList(const pool_allocator& a) : std::list >(a) {} - TList(size_type i): std::list >(i) {} }; template > class TMap : public std::map > > { -public: - typedef pool_allocator > tAllocator; - - TMap() : std::map() {} - // use correct two-stage name lookup supported in gcc 3.4 and above - TMap(const tAllocator& a) : std::map(TBaseMap::key_compare(), a) {} }; -template , class PRED = std::equal_to > +template , class PRED = std::equal_to > class TUnorderedMap : public std::unordered_map > > { -public: - typedef pool_allocator > tAllocator; - - TUnorderedMap() : std::unordered_map() {} - // use correct two-stage name lookup supported in gcc 3.4 and above - TUnorderedMap(const tAllocator& a) : std::unordered_map(TBaseMap::key_compare(), a) {} }; // diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h index d3a1e11..42ea501 100644 --- a/glslang/MachineIndependent/ParseHelper.h +++ b/glslang/MachineIndependent/ParseHelper.h @@ -306,7 +306,8 @@ protected: TInputScanner* currentScanner; int numErrors; // number of compile-time errors encountered bool parsingBuiltins; // true if parsing built-in symbols/functions - TUnorderedMap extensionBehavior; // for each extension string, what its current behavior is set to +// need portable TStringHash TUnorderedMap extensionBehavior; // for each extension string, what its current behavior is set to + TMap extensionBehavior; // for each extension string, what its current behavior is set to static const int maxSamplerIndex = EsdNumDims * (EbtNumTypes * (2 * 2 * 2)); // see computeSamplerTypeIndex() TPrecisionQualifier defaultSamplerPrecision[maxSamplerIndex]; bool afterEOF; diff --git a/glslang/MachineIndependent/preprocessor/PpContext.h b/glslang/MachineIndependent/preprocessor/PpContext.h index 269312b..f35f451 100644 --- a/glslang/MachineIndependent/preprocessor/PpContext.h +++ b/glslang/MachineIndependent/preprocessor/PpContext.h @@ -192,7 +192,8 @@ public: }; MemoryPool *pool; - typedef TUnorderedMap TSymbolMap; + // need portable hash typedef TUnorderedMap TSymbolMap; + typedef TMap TSymbolMap; TSymbolMap symbols; // this has light use... just defined macros protected: @@ -436,7 +437,8 @@ protected: // // From PpAtom.cpp // - typedef TUnorderedMap TAtomMap; + // need portable TStringHash typedef TUnorderedMap TAtomMap; + typedef TMap TAtomMap; typedef TVector TStringMap; TAtomMap atomMap; TStringMap stringMap; diff --git a/glslang/MachineIndependent/reflection.h b/glslang/MachineIndependent/reflection.h index 1378a6a..42f0ccd 100644 --- a/glslang/MachineIndependent/reflection.h +++ b/glslang/MachineIndependent/reflection.h @@ -108,7 +108,8 @@ public: protected: friend class glslang::TLiveTraverser; - typedef std::unordered_map TNameToIndex; + // Need a TString hash: typedef std::unordered_map TNameToIndex; + typedef std::map TNameToIndex; typedef std::vector TMapIndexToReflection; TObjectReflection badReflection; // return for queries of -1 or generally out of range; has expected descriptions with in it for this -- 2.7.4