Mon May 11 13:21:14 CEST 2009 Tobias Rautenkranz <tobias@rautenkranz.ch>
* QList translations C wrapper
hunk ./src/lib/CMakeLists.txt 5
-set(QT_SMOKE_SOURCES qt-smoke.cpp qstring.cpp qstringlist.cpp lisp-object.cpp)
+set(QT_SMOKE_SOURCES qt-smoke.cpp qstring.cpp qstringlist.cpp lisp-object.cpp qlist.cpp)
addfile ./src/lib/qlist.cpp
hunk ./src/lib/qlist.cpp 1
+#include "qlist.h"
+
+/** @file
+ * @brief QList conversions. */
+
+#include <QVariant>
+#include <QByteArray>
+
+extern "C" {
+
+DEFINE_QLIST_WRAPPER(QVariant)
+DEFINE_QLIST_WRAPPER_PTR(void)
+DEFINE_QLIST_WRAPPER(QByteArray)
+
+} // extern "C"
addfile ./src/lib/qlist.h
hunk ./src/lib/qlist.h 1
+#ifndef CL_SMOKE_QT_QLIST_H
+#define CL_SMOKE_QT_QLIST_H
+
+#include <QList>
+
+/** @file
+ */
+
+/** Defines a C wrapper for the QList<@a TYPE>.
+ * @param TYPE the type of the elements of the QList
+ */
+#define DEFINE_QLIST_WRAPPER(TYPE) \
+ DEFINE_QLIST_WRAPPER_3(TYPE, TYPE, VALUE)
+
+/** Defines a C wrapper for the QList<@a TYPE*>,
+ * where @a TYPE is the of the pointer.
+ *
+ * @param NAME the name used for the wrapper functions.
+ * @param TYPE the type of the elements
+ */
+#define DEFINE_QLIST_WRAPPER_PTR(TYPE) \
+ DEFINE_QLIST_WRAPPER_3(TYPE, TYPE*, PTR)
+
+/** @internal */
+#define DEFINE_QLIST_WRAPPER_3(NAME, TYPE, PTR_VALUE) \
+ DEFINE_QLIST_WRAPPER_ALL_PART(NAME, TYPE) \
+ DEFINE_QLIST_WRAPPER_ ## PTR_VALUE ## _PART(NAME, TYPE) \
+[_^I_][_$_]
+
+/** @internal
+ * size, free and make_list. */
+#define DEFINE_QLIST_WRAPPER_ALL_PART(NAME, TYPE) \
+int \
+qt_smoke_list_ ## NAME ## size(const void* list) \
+{ \
+ return static_cast<const QList< TYPE >*>(list)->size(); \
+} \
+\
+void \
+qt_smoke_free_list_ ## NAME (void* list) \
+{ \
+ delete static_cast<QList< TYPE >*>(list); \
+} \
+ \
+void* \
+qt_smoke_make_list_ ## NAME () \
+{ \
+ return new QList< TYPE >(); \
+} \
+ \
+
+/** @internal
+ * At and append for pointer types
+ */
+#define DEFINE_QLIST_WRAPPER_PTR_PART(NAME, TYPE) \
+const void* \
+qt_smoke_list_ ## NAME ## _at(const void* list, int index) \
+{ \
+ const QList< TYPE >* qlist = static_cast<const QList< TYPE > *>(list); \
+ return qlist->at(index); \
+} \
+\
+void \
+qt_smoke_list_ ## NAME ## _append(void* list, void* data, int length) \
+{ \
+ static_cast<QList< TYPE >*>(list) \
+ ->append(static_cast<TYPE>(data)); \
+} \
+
+/** @internal
+ * At and append for value types.
+ */
+#define DEFINE_QLIST_WRAPPER_VALUE_PART(NAME, TYPE) \
+const void* \
+qt_smoke_list_ ## NAME ## _at(const void* list, int index) \
+{ \
+ const QList< TYPE >* qlist = static_cast<const QList< TYPE > *>(list); \
+ return &qlist->at(index); \
+} \
+\
+void \
+qt_smoke_list_ ## NAME ## _append(void* list, void* data, int length) \
+{ \
+ static_cast<QList< TYPE >*>(list) \
+ ->append(*static_cast<TYPE*>(data)); \
+} \
+
+#endif // CL_SMOKE_QT_QLIST_H