/// <summary> /// Sets interval manager of chain. /// </summary> /// <param name="manager"> /// The manager. /// </param> public void SetIntervalManager(CongenericIntervalsManager manager) { intervalsManager = manager; }
/// <summary> /// Sets item in provided position. /// </summary> /// <param name="index"> /// The index. /// </param> public void Set(int index) { if (index >= length || index < 0) { throw new ArgumentOutOfRangeException("Index of added element is out of bounds (index = " + index + ", chain length = " + length + ")."); } intervalsManager = null; if (!positions.Contains(index)) { positions.Add(index); positions = positions.OrderBy(b => b).ToList(); } }
/// <summary> /// Removes element from given position. /// Also clears interval manager of chain. /// </summary> /// <param name="index"> /// Index of position. /// </param> public override void RemoveAt(int index) { intervalsManager = null; positions.Remove(index); }
/// <summary> /// Returns clone of intervals array including interval of given link. /// </summary> /// <param name="link"> /// The link. /// </param> /// <returns> /// The <see cref="T:List{int}"/>. /// </returns> public int[] GetIntervals(Link link) { if (intervalsManager == null) { intervalsManager = positions.Count != 0 ? (ICongenericIntervalsManager)new CongenericIntervalsManager(this) : new NullCongenericIntervalsManager(); } return intervalsManager.GetIntervals(link); }
/// <summary> /// Deletes given position. /// Clears element from position if any. /// Reduces chain length by 1. /// The delete at. /// </summary> /// <param name="index"> /// The index of position. /// </param> public override void DeleteAt(int index) { intervalsManager = null; length--; if (positions.Contains(index)) { positions.Remove(index); } for (int i = 0; i < positions.Count; i++) { if (index < positions[i]) { positions[i]--; } } }
/// <summary> /// Deletes chain (building and alphabet) and creates new empty chain with given length. /// Saves old element (alphabet) of chain. /// </summary> /// <param name="newLength"> /// New chain length. /// </param> /// <exception cref="ArgumentException"> /// Thrown if new length is less than 0. /// </exception> public override void ClearAndSetNewLength(int newLength) { if (newLength < 0) { throw new ArgumentException("Chain length shouldn't be less than 0."); } intervalsManager = null; length = newLength; positions = new List<int>(); }