From 5939e2b489ef67e2a3ae7351e3176bf16f06bfa1 Mon Sep 17 00:00:00 2001
From: Kirill <39030726+Kirill3455@users.noreply.github.com>
Date: Thu, 4 Apr 2024 09:36:31 +0400
Subject: [PATCH] =?UTF-8?q?=D0=9A=D0=BE=D0=BB=D0=BB=D0=B5=D0=BA=D1=86?=
=?UTF-8?q?=D0=B8=D1=8F=20=D0=BE=D0=B1=D1=8A=D0=B5=D0=BA=D1=82=D0=BE=D0=B2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ICollectionGenericObjects.cs | 43 +++++++++
.../MassiveGenericObjects.cs | 88 +++++++++++++++++++
2 files changed, 131 insertions(+)
create mode 100644 ProjectRoadTrain/ProjectRoadTrain/CollectionGenericObjects/ICollectionGenericObjects.cs
create mode 100644 ProjectRoadTrain/ProjectRoadTrain/CollectionGenericObjects/MassiveGenericObjects.cs
diff --git a/ProjectRoadTrain/ProjectRoadTrain/CollectionGenericObjects/ICollectionGenericObjects.cs b/ProjectRoadTrain/ProjectRoadTrain/CollectionGenericObjects/ICollectionGenericObjects.cs
new file mode 100644
index 0000000..173b24a
--- /dev/null
+++ b/ProjectRoadTrain/ProjectRoadTrain/CollectionGenericObjects/ICollectionGenericObjects.cs
@@ -0,0 +1,43 @@
+namespace ProjectRoadTrain.CollectionGenericObjects;
+
+///
+/// Интерфейс описания действий для набора хранимых объектов
+///
+/// Параметр: ограничение - ссылочный тип
+public interface ICollectionGenericObjects
+where T : class
+{
+ ///
+ /// Количество объектов в коллекции
+ ///
+ int Count { get; }
+ ///
+ /// Установка максимального количества элементов
+ ///
+ int SetMaxCount { set; }
+ ///
+ /// Добавление объекта в коллекцию
+ ///
+ /// Добавляемый объект
+ /// true - вставка прошла удачно, false - вставка не удалась
+ int Insert(T obj);
+ ///
+ /// Добавление объекта в коллекцию на конкретную позицию
+ ///
+ /// Добавляемый объект
+ /// Позиция
+ /// true - вставка прошла удачно, false - вставка не удалась
+ int Insert(T obj, int position);
+ ///
+ /// Удаление объекта из коллекции с конкретной позиции
+ ///
+ /// Позиция
+ /// true - удаление прошло удачно, false - удаление не удалось
+ T? Remove(int position);
+ ///
+ /// Получение объекта по позиции
+ ///
+ /// Позиция
+ /// Объект
+ T? Get(int position);
+}
diff --git a/ProjectRoadTrain/ProjectRoadTrain/CollectionGenericObjects/MassiveGenericObjects.cs b/ProjectRoadTrain/ProjectRoadTrain/CollectionGenericObjects/MassiveGenericObjects.cs
new file mode 100644
index 0000000..c699eb7
--- /dev/null
+++ b/ProjectRoadTrain/ProjectRoadTrain/CollectionGenericObjects/MassiveGenericObjects.cs
@@ -0,0 +1,88 @@
+namespace ProjectRoadTrain.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)
+ {
+ // проверка позиции
+ if (position >= _collection.Length || position < 0)
+ {
+ return null;
+ }
+ return _collection[position];
+ }
+ public int Insert(T obj)
+ {
+ // вставка в свободное место набора
+ int index = 0;
+ while (index < _collection.Length)
+ {
+ if (_collection[index] == null)
+ {
+ _collection[index] = obj;
+ return index;
+ }
+ index++;
+ }
+ return -1;
+ }
+ public int Insert(T obj, int position)
+ {
+
+ if (position >= _collection.Length || position < 0)
+ { return -1; }
+
+ if (_collection[position] == null)
+ {
+ _collection[position] = obj;
+ return position;
+ }
+ int index;
+
+ for (index = position + 1; index < _collection.Length; ++index)
+ {
+ if (_collection[index] == null)
+ {
+ _collection[position] = obj;
+ return position;
+ }
+ }
+
+ for (index = position - 1; index >= 0; --index)
+ {
+ if (_collection[index] == null)
+ {
+ _collection[position] = obj;
+ return position;
+ }
+ }
+ return -1;
+ }
+ public T Remove(int position)
+ {
+ if (position >= _collection.Length || position < 0)
+ { return null; }
+ T DrawningAircraft = _collection[position];
+ _collection[position] = null;
+ return DrawningAircraft;
+ }
+}