diff --git a/Sailboat/Sailboat/SetGeneric.cs b/Sailboat/Sailboat/SetGeneric.cs new file mode 100644 index 0000000..b1db75c --- /dev/null +++ b/Sailboat/Sailboat/SetGeneric.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Sailboat.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 boat) + { + return Insert(boat, 0); + } + /// + /// Добавление объекта в набор на конкретную позицию + /// + /// Добавляемая лодка + /// Позиция + /// + public int Insert(T boat, 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] = boat; + 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]; + } + } +} \ No newline at end of file