From fc55667cd4ec29b70ed93221e55b9e90d0f25839 Mon Sep 17 00:00:00 2001 From: Oleg_Racheevsky Date: Wed, 22 May 2024 08:22:28 +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=D0=B8=20=D0=9E=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 --- .../ICollectionGenereticObjects.cs | 44 ++++++++ .../MassiveGenereticObjects.cs | 104 ++++++++++++++++++ 2 files changed, 148 insertions(+) create mode 100644 LabOOP_1/LabOOP_1/CollectionGenereticObjects/ICollectionGenereticObjects.cs create mode 100644 LabOOP_1/LabOOP_1/CollectionGenereticObjects/MassiveGenereticObjects.cs diff --git a/LabOOP_1/LabOOP_1/CollectionGenereticObjects/ICollectionGenereticObjects.cs b/LabOOP_1/LabOOP_1/CollectionGenereticObjects/ICollectionGenereticObjects.cs new file mode 100644 index 0000000..0020964 --- /dev/null +++ b/LabOOP_1/LabOOP_1/CollectionGenereticObjects/ICollectionGenereticObjects.cs @@ -0,0 +1,44 @@ +namespace ProjectCatamaran.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/LabOOP_1/LabOOP_1/CollectionGenereticObjects/MassiveGenereticObjects.cs b/LabOOP_1/LabOOP_1/CollectionGenereticObjects/MassiveGenereticObjects.cs new file mode 100644 index 0000000..abe401f --- /dev/null +++ b/LabOOP_1/LabOOP_1/CollectionGenereticObjects/MassiveGenereticObjects.cs @@ -0,0 +1,104 @@ +namespace ProjectCatamaran.CollectionGenericObjects; + +public class MassiveGenericObjects : ICollectionGenericObjects +where T : class +{ + /// + /// Массив объектов, которые храним + /// + private T?[] _collection; + + public int Count => _collection.Length; + + public int SetMaxCount + { + set + { + if (value > 0) + { + if (_collection.Length > 0) + { + Array.Resize(ref _collection, value); + } + else + { + _collection = new T?[value]; + } + } + } + } + + /// + /// Конструктор + /// + public MassiveGenericObjects() + { + _collection = Array.Empty(); + } + + public T? Get(int position) + { + if (position >= 0 && position < Count) + { + return _collection[position]; + } + + return null; + } + + public int Insert(T obj) + { + 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) + { + if (position < 0 || position >= Count) + { + return -1; + } + if (_collection[position] == null) + { + _collection[position] = obj; + return position; + } + + 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) + { + if (position < 0 || position >= Count) + { + return null; + } + T obj = _collection[position]; + _collection[position] = null; + return obj; + } +}