debugger: add dumper for Eigen::Matrix

This commit is contained in:
hjk
2011-05-16 20:04:17 +02:00
parent 2b9c0106bc
commit 0d3fa271b5
2 changed files with 83 additions and 0 deletions

View File

@@ -2295,6 +2295,55 @@ def qdump__QScriptValue(d, item):
d.putSubItem(Item(dd["jscValue"], item.iname, "jscValue", "jscValue"))
#######################################################################
#
# Eigen
#
#######################################################################
def qdump__Eigen__Matrix(d, item):
innerType = templateArgument(item.value.type, 0)
storage = item.value["m_storage"]
options = numericTemplateArgument(item.value.type, 3)
rowMajor = (int(options) & 0x1)
p = storage["m_data"]
if p.type.code == gdb.TYPE_CODE_STRUCT: # Static
nrows = numericTemplateArgument(item.value.type, 1)
ncols = numericTemplateArgument(item.value.type, 2)
p = p["array"].cast(innerType.pointer())
else: # Dynamic
ncols = storage["m_cols"]
nrows = storage["m_rows"]
d.putValue("(%s x %s), %s" % (nrows, ncols, ["ColumnMajor", "RowMajor"][rowMajor]))
d.putField("keeporder", "1")
d.putNumChild(nrows * ncols)
limit = 100
nncols = min(ncols, limit)
nnrows = min(nrows, limit * limit / nncols)
if d.isExpanded(item):
iname = item.iname
with Children(d, nrows * ncols, innerType):
if ncols == 1:
for i in range(0, nnrows):
v = (p + i).dereference()
d.putSubItem(Item(v, item.iname))
elif nrows == 1:
for i in range(0, nncols):
v = (p + i).dereference()
d.putSubItem(Item(v, item.iname))
elif rowMajor == 1:
for i in range(0, nnrows):
for j in range(0, nncols):
name = "[%d,%d]" % (i, j)
v = (p + i * ncols + j).dereference()
d.putSubItem(Item(v, item.iname, None, name))
else:
for j in range(0, nncols):
for i in range(0, nnrows):
name = "[%d,%d]" % (i, j)
v = (p + i * ncols + j).dereference()
d.putSubItem(Item(v, item.iname, None, name))
#######################################################################
@@ -2445,3 +2494,4 @@ if False:
d.putValue(item.value["type"])
d.putType(" ")