summaryrefslogtreecommitdiff
path: root/src/plugins/debugger/watchdata.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/debugger/watchdata.cpp')
-rw-r--r--src/plugins/debugger/watchdata.cpp57
1 files changed, 51 insertions, 6 deletions
diff --git a/src/plugins/debugger/watchdata.cpp b/src/plugins/debugger/watchdata.cpp
index 098051d9e9..6d46835227 100644
--- a/src/plugins/debugger/watchdata.cpp
+++ b/src/plugins/debugger/watchdata.cpp
@@ -122,6 +122,7 @@ WatchData::WatchData() :
id(0),
state(InitialState),
editformat(StopDisplay),
+ editencoding(Unencoded8Bit),
address(0),
origaddr(0),
size(0),
@@ -552,14 +553,12 @@ void parseChildrenData(const WatchData &data0, const GdbMi &item,
GdbMi children = item["children"];
data.updateType(item["type"]);
- GdbMi mi = item["editvalue"];
- if (mi.isValid())
- data.editvalue = mi.data();
- mi = item["editformat"];
- data.editformat = DebuggerDisplay(mi.toInt());
+ data.editvalue = item["editvalue"].data();
+ data.editformat = DebuggerDisplay(item["editformat"].toInt());
+ data.editencoding = DebuggerEncoding(item["editencoding"].toInt());
- mi = item["valueelided"];
+ GdbMi mi = item["valueelided"];
if (mi.isValid())
data.elided = mi.toInt();
@@ -658,6 +657,52 @@ void parseWatchData(const WatchData &data0, const GdbMi &input,
parseChildrenData(data0, input, itemHandler, childHandler, arrayDecoder);
}
+template <class T>
+void readNumericVectorHelper(std::vector<double> *v, const QByteArray &ba)
+{
+ const T *p = (const T *) ba.data();
+ std::copy(p, p + ba.size() / sizeof(T), std::back_insert_iterator<std::vector<double> >(*v));
+}
+
+void readNumericVector(std::vector<double> *v, const QByteArray &rawData, DebuggerEncoding encoding)
+{
+ switch (encoding) {
+ case Hex2EncodedInt1:
+ readNumericVectorHelper<signed char>(v, rawData);
+ break;
+ case Hex2EncodedInt2:
+ readNumericVectorHelper<short>(v, rawData);
+ break;
+ case Hex2EncodedInt4:
+ readNumericVectorHelper<int>(v, rawData);
+ break;
+ case Hex2EncodedInt8:
+ readNumericVectorHelper<qint64>(v, rawData);
+ break;
+ case Hex2EncodedUInt1:
+ readNumericVectorHelper<uchar>(v, rawData);
+ break;
+ case Hex2EncodedUInt2:
+ readNumericVectorHelper<ushort>(v, rawData);
+ break;
+ case Hex2EncodedUInt4:
+ readNumericVectorHelper<uint>(v, rawData);
+ break;
+ case Hex2EncodedUInt8:
+ readNumericVectorHelper<quint64>(v, rawData);
+ break;
+ case Hex2EncodedFloat4:
+ readNumericVectorHelper<float>(v, rawData);
+ break;
+ case Hex2EncodedFloat8:
+ readNumericVectorHelper<double>(v, rawData);
+ break;
+ default:
+ qDebug() << "ENCODING ERROR: " << encoding;
+ }
+
+}
+
} // namespace Internal
} // namespace Debugger