summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qmetatype.h
Commit message (Collapse)AuthorAgeFilesLines
* Remove unused qMetaType helpers.Jędrzej Nowacki2012-09-271-54/+0
| | | | | | | | | These function were replaced by QMetaTypeFunctionHelper class that is a bit more flexible. Change-Id: I5aee2089f543b6e05c4d65a688fa8ca721f8abe0 Reviewed-by: J-P Nurmi <jpnurmi@digia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* QMetaType build fix with Q_NO_CURSOR and friends.Jędrzej Nowacki2012-09-271-6/+66
| | | | | | | | | | | | QMetaType has a way to "switch off" some types from the build. QtMetaTypePrivate::TypeDefinition<T>::IsAvailable is defined as false for all unaccessible types. Sadly that information was never used by gui and widget handlers. The patch implements it. Change-Id: Ie5835be4c88cfbbca8a4e9199e31ddfc20cae190 Reviewed-by: J-P Nurmi <jpnurmi@digia.com> Reviewed-by: Jing Bai <jing.bai@digia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Change copyrights from Nokia to DigiaIikka Eklund2012-09-221-24/+24
| | | | | | | | Change copyrights and license headers from Nokia to Digia Change-Id: If1cc974286d29fd01ec6c19dd4719a67f4c3f00e Reviewed-by: Lars Knoll <lars.knoll@digia.com> Reviewed-by: Sergio Ahumada <sergio.ahumada@digia.com>
* Improve QMetaType docs.Jędrzej Nowacki2012-09-131-1/+1
| | | | | | | Change-Id: I4ad4188d1bb984b83ffe4bb4ff098158e888d183 Reviewed-by: Qt Doc Bot <qt_docbot@qt-project.org> Reviewed-by: Mitch Curtis <mitch.curtis@nokia.com> Reviewed-by: Frederik Gladhorn <frederik.gladhorn@nokia.com>
* Change SChar to metatype id 40.Stephen Kelly2012-09-031-4/+3
| | | | | | | | | This fills the gap left by QWidgetStar, making the sequence between FirstCoreType and LastCoreType contiguous, which some benchmarks assume to be true anyway. Change-Id: I2d5d202b6246a9065fdf77f325a4a04279dbe4b7 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* QMetaTypeId: optimize qt_metatype_id() in special casesMarc Mutz2012-08-261-48/+50
| | | | | | | | Same change as for Q_DECLARE_METATYPE, but in the container and smart pointer specialisations of it. Change-Id: If9390ccc43eb3b07122f5ea5b8094139b5e1ded0 Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* QMetaTypeId: optimize qt_metatype_id()Marc Mutz2012-08-261-4/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The old code resulted in one memory fetch for the test plus another one for the return value (at the assembler level). The new code reuses the already-loaded value: - movl _ZZN11QMetaTypeIdI12QDBusMessageE14qt_metatype_idEvE11metatype_id(%rip), %edx - testl %edx, %edx - je .L158 movl _ZZN11QMetaTypeIdI12QDBusMessageE14qt_metatype_idEvE11metatype_id(%rip), %eax - ret + testl %eax, %eax + je .L160 + rep; ret It also saves one load in the not-yet-initialised case: -.L158: +.L160: leaq .LC7(%rip), %rdi subq , %rsp .cfi_def_cfa_offset 16 movq himBH1, %rsi call _Z17qRegisterMetaTypeI12QDBusMessageEiPKcPT_ movl %eax, _ZZN11QMetaTypeIdI12QDBusMessageE14qt_metatype_idEvE11metatype_id(%rip) - movl _ZZN11QMetaTypeIdI12QDBusMessageE14qt_metatype_idEvE11metatype_id(%rip), %eax addq , %rsp .cfi_def_cfa_offset 8 ret Change-Id: I769950449822f2b1587680e05518be0a4f3120a2 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* Fix documented QMetaType::UserType value.Aaron McCarthy2012-08-201-1/+1
| | | | | | | | | QMetaType::UserType was changed from 256 to 1024, this was not reflected in the code parsed by qdoc. Change-Id: I0a02e8b020d495fbf2508d84b690adae1b677125 Reviewed-by: Laszlo Papp <lpapp@kde.org> Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
* Refactor the automatic metatype templates into preprocessor lists.Stephen Kelly2012-08-201-24/+40
| | | | | | | This will allow re-use in moc. Change-Id: I99c5f8f0756fccf0fb2bb845c29255c14d4d703e Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
* Remove QWidgetStar.Stephen Kelly2012-08-181-16/+2
| | | | | | | | | | | | This allows us to remove the odd hacks to get the static metaobject for the QWidget* metatype. The QWidget* is still an automatic metatype thanks to the QObject partial template specialization. It is registered as a metatype at runtime automatically in qwidgetsvariant.cpp. Change-Id: Ie01b69eadf2cbe87af1a86c3284550f60dcf9e94 Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* Fix some typos in static assert message.Stephen Kelly2012-08-011-1/+1
| | | | | Change-Id: I1abc79d86a4b101e6f32d37a58ac3c7d8cc16237 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Fix MSVC 64bit warnings about truncation from size_t to int.Friedemann Kleint2012-07-261-2/+2
| | | | | | Change-Id: I9aea91aeb9f71817e9cc612d41351dbc98056500 Reviewed-by: Laszlo Papp <lpapp@kde.org> Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
* QMetaTypeId2::IsBuiltIn: (new) template meta-function to check for built-in ↵Marc Mutz2012-07-261-2/+2
| | | | | | | | | | | | | | | types This allows to check whether QMetaTypeId2::MetaType exists, and can help turn run-time into compile-time expressions, even without constexpr support, or in situations where constexpr can't be used (because you can't overload on it). This was designed for the QMetaType::registerConversion feature, but it's much more widely applicable. Change-Id: Iafa04add04bcb531b3f7fe3e751c7e91ee6a3bc0 Reviewed-by: Olivier Goffart <ogoffart@woboq.com> Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com> Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
* Make qRegisterMetaType constexpr for built-in types.Stephen Kelly2012-07-251-1/+1
| | | | | | | | For consistency with qMetaTypeId, and because we can. Change-Id: I6882a16ef3c0d84539048c9f2c201c4a2b2ca7ad Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com> Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
* Correct documentation for Void metatype value, define UnknownTypeJeremy Katz2012-07-171-1/+2
| | | | | | | | QMetaType::Type::Void was misdocumented as being equal to 0. The actual value for Void is currently 43. UnknownType is 0. Change-Id: I4e9cb3b4d21e10e1691b985a6ad635bc7a04f1b7 Reviewed-by: Casper van Donderen <casper.vandonderen@nokia.com>
* Add new metatypes to QMetaType::Type enum for docsJeremy Katz2012-07-171-0/+3
| | | | | | | | This adds QRegularExpression, QJson{Value,Object,Array,Document}, and SChar Change-Id: I3dbe9d197952e980f0de9eaed2605d190b8d0405 Reviewed-by: Casper van Donderen <casper.vandonderen@nokia.com>
* Simplify the creation of QMetaTypeId specializations.Stephen Kelly2012-07-031-10/+6
| | | | | Change-Id: I07405f91b6f73a4e129859ca45a983d3ec7029ab Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
* Add constexpr template specializations for built in metatypes.Stephen Kelly2012-07-031-5/+5
| | | | | | | | | This will make it possible (in Qt 6) to remove the enums listing metatype ids. As it is constexpr, it can be used in switch statements just like enums, as enum values, and as template specialization values. Change-Id: I51293674c403714e34cb8a8b8953522fc97a740a Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* Store the QMetaObject with the QMetaType.Stephen Kelly2012-07-011-4/+23
| | | | | | | | This will allow conversion between pointers to compatible QObject derived types. Change-Id: I19e08934571fb3f1b91e594892214041fe5f6a11 Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
* QMetaType: Fix warnings about truncation from uint64 to int.Friedemann Kleint2012-06-281-2/+2
| | | | | | | Triggers warnings with MSVC2010/64bit. Change-Id: I90abdf4de416e0db554eb46e4b3cc7a0a38cb1db Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
* Record if a metatype is a smart pointer to a QObject derived.Stephen Kelly2012-06-201-4/+44
| | | | | | | | | | | | This allows QVariant/QMetaType software (such as QtDeclarative) to deal with smart pointers in a similar way to how they can deal with naked pointers (accessing properties etc). This also adds a requirement that T be fully defined when QSharedPointer<T> is inserted into a QVariant. Change-Id: I29e12b8a6aa5f4aadbd62f92b89bc238f64b5725 Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
* Add automatic metatype declaration for QPointer and QWeakPointer.Stephen Kelly2012-06-151-26/+34
| | | | | Change-Id: Ic9a04fa68d0bb14ef07455a6559e59f4b887f38b Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
* Fix automatic declaration of QSharedPointer<T> metatypes.Stephen Kelly2012-06-121-1/+30
| | | | | | | | | | | | | | | | | | | | | | | QSharedPointer doesn't work like the other automatic template metatype declarations because in some cases T* is declared as a metatype, but we are interested in QSharedPointer<T> (eg QObject*). In other cases, T is declared as a metatype and we are interested in QSharedPointer<T> (eg char). In particular the macro used before this patch was attempting to get the metatype id of the element_type using for example qMetaTypeId<QObject>() instead of qMetaTypeId<QObject*>(), which did not work. Similarly, the variadic macro driven test is no good, because it was testing QSharedPointer<QObject*> instead of QSharedPointer<QObject>, so that is removed. In the end, the only thing we can sensibly automatically declare as metatypes are QSharedPointers to QObject derived types. That is also the type that makes the most sense in a QML context anyway. Change-Id: I13dd40147e2e6bedf38661f898102abaaaa96208 Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
* Avoid a type name normalization during auto-registration.Jędrzej Nowacki2012-06-121-6/+38
| | | | | | | Containers are auto-registered and use normalized names. Change-Id: Id65c3940401f69436929220e1f6a971135e147ed Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
* Move QIcon metatype handlers back to QtGuiOlivier Goffart2012-05-181-24/+25
| | | | | | | | | | | QIcon has been moved back from QWidget to QtGui, so the QIcon QVariant and QMetaType handler can now be moved back to QtGui. Also we can give back QIcon its old number, allowing to get rid of some compatibility hack when unstreaming QVariant Change-Id: I439d5c2987c06ecd619f394407850f678164afb8 Reviewed-by: Lars Knoll <lars.knoll@nokia.com> Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
* Introduce a new built-in type: signed char.Jędrzej Nowacki2012-05-081-4/+3
| | | | | | | | | | | | C++ distinguish between "char", "signed char" and "unsigned char", they are three independent types. Fix QVariant behavior on ARM. On ARM "char" may mean "unsigned char", but we depends on the sign during a numerical conversions. Change-Id: I610ce3fb88ed5964b67f3ae442d264fe16b2d261 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Initialize member variableLars Knoll2012-05-011-0/+1
| | | | | | Change-Id: Icfbe064e89b0c2f7b67ba58cbdc79347275b63b1 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
* Fix warning about int-truncation (MSVC2010, 64bit).Friedemann Kleint2012-04-271-1/+1
| | | | | | Change-Id: Idfc483ccb80a8bbad128672052edfa04635bd532 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
* Compile on Windows.Jan-Arve Saether2012-04-211-2/+8
| | | | | | | | | | | The previous code was trying to sum one pointer with one string literal... Using QVarLengthArray should also potentially speed things up a bit, since it will avoid a malloc if className is small enough (less than 15 bytes). Change-Id: I41218babb3030e7e6f9c31fc77e4af1c209ae0a5 Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
* Provide versions of qRegisterMetaType() that do not normalize typename.Martin Jones2012-04-201-4/+29
| | | | | | | | | QML is quite capable of providing typenames in the correct format. qRegisterNormalizedMetaType() does not normalize the typename, so avoids the huge overhead. Change-Id: I96c9a42fe0b5d36ac05a9247f6507dbf9583fa67 Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
* Don't use QByteArrayLiteral for a non-stored QByteArrayThiago Macieira2012-04-191-1/+1
| | | | | | | | | Unless you're creating a QByteArray that you will store, don't use QByteArrayLiteral. Using it for 1 byte that is always concatenated to something else is an extreme waste. Change-Id: Icc29e4c4cb1d0aad1714bdeec8ff41da7c301af9 Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
* Doc: Prepare for building modular QtCore docs.Casper van Donderen2012-04-191-0/+25
| | | | | | | | | | | | This change fixes most qdoc errors in QtCore. There are about 900 left. The main thing this change does is moving documentation from qtcore from /doc/src to /src/corelib/doc. Other issues resolved are mis-use of qdoc commands. Change-Id: I002d01edfb13575e8bf27ce91596a577a92562d1 Reviewed-by: Lars Knoll <lars.knoll@nokia.com> Reviewed-by: Jason McDonald <jason.mcdonald@nokia.com> Reviewed-by: Jerome Pasion <jerome.pasion@nokia.com>
* Reserve more space for built-in types in id space.Jędrzej Nowacki2012-03-221-1/+1
| | | | | | | | | | | | | | | | | | | We are running out of type ids for built-in types, 255 is not enough. QMetaType already contains about ~70 types, situation is maybe not tragic now, but there is a great chance that we will want to add more built-in types from different modules like jsondb or declarative. Then it might be tight, because we are not allowed to reorganize type ids (it would be a binary incompatible change). This change was not possible up to now. Old moc generated code assumes that type id can be safely stored in 8 bits. This is source compatible change. Change-Id: Iec600adf6b6196a9f3f06ca6d865911084390cc2 Reviewed-by: Olivier Goffart <ogoffart@woboq.com> Reviewed-by: João Abecasis <joao.abecasis@nokia.com> Reviewed-by: Kent Hansen <kent.hansen@nokia.com>
* Add QtJson types to meta-type systemKent Hansen2012-03-201-2/+6
| | | | | | | | | | Make QJsonValue, QJsonObject, QJsonArray and QJsonDocument first-class meta-types. This is an enabler for a lightweight integration with QML. Change-Id: I4725efdd2746cf97fd26d3632a99e8eee849f834 Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Forward declare QMetaObject as a struct.Stephen Kelly2012-03-201-1/+1
| | | | | | | Fixes compiler warnings with clang and others. Change-Id: I726d4c10644287bb642c8b5dd28172afe8c4d1ea Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Add API and reserve space for storing the QMetaObject with the QMetaType.Stephen Kelly2012-03-201-4/+22
| | | | | | | | In Qt 5.1, http://codereview.qt-project.org/#change,19113 can be rebased on top of this change in a compatible way. Change-Id: If7ac0481a3b2a874528de4ef6ea7535501a4ac71 Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
* Merge master into api_changesKent Hansen2012-03-161-12/+12
|\ | | | | | | | | | | | | | | | | Conflicts: src/corelib/kernel/qmetatype.cpp src/gui/kernel/qplatformsurface_qpa.cpp tests/auto/corelib/tools/qtimeline/qtimeline.pro Change-Id: Iff3fff34eeeb06f02369767ddfce44cfde505178
| * Unify QMetaType::TypeFlags detection.Jędrzej Nowacki2012-03-141-12/+12
| | | | | | | | | | | | | | | | | | Duplicated code was removed. As an side effect: - one runtime flag check was replaced by a compile time check. - is enum flag can be used together with built-in types. Change-Id: I54173e7b07ce7e487d3cc21ba24dcccd28b5d049 Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* | QRegularExpression: QMetaType and QVariant supportGiuseppe D'Angelo2012-03-141-1/+2
| | | | | | | | | | | | | | | | | | Removed the Q_DECLARE_METATYPE in favour of first-class support inside QMetaType and QVariant. Change-Id: I904236822bfab967dc0fbd4d4cc2bcb68c741adc Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com> Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
* | Merge remote-tracking branch 'origin/master' into api_changesLars Knoll2012-03-121-1/+5
|\| | | | | | | | | | | | | Conflicts: tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp Change-Id: I884afc3b6d65c6411733a897a1949e19393573a7
| * Add Q_IS_ENUM(), and provide as flag in QMetaType::typeFlags()Glenn Watson2012-03-111-1/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Add Q_IS_ENUM() macro to determine if a given type is an enumeration. Use information from that in QMetaType::registerType() to store whether custom registered metatypes are enums or not. This information can then be accessed by calling QMetaType::typeFlags(int type). This is used by the declarative code to determine whether a custom type in a variant can be safely cast to an integer, which is required to allow passing non-local enums as signal/slot params. Change-Id: I9733837f56af201fa3017b4a22b761437a3c0de4 Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* | Merge remote-tracking branch 'origin/api_changes' into containtersJoão Abecasis2012-03-081-25/+75
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/corelib/kernel/qmetaobject.cpp src/corelib/kernel/qvariant.cpp src/tools/moc/moc.h Change-Id: I2cd3d95b41d2636738c6b98064864941e3b0b4e6
| * | Merge remote-tracking branch 'origin/master' into api_changesJoão Abecasis2012-03-081-1/+2
| |\| | | | | | | | | | Change-Id: I89dc2e193bd01624c1fb50484610d516e39b1538
| | * Add nicer error message in qMetaTypeId function.Jędrzej Nowacki2012-03-071-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The function can be used only with a registered type and it would fail to compile for other types. By adding the static assert we can print an almost user friendly compilation error message. Change-Id: I59ab148cabf32afe0baef186b82cb03303b57780 Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com> Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
| | * Mark QMetaType constructor as explicit.Jędrzej Nowacki2012-03-061-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | Implicit conversion from an int would look strange in this case. Change-Id: I2222a045c293595d7b83a2fb75ca646f5cf79bca Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com> Reviewed-by: João Abecasis <joao.abecasis@nokia.com>
| * | Add template specialization of QMetaType for QObject derived pointers.Stephen Kelly2012-03-061-24/+51
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This makes it possible to do things like QVariant::fromValue(new SomeObject); without first using Q_DECLARE_METATYPE(Something*) This functionality was originally part of http://codereview.qt-project.org/#change,11710 but was rejected because the functionality was based on specialization of QVariant::fromValue which could be dangerous. This new implementation doesn't have such danger. Change-Id: I83fe941b6984be54469bc6b9191f6eacaceaa036 Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com> Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
| * Automatic metatype registration of two-template-argument types.Stephen Kelly2012-03-021-0/+22
| | | | | | | | | | | | | | | | | | | | | | This commit is complimentary to the commit which introduced a similar partial specialization for single template argument types: 6b4f8a68c8da1af7c5be7dc6075b688c9d6ca55f If T and U are available as metatypes, then QHash<T, U> is too. Change-Id: I09097b954666418b424c8c23577032beb814343a Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* | Introduce QMetaType::UnknownType.Jędrzej Nowacki2012-03-021-4/+5
|/ | | | | | | | | | | | | | | | | QMetaType::Void was ambiguous, it was pointing to a valid type (void) and in the same time it was signaling errors in QMetaType. There was no clean way to check if returned type was valid void or some unregistered type. This feature will be used by new QMetaObject revision which will store type ids instead of type names. So it will be easy to distinguish between: void mySlot(); MyUnregisteredType mySlot(); Change-Id: I73ff097f75585a95e12df74d50c6f3141153e771 Reviewed-by: Kent Hansen <kent.hansen@nokia.com> Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* Detect QMetaType::QReal from the definition of qrealOlivier Goffart2012-02-271-8/+1
| | | | | | | | | | | | | | Instead of relying to complex preprocessor expression that need to be maintained to be kept the same as in qglobal.h This aslo fix the case where QT_COORD_TYPE is defined (It is meant to be defined to float or double, any other type would not make sense) So now there should hopefully be only one place to change if one need to adjust the type of qreal Change-Id: I778312112603173562dbe675ab491b53d6cd2174 Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
* Reduce QtCore lib binary size by around ~3KB, by removing template codeJędrzej Nowacki2012-02-271-39/+27
| | | | | | | | | | | | | | | Reusing a template is much better then creating a new one, even if it should inline the same code. For some reason replacing T* by void* force gcc to remove a few bytes per template instantiation too, it is not really significant, but it alows us to simplify the code. Benchmarks don't show any regressions. Change-Id: I4fdf1e4dc311b23021eb5758605602937d05b183 Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>