public void AddOutputSignalBinding(int index, Signal signal) { if (signal == null) { throw new ArgumentNullException("signal"); } if (_outputSignalSet[index] == null) { _outputSignalSet[index] = signal; for (int i = 0; i < _inputSignalSet.Count; i++) { if (_inputSignalSet[i] != null) { _inputSignalSet[i].AddCycles(_outputSignalSet[index], _context.GenerateTag()); } } if (UpdateIsCompletelyConnected()) { LookupAndLinkNewArchitecture(); } } else { _outputSignalSet[index] = signal; for (int i = 0; i < _inputSignalSet.Count; i++) { if (_inputSignalSet[i] != null) { _inputSignalSet[i].AddCycles(_outputSignalSet[index], _context.GenerateTag()); } } if (_completelyConnected && _currentArchitecture != null && !_currentArchitecture.RebindToPortIfSupported(this)) { LookupAndLinkNewArchitecture(); } } signal.DriveSignal(this, index); }