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