From ca5c16a40a8e4d9aed046a89161f31e6347d0830 Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Thu, 19 May 2011 10:37:53 +0200
Subject: [PATCH] debugger: fix std::deque dumper

Task-number: QTCREATORBUG-4936
---
 share/qtcreator/gdbmacros/gdbmacros.py | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/share/qtcreator/gdbmacros/gdbmacros.py b/share/qtcreator/gdbmacros/gdbmacros.py
index 90706e119e1..45e3b2c3eef 100644
--- a/share/qtcreator/gdbmacros/gdbmacros.py
+++ b/share/qtcreator/gdbmacros/gdbmacros.py
@@ -1732,18 +1732,23 @@ def qdump__QxXmlAttributes(d, item):
 #######################################################################
 
 def qdump__std__deque(d, item):
+    innerType = templateArgument(item.value.type, 0)
+    innerSize = innerType.sizeof
+    bufsize = 1
+    if innerSize < 512:
+        bufsize = 512 / innerSize
+
     impl = item.value["_M_impl"]
     start = impl["_M_start"]
-    size = impl["_M_finish"]["_M_cur"] - start["_M_cur"]
+    finish = impl["_M_finish"]
+    size = (bufsize * (finish["_M_node"] - start["_M_node"] - 1)
+        + (finish["_M_cur"] - finish["_M_first"])
+        + (start["_M_last"] - start["_M_cur"]))
+
     check(0 <= size and size <= 1000 * 1000 * 1000)
     d.putItemCount(size)
     d.putNumChild(size)
     if d.isExpanded(item):
-        innerType = templateArgument(item.value.type, 0)
-        innerSize = innerType.sizeof
-        bufsize = 1
-        if innerSize < 512:
-            bufsize = 512 / innerSize
         with Children(d, [size, 2000], innerType):
             pcur = start["_M_cur"]
             pfirst = start["_M_first"]
-- 
GitLab