using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Catamaran { /// /// Параметризованный набор объектов /// /// internal class SetBoatsGeneric where T : class { /// /// Массив объектов, которые храним /// private readonly T[] _places; /// /// Количество объектов в массиве /// public int Count => _places.Length; /// /// Конструктор /// /// public SetBoatsGeneric(int count) { _places = new T[count]; } /// /// Добавление объекта в набор /// /// Добавляемая лодка /// public int Insert(T boat) { for (int i = 0; i < Count; i++) { if (_places[i] == null) { _places[i] = boat; return i; } } return -1; } /// /// Добавление объекта в набор на конкретную позицию /// /// Добавляемая лодка /// Позиция /// public int Insert(T boat, int position) { // TODO проверка позиции if (position < 0 || position >= Count) return -1; // TODO проверка, что элемент массива по этой позиции пустой,если нет, то // проверка, что после вставляемого элемента в массиве есть пустой элемент // сдвиг всех объектов, находящихся справа от позиции до первого пустого элемента if (_places[position] == null) { _places[position] = boat; return position; } else { for (int i = position + 1; i < Count; i++) { if (_places[i] == null) { for (int j = i - 1; j >= position; j--) { _places[j + 1] = _places[j]; } _places[position] = boat; return position; } } return -1; } // TODO вставка по позиции } /// /// Удаление объекта из набора с конкретной позиции /// /// /// public T Remove(int position) { // TODO проверка позиции if (position < 0 || position >= Count) return null; // TODO удаление объекта из массива, присовив элементу массива значение null T removed = _places[position]; _places[position] = null; return removed; } /// /// Получение объекта из набора по позиции /// /// /// public T Get(int position) { // TODO проверка позиции if (position < 0 || position >= Count) return null; return _places[position]; } } }