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