From 345221d73820667047d1b3741acedeea6f4723b5 Mon Sep 17 00:00:00 2001
From: hjk <hjk121@nokiamail.com>
Date: Mon, 13 Jan 2014 15:32:01 +0100
Subject: [PATCH] Debugger: Add dumper for libc++'s std::unordered_map

Change-Id: I15bf32c1f77c17f42ee1da39f1353cff580fa6eb
Reviewed-by: hjk <hjk121@nokiamail.com>
---
 share/qtcreator/debugger/dumper.py   |  9 +++++----
 share/qtcreator/debugger/stdtypes.py | 24 ++++++++++++++++++++++--
 2 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py
index 3a9257309d2..0a319b5a409 100644
--- a/share/qtcreator/debugger/dumper.py
+++ b/share/qtcreator/debugger/dumper.py
@@ -409,7 +409,7 @@ class DumperBase:
             self.putNumChild(0)
 
 
-    def putMapName(self, value):
+    def putMapName(self, value, index = -1):
         ns = self.qtNamespace()
         if str(value.type) == ns + "QString":
             self.put('key="%s",' % self.encodeString(value))
@@ -418,10 +418,11 @@ class DumperBase:
             self.put('key="%s",' % self.encodeByteArray(value))
             self.put('keyencoded="%s",' % Hex2EncodedLatin1)
         else:
-            if self.isLldb:
-                self.put('name="%s",' % value.GetValue())
+            val = str(value.GetValue()) if self.isLldb else str(value)
+            if index == -1:
+                self.put('name="%s",' % val)
             else:
-                self.put('name="%s",' % value)
+                self.put('key="[%d] %s",' % (index, val))
 
     def isMapCompact(self, keyType, valueType):
         format = self.currentItemFormat()
diff --git a/share/qtcreator/debugger/stdtypes.py b/share/qtcreator/debugger/stdtypes.py
index f0e87a360e6..fafe88ec101 100644
--- a/share/qtcreator/debugger/stdtypes.py
+++ b/share/qtcreator/debugger/stdtypes.py
@@ -659,8 +659,28 @@ def qdump__std____1__unordered_map(d, value):
     n = toInteger(value["__table_"]["__p2_"]["__first_"])
     d.putItemCount(n)
     if d.isExpanded():
-        with Children(d, 1):
-            d.putFields(value)
+        node = value["__table_"]["__p1_"]["__first_"]["__next_"]
+        #pos = toInteger(value["__table_"]["__p2_"]["__first_"])
+        #with Children(d, 1):
+        #    d.putFields(value)
+        keyType = d.templateArgument(value.type, 0)
+        valueType = d.templateArgument(value.type, 1)
+        isCompact = d.isMapCompact(keyType, valueType)
+        with Children(d, n, maxNumChild=1000, childType=valueType):
+            for i in xrange(n):
+                pair = node["__value_"]
+                #d.putSubItem(i, pair)
+                with SubItem(d, i):
+                    if isCompact:
+                        d.putMapName(pair["first"], i)
+                        d.putItem(pair["second"])
+                    else:
+                        d.putEmptyValue()
+                        if d.isExpanded():
+                            with Children(d, 2):
+                                d.putSubItem("first", pair["first"])
+                                d.putSubItem("second", pair["second"])
+                node = node["__next_"]
 
 def qdump__std____debug__unordered_set(d, value):
     qdump__std__unordered_set(d, value)
-- 
GitLab