diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2024-03-07 13:26:56 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2024-03-14 11:53:38 +0100 |
commit | 109030984ad8004bc92e3bf1d01d97cc1c0d5ed8 (patch) | |
tree | 9dfd4e4f309d79526251bc7931df94bb9c215139 | |
parent | c5a601ca958cbe0fd72c1201bddab872e353dfcf (diff) |
libpyside: Add a debug operator for a Py_Buffer
Task-number: PYSIDE-2628
Change-Id: I34646f76f509ec30e3d63fc8df296d2b5692ff0e
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
-rw-r--r-- | sources/pyside6/libpyside/pyside.cpp | 44 | ||||
-rw-r--r-- | sources/pyside6/libpyside/pysideutils.h | 9 |
2 files changed, 52 insertions, 1 deletions
diff --git a/sources/pyside6/libpyside/pyside.cpp b/sources/pyside6/libpyside/pyside.cpp index f4f113d34..683a3baf9 100644 --- a/sources/pyside6/libpyside/pyside.cpp +++ b/sources/pyside6/libpyside/pyside.cpp @@ -1128,5 +1128,47 @@ QDebug operator<<(QDebug debug, const debugPyObject &o) return debug; } -} //namespace PySide +debugPyBuffer::debugPyBuffer(Py_buffer *b) noexcept : m_buffer(b) +{ +} +static void formatPy_ssizeArray(QDebug &debug, const char *name, const Py_ssize_t *array, int len) +{ + debug << ", " << name << '='; + if (array != nullptr) { + debug << '['; + for (int i = 0; i < len; ++i) + debug << array[i] << ' '; + debug << ']'; + } else { + debug << '0'; + } +} + +PYSIDE_API QDebug operator<<(QDebug debug, const debugPyBuffer &b) +{ + QDebugStateSaver saver(debug); + debug.noquote(); + debug.nospace(); + debug << "Py_buffer("; + if (b.m_buffer != nullptr) { + debug << "obj=" << b.m_buffer->obj + << ", buf=" << b.m_buffer->buf << ", len=" << b.m_buffer->len + << ", readonly=" << b.m_buffer->readonly + << ", itemsize=" << b.m_buffer->itemsize << ", format="; + if (b.m_buffer->format != nullptr) + debug << '"' << b.m_buffer->format << '"'; + else + debug << '0'; + debug << ", ndim=" << b.m_buffer->ndim; + formatPy_ssizeArray(debug, "shape", b.m_buffer->shape, b.m_buffer->ndim); + formatPy_ssizeArray(debug, "strides", b.m_buffer->strides, b.m_buffer->ndim); + formatPy_ssizeArray(debug, "suboffsets", b.m_buffer->suboffsets, b.m_buffer->ndim); + } else { + debug << '0'; + } + debug << ')'; + return debug; +} + +} // namespace PySide diff --git a/sources/pyside6/libpyside/pysideutils.h b/sources/pyside6/libpyside/pysideutils.h index b17d4fcda..47c2f2c1b 100644 --- a/sources/pyside6/libpyside/pysideutils.h +++ b/sources/pyside6/libpyside/pysideutils.h @@ -55,6 +55,15 @@ struct debugPyObject PYSIDE_API QDebug operator<<(QDebug debug, const debugPyObject &o); +struct debugPyBuffer +{ + PYSIDE_API explicit debugPyBuffer(Py_buffer *b) noexcept; + + Py_buffer *m_buffer; +}; + +PYSIDE_API QDebug operator<<(QDebug debug, const debugPyBuffer &b); + } //namespace PySide #endif // PYSIDESTRING_H |