-int SignalProxy::ExtendedMetaObject::methodId(const QByteArray &methodName) {
- if(_methodIds.contains(methodName)) {
- return _methodIds[methodName];
- } else {
- for(int i = _meta->methodOffset(); i < _meta->methodCount(); i++) {
- if(ExtendedMetaObject::methodName(_meta->method(i)) == methodName) {
- _methodIds[methodName] = i;
- return i;
- }
- }
- }
- Q_ASSERT(false);
- return -1;
-}
-
-const QHash<QByteArray, int> &SignalProxy::ExtendedMetaObject::syncMap() {
- if(_syncMap.isEmpty()) {
- QHash<QByteArray, int> syncMap;
-
- QList<int> slotIndexes;
- for(int i = 0; i < _meta->methodCount(); i++) {
- if(_meta->method(i).methodType() == QMetaMethod::Slot)
- slotIndexes << i;
- }
-
- // we're faking sync pairs for sync replies
- // --> we deliver to every slot starting with "receive"
- QByteArray slotSignature;
- QList<int>::iterator slotIter = slotIndexes.begin();
- while(slotIter != slotIndexes.end()) {
- slotSignature = QByteArray(_meta->method(*slotIter).signature());
- if(slotSignature.startsWith("receive")) {
- syncMap[slotSignature] = *slotIter;
- slotIter = slotIndexes.erase(slotIter);
- } else {
- slotIter++;
- }
- }
-
- // 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;
-}
-