bool IntToStringNode::CanConnect(ObjectHandleT<ISlot> mySlot, ObjectHandleT<ISlot> otherSlot) { bool result = false; while (true) { ObjectHandleT<INode> otherNode = otherSlot->Node(); if (this == otherNode.get()) break; if (!(mySlot->IsInput() ^ otherSlot->IsInput())) break; if (mySlot->Type() != otherSlot->Type()) break; if (mySlot->Color() != otherSlot->Color()) break; auto connectedSlots = mySlot->GetConnectedSlots(); result = (std::find_if(connectedSlots->begin(), connectedSlots->end(), [&otherSlot](const ISlot* slot) { return otherSlot->Id() == slot->Id(); }) == connectedSlots->end()); break; } return result; }
bool StringSlot::Disconnect(size_t connectionID, ObjectHandleT<ISlot> slot) { assert(m_pNode != nullptr); bool result = false; auto slotPos = std::find_if(m_connectedSlots.begin(), m_connectedSlots.end(), [&slot](const ObjectHandleT<ISlot> &connectedSlot) { return slot->Id() == connectedSlot->Id(); }); if (slotPos != m_connectedSlots.end()) { result = true; m_connectedSlots.erase(slotPos); m_connectionIds.erase(connectionID); m_pNode->OnDisconnect(this, slot); } return result; }