diff --git a/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/AbstractCompany.cs b/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/AbstractCompany.cs
index b51eee6..b6ade53 100644
--- a/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/AbstractCompany.cs
+++ b/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/AbstractCompany.cs
@@ -64,7 +64,7 @@ public abstract class AbstractCompany
///
public static int operator +(AbstractCompany company, DrawningBoat boat)
{
- return company._collection.Insert(boat);
+ return company._collection.Insert(boat, new DrawiningBoatEqutables());
}
///
diff --git a/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/ICollectionGenericObjects.cs b/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/ICollectionGenericObjects.cs
index 87947a5..3dfa33a 100644
--- a/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/ICollectionGenericObjects.cs
+++ b/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/ICollectionGenericObjects.cs
@@ -25,16 +25,18 @@ public interface ICollectionGenericObjects
/// Добавление объекта в коллекцию
///
/// Добавляемый объект
+ /// /// Cравнение двух объектов
/// true - вставка прошла удачно, false - вставка не удалась
- int Insert(T obj);
+ int Insert(T obj, IEqualityComparer? comparer = null);
///
/// Добавление объекта в коллекцию на конкретную позицию
///
///Добавляемый объект
/// Позиция
+ /// /// Cравнение двух объектов
/// true - вставка прошла удачно, false - вставка не удалась
- int Insert(T obj, int position);
+ int Insert(T obj, int position, IEqualityComparer? comparer = null);
///
/// Удаление объекта из коллекции с конкретной позиции
diff --git a/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/ListGenericObjects.cs b/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/ListGenericObjects.cs
index e169041..1d3a5c4 100644
--- a/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/ListGenericObjects.cs
+++ b/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/ListGenericObjects.cs
@@ -59,11 +59,16 @@ public class ListGenericObjects : ICollectionGenericObjects
}
return _collection[position];
}
- public int Insert(T obj)
+ public int Insert(T obj, IEqualityComparer? comparer = null)
{
- // todo выброс ошибки если переплонение
+ /// todo выброс ошибки если переплонение
/// TODO проверка, что не превышено максимальное количество элементов
+ // todo выброс ошибки если такой объект есть в коллекции
+ if (_collection.Contains(obj, comparer))
+ {
+ throw new ArgumentException("Добавляемый объект уже существует в коллекции");
+ }
/// TODO вставка в конец набора
if (_maxCount <= Count)
{
@@ -77,15 +82,20 @@ public class ListGenericObjects : ICollectionGenericObjects
}
- public int Insert(T obj, int position)
+ public int Insert(T obj, int position, IEqualityComparer? comparer = null)
{
/// TODO проверка, что не превышено максимальное количество элементов
/// TODO проверка позиции
/// TODO вставка по позиции
+ // todo выброс ошибки если такой объект есть в коллекции
if (_maxCount <= Count)
{
throw new CollectionOverflowException(Count);
}
+ if (_collection.Contains(obj, comparer))
+ {
+ throw new ArgumentException("Добавляемый объект уже существует в коллекции");
+ }
if (position < 0 || position >= Count)
{
throw new PositionOutOfCollectionException(position);
diff --git a/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/MassiveGenericObjects.cs b/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/MassiveGenericObjects.cs
index 756adfc..52e97b9 100644
--- a/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/MassiveGenericObjects.cs
+++ b/ProjectMotorBoat/ProjectMotorBoat/CollectionGenericObjects/MassiveGenericObjects.cs
@@ -61,47 +61,19 @@ public class MassiveGenericObjects : ICollectionGenericObjects
if (_collection[position] == null) throw new ObjectNotFoundException(position);
return _collection[position];
}
- public int Insert(T obj)
- //todo выброс ошибки если переполнение
+ public int Insert(T obj, IEqualityComparer? comparer = null)
+ // todo выброс ошибки если такой объект есть в коллекции
+ ///todo выброс ошибки если переполнение
///to do
- {
- for (int i = 0; i < _collection.Length; i++)
- {
- if (_collection[i] == null)
- {
- _collection[i] = obj;
- return i;
- }
- }
- throw new CollectionOverflowException(Count);
- }
- public int Insert(T obj, int position)
- //todo выброс ошибки если переполнение
- // todo выброс ошибки если выход за границы массива
- ///to do
- {
- if (position < 0 || position >= _collection.Length)
- {
- throw new PositionOutOfCollectionException(position);
- }
- if (_collection[position] == null)
+ {
+ if (_collection.Contains(obj, comparer))
{
- _collection[position] = obj;//вставка
- return position;
+ throw new ArgumentException("Добавляемый объект уже существует в коллекции");
}
else
{
- for (int i = position + 1; i < _collection.Length; i++)
- {
- if (_collection[i] == null)
- {
- _collection[i] = obj;//вставка
- return i;
- }
- }
-
- for (int i = position - 1; i >= 0; i--)
+ for (int i = 0; i < _collection.Length; i++)
{
if (_collection[i] == null)
{
@@ -109,8 +81,54 @@ public class MassiveGenericObjects : ICollectionGenericObjects
return i;
}
}
+ throw new CollectionOverflowException(Count);
+ }
+ }
+ public int Insert(T obj, int position, IEqualityComparer? comparer = null)
+ // todo выброс ошибки если такой объект есть в коллекции
+
+ ///todo выброс ошибки если переполнение
+ /// todo выброс ошибки если выход за границы массива
+ ///to do
+ {
+ if (_collection.Contains(obj, comparer))
+ {
+ throw new ArgumentException("Добавляемый объект уже существует в коллекции");
+ }
+ else
+ {
+ if (position < 0 || position >= _collection.Length)
+ {
+ throw new PositionOutOfCollectionException(position);
+ }
+
+ if (_collection[position] == null)
+ {
+ _collection[position] = obj;//вставка
+ return position;
+ }
+ else
+ {
+ for (int i = position + 1; i < _collection.Length; 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;
+ }
+ }
+ }
+ throw new CollectionOverflowException(Count);
}
- throw new CollectionOverflowException(Count);
}
public T Remove(int position)
//todo выброс ошибки если выход за границы массива
diff --git a/ProjectMotorBoat/ProjectMotorBoat/Drawnings/DrawiningBoatEqutables.cs b/ProjectMotorBoat/ProjectMotorBoat/Drawnings/DrawiningBoatEqutables.cs
new file mode 100644
index 0000000..82f0f9a
--- /dev/null
+++ b/ProjectMotorBoat/ProjectMotorBoat/Drawnings/DrawiningBoatEqutables.cs
@@ -0,0 +1,69 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Diagnostics.CodeAnalysis;
+using ProjectMotorBoat.Entities;
+
+namespace ProjectMotorBoat.Drawnings;
+
+///
+/// Реализация сравнения двух объектов класса-прорисовки
+///
+public class DrawiningBoatEqutables : IEqualityComparer
+{
+ public bool Equals(DrawningBoat? x, DrawningBoat? y)
+ {
+ if (x == null || x.EntityBoat == null)
+ {
+ return false;
+ }
+ if (y == null || y.EntityBoat == null)
+ {
+ return false;
+ }
+ if (x.GetType().Name != y.GetType().Name)
+ {
+ return false;
+ }
+ if (x.EntityBoat.Speed != y.EntityBoat.Speed)
+ {
+ return false;
+ }
+ if (x.EntityBoat.Weight != y.EntityBoat.Weight)
+ {
+ return false;
+ }
+ if (x.EntityBoat.BodyColor != y.EntityBoat.BodyColor)
+ {
+ return false;
+ }
+ if (x is DrawningMotorBoat && y is DrawningMotorBoat)
+ {
+ // TODO доделать логику сравнения дополнительных параметров
+ EntityMotorBoat _x = (EntityMotorBoat)x.EntityBoat;
+ EntityMotorBoat _y = (EntityMotorBoat)y.EntityBoat;
+
+ if (_x.AdditionalColor != _y.AdditionalColor)
+ {
+ return false;
+ }
+ if (_x.Glass != _y.Glass)
+ {
+ return false;
+ }
+ if (_x.Engine != _y.Engine)
+ {
+ return false;
+ }
+
+ }
+ return true;
+ }
+
+ public int GetHashCode([DisallowNull] DrawningBoat obj)
+ {
+ return obj.GetHashCode();
+ }
+}
diff --git a/ProjectMotorBoat/ProjectMotorBoat/Drawnings/DrawningBoatCompareByColor.cs b/ProjectMotorBoat/ProjectMotorBoat/Drawnings/DrawningBoatCompareByColor.cs
new file mode 100644
index 0000000..5341136
--- /dev/null
+++ b/ProjectMotorBoat/ProjectMotorBoat/Drawnings/DrawningBoatCompareByColor.cs
@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Security.Cryptography.Xml;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ProjectMotorBoat.Drawnings;
+
+///
+/// Сравнение по цвету, скорости, весу
+///
+public class DrawningBoatCompareByColor : IComparer
+{
+ public int Compare(DrawningBoat? x, DrawningBoat? y)
+ {
+ // TODO прописать логику сравения по цветам, скорости, весу
+ if (x.EntityBoat.BodyColor != y.EntityBoat.BodyColor)
+ {
+ return -1;
+ }
+ var speedCompare = x.EntityBoat.Speed.CompareTo(y.EntityBoat.Speed);
+ if (speedCompare != 0)
+ {
+ return speedCompare;
+ }
+ return x.EntityBoat.Weight.CompareTo(y.EntityBoat.Weight);
+ }
+}
diff --git a/ProjectMotorBoat/ProjectMotorBoat/Drawnings/DrawningBoatCompareByType.cs b/ProjectMotorBoat/ProjectMotorBoat/Drawnings/DrawningBoatCompareByType.cs
new file mode 100644
index 0000000..64cda83
--- /dev/null
+++ b/ProjectMotorBoat/ProjectMotorBoat/Drawnings/DrawningBoatCompareByType.cs
@@ -0,0 +1,35 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ProjectMotorBoat.Drawnings;
+
+///
+/// Сравнение по типу, скорости, весу
+///
+public class DrawningBoatCompareByType : IComparer
+{
+ public int Compare(DrawningBoat? x, DrawningBoat? y)
+ {
+ if (x == null || x.EntityBoat == null)
+ {
+ return -1;
+ }
+ if (y == null || y.EntityBoat == null)
+ {
+ return 1;
+ }
+ if (x.GetType().Name != y.GetType().Name)
+ {
+ return x.GetType().Name.CompareTo(y.GetType().Name);
+ }
+ var speedCompare = x.EntityBoat.Speed.CompareTo(y.EntityBoat.Speed);
+ if (speedCompare != 0)
+ {
+ return speedCompare;
+ }
+ return x.EntityBoat.Weight.CompareTo(y.EntityBoat.Weight);
+ }
+}