diff --git a/src/libs/qtcreatorcdbext/containers.cpp b/src/libs/qtcreatorcdbext/containers.cpp index f1c7432a36d..caf1d8ee686 100644 --- a/src/libs/qtcreatorcdbext/containers.cpp +++ b/src/libs/qtcreatorcdbext/containers.cpp @@ -187,8 +187,13 @@ int containerSize(KnownType kt, const SymbolGroupValue &v) return msvcStdVectorSize(v); case KT_StdDeque: // MSVC2012 has many base classes, MSVC2010 1, MSVC2008 none case KT_StdSet: + case KT_StdMultiSet: case KT_StdMap: + case KT_StdUnorderedSet: + case KT_StdUnorderedMultiSet: case KT_StdMultiMap: + case KT_StdUnorderedMap: + case KT_StdUnorderedMultiMap: case KT_StdValArray: case KT_StdList: { const int size = v.readIntegerFromAncestor("_Mysize"); @@ -626,7 +631,7 @@ static inline SymbolGroupValueVector return rc; } -// std::set<>: Children directly contained in list +// std::(multi)set<>: Children directly contained in list static inline AbstractSymbolGroupNodePtrVector stdSetChildList(const SymbolGroupValue &set, unsigned count) { @@ -640,7 +645,14 @@ static inline AbstractSymbolGroupNodePtrVector return rc; } -// std::map: A list of std::pair (derived from std::pair_base) +static inline AbstractSymbolGroupNodePtrVector + stdHashChildList(const SymbolGroupValue &set, unsigned count) +{ + SymbolGroupValue list = set.findMember(set, "_List"); + return stdListChildList(list.node(), count, list.context()); +} + +// std::(multi)map: A list of std::pair (derived from std::pair_base) static inline AbstractSymbolGroupNodePtrVector stdMapChildList(const SymbolGroupValue &map, unsigned count) { @@ -1161,10 +1173,16 @@ AbstractSymbolGroupNodePtrVector containerChildren(SymbolGroupNode *node, int ty return stdDequeChildList(deque, size); break; case KT_StdSet: + case KT_StdMultiSet: return stdSetChildList(SymbolGroupValue(node, ctx), size); case KT_StdMap: case KT_StdMultiMap: return stdMapChildList(SymbolGroupValue(node, ctx), size); + case KT_StdUnorderedMap: + case KT_StdUnorderedMultiMap: + case KT_StdUnorderedMultiSet: + case KT_StdUnorderedSet: + return stdHashChildList(SymbolGroupValue(node, ctx), size); } return AbstractSymbolGroupNodePtrVector(); } diff --git a/src/libs/qtcreatorcdbext/knowntype.h b/src/libs/qtcreatorcdbext/knowntype.h index 4b9f00099e1..ba721b2a661 100644 --- a/src/libs/qtcreatorcdbext/knowntype.h +++ b/src/libs/qtcreatorcdbext/knowntype.h @@ -173,8 +173,14 @@ enum KnownType KT_StdStack = KT_STL_Type + KT_ContainerType + KT_HasSimpleDumper + 3, KT_StdDeque = KT_STL_Type + KT_ContainerType + KT_HasSimpleDumper + 4, KT_StdSet = KT_STL_Type + KT_ContainerType + KT_HasSimpleDumper + 5, - KT_StdMap = KT_STL_Type + KT_ContainerType + KT_HasSimpleDumper + 6, - KT_StdMultiMap = KT_STL_Type + KT_ContainerType + KT_HasSimpleDumper + 7, - KT_StdArray = KT_STL_Type + KT_ContainerType + KT_HasSimpleDumper + 8, - KT_StdValArray = KT_STL_Type + KT_ContainerType + KT_HasSimpleDumper + 9 + KT_StdMultiSet = KT_STL_Type + KT_ContainerType + KT_HasSimpleDumper + 6, + KT_StdUnorderedSet = KT_STL_Type + KT_ContainerType + KT_HasSimpleDumper + 7, + KT_StdUnorderedMultiSet = KT_STL_Type + KT_ContainerType + KT_HasSimpleDumper + 8, + KT_StdMap = KT_STL_Type + KT_ContainerType + KT_HasSimpleDumper + 9, + KT_StdMultiMap = KT_STL_Type + KT_ContainerType + KT_HasSimpleDumper + 10, + KT_StdUnorderedMap = KT_STL_Type + KT_ContainerType + KT_HasSimpleDumper + 11, + KT_StdUnorderedMultiMap = KT_STL_Type + KT_ContainerType + KT_HasSimpleDumper + 12, + KT_StdArray = KT_STL_Type + KT_ContainerType + KT_HasSimpleDumper + 13, + KT_StdValArray = KT_STL_Type + KT_ContainerType + KT_HasSimpleDumper + 14 + }; diff --git a/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp b/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp index 339441d41fb..9b18aa3922c 100644 --- a/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp +++ b/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp @@ -1241,9 +1241,23 @@ static KnownType knownClassTypeHelper(const std::string &type, case 8: if (!type.compare(hPos, 8, "multimap")) return KT_StdMultiMap; + if (!type.compare(hPos, 8, "multiset")) + return KT_StdMultiSet; if (!type.compare(hPos, 8, "valarray")) return KT_StdValArray; break; + case 13: + if (!type.compare(hPos, 13, "unordered_map")) + return KT_StdUnorderedMap; + if (!type.compare(hPos, 13, "unordered_set")) + return KT_StdUnorderedSet; + break; + case 18: + if (!type.compare(hPos, 18, "unordered_multimap")) + return KT_StdUnorderedMultiMap; + if (!type.compare(hPos, 18, "unordered_multiset")) + return KT_StdUnorderedMultiSet; + break; } } // STL strings