internal Square(Coordinate c, int numPossibleValues) { Coordinate = c; NumPossibleValues = numPossibleValues; _possibleValues = new PossibleValue[numPossibleValues]; for (int i = 0; i < NumPossibleValues; i++) { _possibleValues[i] = new PossibleValue(this, i); } _valuesDroppedOnSelect = new Stack <PossibleValue>(NumPossibleValues); }
private Square(Square other) { Coordinate = other.Coordinate; NumPossibleValues = other.NumPossibleValues; _possibleValues = new PossibleValue[other._possibleValues.Length]; for (int i = 0; i < _possibleValues.Length; i++) { PossibleValue?otherPossibleValue = other._possibleValues[i]; if (otherPossibleValue is null || otherPossibleValue.State != PossibleSquareState.UNKNOWN) { continue; } _possibleValues[i] = new PossibleValue(this, i); } _valuesDroppedOnSelect = new Stack <PossibleValue>(NumPossibleValues); }
internal PossibleValue[] GetStillPossibleValues() { Debug.Assert( _selectedValueIndex is null, $"Can't retrieve possible values from Square at {Coordinate} when the index {_selectedValueIndex} is already selected."); var possibleValues = new PossibleValue[NumPossibleValues]; int i = 0; foreach (PossibleValue?possibleValue in _possibleValues) { if (possibleValue != null && possibleValue.State == PossibleSquareState.UNKNOWN) { possibleValues[i] = possibleValue; if (++i == NumPossibleValues) { return(possibleValues); } } } throw new ApplicationException($"Expected to find {NumPossibleValues} possible values but only found {i}."); }