From 16f4b21f9488ff56f28d057280fb23930745abad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B0=D0=BB=D0=B5=D1=80=D0=B8=D1=8F=20=D0=9D=D0=B8?= =?UTF-8?q?=D0=BA=D0=B8=D1=84=D0=BE=D1=80=D0=BE=D0=B2=D0=B0?= Date: Thu, 8 Dec 2022 19:44:04 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A1=D1=80=D0=B0=D0=B2=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=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 --- .../AccordionBus/DrawningObjectBus.cs | 52 +++++++++++++++++++ AccordionBus/AccordionBus/IDrawningObject.cs | 2 +- .../AccordionBus/MapWithSetBusesGeneric.cs | 2 +- AccordionBus/AccordionBus/SetBusesGeneric.cs | 7 ++- 4 files changed, 60 insertions(+), 3 deletions(-) diff --git a/AccordionBus/AccordionBus/DrawningObjectBus.cs b/AccordionBus/AccordionBus/DrawningObjectBus.cs index 82be0ff..5c56ef6 100644 --- a/AccordionBus/AccordionBus/DrawningObjectBus.cs +++ b/AccordionBus/AccordionBus/DrawningObjectBus.cs @@ -39,5 +39,57 @@ namespace AccordionBus public string GetInfo() => _bus?.GetDataForSave(); public static IDrawningObject Create(string data) => new DrawningObjectBus(data.CreateDrawningBus()); + + public bool Equals(IDrawningObject? other) + { + if (other == null) + { + return false; + } + var otherBus = other as DrawningObjectBus; + if (otherBus == null) + { + return false; + } + var bus = _bus.Bus; + var otherBusBus = otherBus._bus.Bus; + if (bus.GetType() != otherBusBus.GetType()) + { + return false; + } + if (bus.Speed != otherBusBus.Speed) + { + return false; + } + if (bus.Weight != otherBusBus.Weight) + { + return false; + } + if (bus.BodyColor != otherBusBus.BodyColor) + { + return false; + } + // проверка в случае продвинутого объекта + if (bus is EntityAccordionBus entityAccordionBus && otherBusBus is EntityAccordionBus otherEntityAccordionBus) + { + if (entityAccordionBus.DopColor != otherEntityAccordionBus.DopColor) + { + return false; + } + if (entityAccordionBus.Compartment != otherEntityAccordionBus.Compartment) + { + return false; + } + if (entityAccordionBus.RearviewMirror != otherEntityAccordionBus.RearviewMirror) + { + return false; + } + if (entityAccordionBus.BusNumber != otherEntityAccordionBus.BusNumber) + { + return false; + } + } + return true; + } } } diff --git a/AccordionBus/AccordionBus/IDrawningObject.cs b/AccordionBus/AccordionBus/IDrawningObject.cs index d5a475e..8857f2b 100644 --- a/AccordionBus/AccordionBus/IDrawningObject.cs +++ b/AccordionBus/AccordionBus/IDrawningObject.cs @@ -10,7 +10,7 @@ namespace AccordionBus /// /// Интерфейс для работы с объектом, прорисовываемым на форме /// - internal interface IDrawningObject + internal interface IDrawningObject : IEquatable { /// /// Шаг перемещения объекта diff --git a/AccordionBus/AccordionBus/MapWithSetBusesGeneric.cs b/AccordionBus/AccordionBus/MapWithSetBusesGeneric.cs index 9f71cf2..d3f8e5a 100644 --- a/AccordionBus/AccordionBus/MapWithSetBusesGeneric.cs +++ b/AccordionBus/AccordionBus/MapWithSetBusesGeneric.cs @@ -13,7 +13,7 @@ namespace AccordionBus /// /// internal class MapWithSetBusesGeneric - where T : class, IDrawningObject + where T : class, IDrawningObject, IEquatable where U : AbstractMap { /// diff --git a/AccordionBus/AccordionBus/SetBusesGeneric.cs b/AccordionBus/AccordionBus/SetBusesGeneric.cs index ac8ebe7..83ef24a 100644 --- a/AccordionBus/AccordionBus/SetBusesGeneric.cs +++ b/AccordionBus/AccordionBus/SetBusesGeneric.cs @@ -11,7 +11,7 @@ namespace AccordionBus /// /// internal class SetBusesGeneric - where T : class + where T : class, IEquatable { /// /// Список объектов, которые храним @@ -49,6 +49,11 @@ namespace AccordionBus /// Возвращает позицию вставленного объекта, либо -1 если его не удалось вставить public int Insert(T bus, int position) { + // Проверка на уникальность + if (_places.Contains(bus)) + { + return -1; + } //проверка позиции if (Count == _maxCount) {