From: Marcus Eggenberger Date: Thu, 13 Aug 2009 20:01:45 +0000 (+0200) Subject: SignalProxy::ExtendedMetaObject cleanup X-Git-Tag: 0.5-rc1~40 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=8b4716dbe562fdea8f5d135880e050277fcec96e SignalProxy::ExtendedMetaObject cleanup --- diff --git a/src/common/signalproxy.cpp b/src/common/signalproxy.cpp index d7d2c5c7..764223e5 100644 --- a/src/common/signalproxy.cpp +++ b/src/common/signalproxy.cpp @@ -1179,42 +1179,15 @@ void SignalProxy::updateSecureState() { // ================================================== SignalProxy::ExtendedMetaObject::ExtendedMetaObject(const QMetaObject *meta) : _meta(meta), - _updatedRemotelyId(-1) + _updatedRemotelyId(_meta->indexOfSignal("updatedRemotely()")) { } -const QList &SignalProxy::ExtendedMetaObject::argTypes(int methodId) { - if(!_argTypes.contains(methodId)) { - QList paramTypes = _meta->method(methodId).parameterTypes(); - QList argTypes; - for(int i = 0; i < paramTypes.count(); i++) { - argTypes.append(QMetaType::type(paramTypes[i])); - } - _argTypes[methodId] = argTypes; - } - return _argTypes[methodId]; -} - -int SignalProxy::ExtendedMetaObject::returnType(int methodId) { - if(!_returnType.contains(methodId)) { - _returnType[methodId] = QMetaType::type(_meta->method(methodId).typeName()); - } - return _returnType[methodId]; -} - -int SignalProxy::ExtendedMetaObject::minArgCount(int methodId) { - if(!_minArgCount.contains(methodId)) { - QString signature(_meta->method(methodId).signature()); - _minArgCount[methodId] = _meta->method(methodId).parameterTypes().count() - signature.count("="); - } - return _minArgCount[methodId]; -} - -const QByteArray &SignalProxy::ExtendedMetaObject::methodName(int methodId) { - if(!_methodNames.contains(methodId)) { - _methodNames[methodId] = methodName(_meta->method(methodId)); +const SignalProxy::ExtendedMetaObject::MethodDescriptor &SignalProxy::ExtendedMetaObject::methodDescriptor(int methodId) { + if(!_methods.contains(methodId)) { + _methods[methodId] = MethodDescriptor(_meta->method(methodId)); } - return _methodNames[methodId]; + return _methods[methodId]; } int SignalProxy::ExtendedMetaObject::methodId(const QByteArray &methodName) { @@ -1333,13 +1306,6 @@ const QHash &SignalProxy::ExtendedMetaObject::receiveMap() { return _receiveMap; } -int SignalProxy::ExtendedMetaObject::updatedRemotelyId() { - if(_updatedRemotelyId == -1) { - _updatedRemotelyId = _meta->indexOfSignal("updatedRemotely()"); - } - return _updatedRemotelyId; -} - QByteArray SignalProxy::ExtendedMetaObject::methodName(const QMetaMethod &method) { QByteArray sig(method.signature()); return sig.left(sig.indexOf("(")); @@ -1392,3 +1358,20 @@ QString SignalProxy::ExtendedMetaObject::methodBaseName(const QMetaMethod &metho return methodname; } +SignalProxy::ExtendedMetaObject::MethodDescriptor::MethodDescriptor(const QMetaMethod &method) + : _methodName(SignalProxy::ExtendedMetaObject::methodName(method)), + _returnType(QMetaType::type(method.typeName())) +{ + // determine argTypes + QList paramTypes = method.parameterTypes(); + QList argTypes; + for(int i = 0; i < paramTypes.count(); i++) { + argTypes.append(QMetaType::type(paramTypes[i])); + } + _argTypes = argTypes; + + // determine minArgCount + QString signature(method.signature()); + _minArgCount = method.parameterTypes().count() - signature.count("="); +} + diff --git a/src/common/signalproxy.h b/src/common/signalproxy.h index 4cbaf220..b630fe47 100644 --- a/src/common/signalproxy.h +++ b/src/common/signalproxy.h @@ -211,17 +211,36 @@ private: // ExtendedMetaObject // ================================================== class SignalProxy::ExtendedMetaObject { + class MethodDescriptor { + public: + MethodDescriptor(const QMetaMethod &method); + MethodDescriptor() : _returnType(-1), _minArgCount(-1) {} + + inline const QByteArray &methodName() const { return _methodName; } + inline const QList &argTypes() const { return _argTypes; } + inline int returnType() const { return _returnType; } + inline int minArgCount() const { return _minArgCount; } + + private: + QByteArray _methodName; + QList _argTypes; + int _returnType; + int _minArgCount; + }; + public: ExtendedMetaObject(const QMetaObject *meta); - const QList &argTypes(int methodId); - int returnType(int methodId); - int minArgCount(int methodId); - const QByteArray &methodName(int methodId); + inline const QByteArray &methodName(int methodId) { return methodDescriptor(methodId).methodName(); } + inline const QList &argTypes(int methodId) { return methodDescriptor(methodId).argTypes(); } + inline int returnType(int methodId) { return methodDescriptor(methodId).returnType(); } + inline int minArgCount(int methodId) { return methodDescriptor(methodId).minArgCount(); } + + inline int updatedRemotelyId() { return _updatedRemotelyId; } + int methodId(const QByteArray &methodName); const QHash &syncMap(); const QHash &receiveMap(); - int updatedRemotelyId(); const QMetaObject *metaObject() const { return _meta; } @@ -230,17 +249,14 @@ public: static QString methodBaseName(const QMetaMethod &method); private: - typedef QHash > ArgHash; - typedef QHash MethodNameHash; - typedef QHash MethodIdHash; + const MethodDescriptor &methodDescriptor(int methodId); const QMetaObject *_meta; - ArgHash _argTypes; - QHash _returnType; - QHash _minArgCount; - MethodNameHash _methodNames; - MethodIdHash _methodIds; + QHash _methods; + QHash _methodIds; + int _updatedRemotelyId; // id of the updatedRemotely() signal - makes things faster + QHash _syncMap; QHash _receiveMap; };