- // find the proper sig -> slot matches
- QMetaMethod signal, slot;
- int matchIdx;
- for(int signalIdx = 0; signalIdx < _meta->methodCount(); signalIdx++) {
- signal = _meta->method(signalIdx);
- if(signal.methodType() != QMetaMethod::Signal)
- continue;
-
- matchIdx = -1;
- foreach(int slotIdx, slotIndexes) {
- slot = _meta->method(slotIdx);
- if(methodsMatch(signal, slot)) {
- matchIdx = slotIdx;
- break;
- }
- }
- if(matchIdx != -1) {
- slotIndexes.removeAll(matchIdx);
- syncMap[QByteArray(signal.signature())] = matchIdx;
- }
- }
- _syncMap = syncMap;
- }
- return _syncMap;
-}
-
-const QHash<int, int> &SignalProxy::ExtendedMetaObject::receiveMap() {
- if(_receiveMap.isEmpty()) {
- QHash<int, int> receiveMap;
-
- QMetaMethod requestSlot;
- QByteArray returnTypeName;
- QByteArray signature;
- QByteArray methodName;
- QByteArray params;
- int paramsPos;
- int receiverId;
- const int methodCount = _meta->methodCount();
- for(int i = 0; i < methodCount; i++) {
- requestSlot = _meta->method(i);
- if(requestSlot.methodType() != QMetaMethod::Slot)
- continue;
-
- returnTypeName = requestSlot.typeName();
- if(QMetaType::Void == (QMetaType::Type)returnType(i))
- continue;
-
- signature = QByteArray(requestSlot.signature());
- if(!signature.startsWith("request"))
- continue;
-
- paramsPos = signature.indexOf('(');
- if(paramsPos == -1)
- continue;
-
- methodName = signature.left(paramsPos);
- params = signature.mid(paramsPos);
-
- methodName = methodName.replace("request", "receive");
- params = params.left(params.count() - 1) + ", " + returnTypeName + ")";
-
- signature = QMetaObject::normalizedSignature(methodName + params);
- receiverId = _meta->indexOfSlot(signature);
-
- if(receiverId == -1) {
- signature = QMetaObject::normalizedSignature(methodName + "(" + returnTypeName + ")");
- receiverId = _meta->indexOfSlot(signature);
- }
-
- if(receiverId != -1)
- receiveMap[i] = receiverId;
- }
- _receiveMap = receiveMap;
- }
- return _receiveMap;
-}