using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ProjectHoistingCrane.CollectionGenericObjects; /// /// Параметризованный набор обънктов /// /// Параметр: ограничение - ссылочный тип public class MassiveGenericObjects : ICollectionGenericObjects where T : class { /// /// Массив объектов, которые храним /// private T?[] _collection; public int Count => _collection.Length; public int SetMaxCount { set { if (value > 0) { _collection = new T?[value]; } } } /// /// Конструктор /// public MassiveGenericObjects() { _collection = Array.Empty(); } public T? Get(int position) { // TODO проверка позиции if (0 <= position && position <= Count) { return _collection[position]; } return null; } public int Insert(T obj) { // TODO вставка в свободное место набора for (int i = 0; i < Count; i++) { if (_collection[i] == null) { _collection[i] = obj; return i; } } return -1; } public int Insert(T obj, int position) { // TODO проверка позиции // TODO проверка что элемент массива по этой позиции пустой, если нет, то // ищется свободное место после этой позиции и идёт вставка туда // если нет после, ищем до // TODO вставка if (0 <= position && position <= Count && _collection[position] != null) { if (_collection[position] == null) { _collection[position] = obj; return position; } else { for (int i = position+1; i < Count; i++) { if (_collection[i] == null) { _collection[i] = obj; return i; } } for (int i = position-1;i >= 0;i--) { if (_collection[i] == null) { _collection[i] = obj; return i; } } } } return -1; } public T? Remove(int position) { // TODO проверка позиции // TODO удаление объекта из массива, присвоив элементу массива значени null if (0 <= position && position <= Count && _collection[position] != null) { T? obj = _collection[position]; _collection[position] = null; return obj; } return null; } }