diff options
Diffstat (limited to 'src/QXmppInvokable.cpp')
| -rw-r--r-- | src/QXmppInvokable.cpp | 144 |
1 files changed, 72 insertions, 72 deletions
diff --git a/src/QXmppInvokable.cpp b/src/QXmppInvokable.cpp index 785a135a..cc100b67 100644 --- a/src/QXmppInvokable.cpp +++ b/src/QXmppInvokable.cpp @@ -30,7 +30,7 @@ #include <qdebug.h> QXmppInvokable::QXmppInvokable( QObject *parent ) - : QObject( parent ) + : QObject( parent ) { } @@ -43,88 +43,88 @@ QXmppInvokable::~QXmppInvokable() QVariant QXmppInvokable::dispatch( const QByteArray & method, const QList< QVariant > & args ) { - buildMethodHash(); - - if( !m_methodHash.contains(method)) - return QVariant(); - - int idx = m_methodHash[method]; - if( paramTypes( args) != metaObject()->method(idx).parameterTypes ()) - return QVariant(); - - const char *typeName = metaObject()->method(idx).typeName(); - int resultType = QMetaType::type(typeName); - void *result = QMetaType::construct(resultType, 0); - - QGenericReturnArgument ret( typeName, result ); - QList<QGenericArgument> genericArgs; - QList<QVariant>::ConstIterator iter = args.begin(); - while( iter != args.end()) - { - const void *data = iter->data(); - const char *name = iter->typeName(); - genericArgs << QGenericArgument(name,data); - ++iter; - } - - if( QMetaObject::invokeMethod ( this, method.constData(), ret, - genericArgs.value(0, QGenericArgument() ), - genericArgs.value(1, QGenericArgument() ), - genericArgs.value(2, QGenericArgument() ), - genericArgs.value(3, QGenericArgument() ), - genericArgs.value(4, QGenericArgument() ), - genericArgs.value(5, QGenericArgument() ), - genericArgs.value(6, QGenericArgument() ), - genericArgs.value(7, QGenericArgument() ), - genericArgs.value(8, QGenericArgument() ), - genericArgs.value(9, QGenericArgument() )) ) - { - QVariant returnValue( resultType, result); - QMetaType::destroy(resultType, result); - return returnValue; - } - else - { - qDebug("No such method '%s'", method.constData() ); - return QVariant(); - } + buildMethodHash(); + + if( !m_methodHash.contains(method)) + return QVariant(); + + int idx = m_methodHash[method]; + if( paramTypes( args) != metaObject()->method(idx).parameterTypes ()) + return QVariant(); + + const char *typeName = metaObject()->method(idx).typeName(); + int resultType = QMetaType::type(typeName); + void *result = QMetaType::construct(resultType, 0); + + QGenericReturnArgument ret( typeName, result ); + QList<QGenericArgument> genericArgs; + QList<QVariant>::ConstIterator iter = args.begin(); + while( iter != args.end()) + { + const void *data = iter->data(); + const char *name = iter->typeName(); + genericArgs << QGenericArgument(name,data); + ++iter; + } + + if( QMetaObject::invokeMethod ( this, method.constData(), ret, + genericArgs.value(0, QGenericArgument() ), + genericArgs.value(1, QGenericArgument() ), + genericArgs.value(2, QGenericArgument() ), + genericArgs.value(3, QGenericArgument() ), + genericArgs.value(4, QGenericArgument() ), + genericArgs.value(5, QGenericArgument() ), + genericArgs.value(6, QGenericArgument() ), + genericArgs.value(7, QGenericArgument() ), + genericArgs.value(8, QGenericArgument() ), + genericArgs.value(9, QGenericArgument() )) ) + { + QVariant returnValue( resultType, result); + QMetaType::destroy(resultType, result); + return returnValue; + } + else + { + qDebug("No such method '%s'", method.constData() ); + return QVariant(); + } } QList< QByteArray > QXmppInvokable::paramTypes( const QList< QVariant > & params ) { - QList<QByteArray> types; - foreach( QVariant variant, params) - types << variant.typeName(); - return types; + QList<QByteArray> types; + foreach( QVariant variant, params) + types << variant.typeName(); + return types; } void QXmppInvokable::buildMethodHash( ) { - QWriteLocker locker(&m_lock); - if( m_methodHash.size() > 0 ) - return; - - int methodCount = metaObject()->methodCount (); - for( int idx = 0; idx < methodCount; ++idx) - { - QByteArray signature = metaObject()->method(idx).signature(); - m_methodHash[signature.left(signature.indexOf('('))] = idx; -// qDebug() << metaObject()->method(idx).parameterTypes(); - } + QWriteLocker locker(&m_lock); + if( m_methodHash.size() > 0 ) + return; + + int methodCount = metaObject()->methodCount (); + for( int idx = 0; idx < methodCount; ++idx) + { + QByteArray signature = metaObject()->method(idx).signature(); + m_methodHash[signature.left(signature.indexOf('('))] = idx; +// qDebug() << metaObject()->method(idx).parameterTypes(); + } } QStringList QXmppInvokable::interfaces( ) const { - QStringList results; - int methodCount = metaObject()->methodCount (); - for( int idx = 0; idx < methodCount; ++idx) - { - if( metaObject()->method(idx).methodType() == QMetaMethod::Slot ) - { - QByteArray signature = metaObject()->method(idx).signature(); - results << signature.left(signature.indexOf('(')); - } - } - return results; + QStringList results; + int methodCount = metaObject()->methodCount (); + for( int idx = 0; idx < methodCount; ++idx) + { + if( metaObject()->method(idx).methodType() == QMetaMethod::Slot ) + { + QByteArray signature = metaObject()->method(idx).signature(); + results << signature.left(signature.indexOf('(')); + } + } + return results; } |
