diff --git a/ProjectExcavator/ProjectExcavator/CollectionGenericObjects/AbstractCompany.cs b/ProjectExcavator/ProjectExcavator/CollectionGenericObjects/AbstractCompany.cs
index 86ce348..3772f55 100644
--- a/ProjectExcavator/ProjectExcavator/CollectionGenericObjects/AbstractCompany.cs
+++ b/ProjectExcavator/ProjectExcavator/CollectionGenericObjects/AbstractCompany.cs
@@ -57,9 +57,9 @@ public abstract class AbstractCompany
/// Компания
/// Добавляемый объект
///
- public static bool operator +(AbstractCompany company, DrawningBulldozer bulldozer)
+ public static int operator +(AbstractCompany company, DrawningBulldozer bulldozer)
{
- return company._collection?.Insert(bulldozer) ?? false;
+ return company._collection.Insert(bulldozer);
}
///
@@ -68,9 +68,9 @@ public abstract class AbstractCompany
/// Компания
/// Номер удаляемого объекта
///
- public static bool operator -(AbstractCompany company, int position)
+ public static DrawningBulldozer operator -(AbstractCompany company, int position)
{
- return company._collection?.Remove(position) ?? false;
+ return company._collection.Remove(position);
}
///
diff --git a/ProjectExcavator/ProjectExcavator/CollectionGenericObjects/ICollectionGenericObjects.cs b/ProjectExcavator/ProjectExcavator/CollectionGenericObjects/ICollectionGenericObjects.cs
index 8af06e7..af57cfc 100644
--- a/ProjectExcavator/ProjectExcavator/CollectionGenericObjects/ICollectionGenericObjects.cs
+++ b/ProjectExcavator/ProjectExcavator/CollectionGenericObjects/ICollectionGenericObjects.cs
@@ -22,7 +22,7 @@ public interface ICollectionGenericObjects
///
/// Добавляемый объект
/// true - вставка прошла успешно, false - вставка не удалась
- bool Insert(T obj);
+ int Insert(T obj);
///
/// Добавление элемента в коллекцию на конкретную позицию
@@ -30,14 +30,14 @@ public interface ICollectionGenericObjects
/// Добавляемый элемент
/// Позиция
/// true - вставка прошла успешно, false - вставка не удалась
- bool Insert(T obj, int position);
+ int Insert(T obj, int position);
///
/// Удаление объекта из коллекции с конкретной позиции
///
/// Позиция
/// true - удаление прошло успешно, false - удаление не удалось
- bool Remove(int position);
+ T? Remove(int position);
///
/// Получение объекта по позиции
diff --git a/ProjectExcavator/ProjectExcavator/CollectionGenericObjects/MassiveGenericObjects.cs b/ProjectExcavator/ProjectExcavator/CollectionGenericObjects/MassiveGenericObjects.cs
index d4b4179..dbfaa4f 100644
--- a/ProjectExcavator/ProjectExcavator/CollectionGenericObjects/MassiveGenericObjects.cs
+++ b/ProjectExcavator/ProjectExcavator/CollectionGenericObjects/MassiveGenericObjects.cs
@@ -30,11 +30,11 @@ public class MassiveGenericObjects : ICollectionGenericObjects
if (position >= _collection.Length || position < 0)
{
return null;
- }
+ }
return _collection[position];
}
- public bool Insert(T obj)
+ public int Insert(T obj)
{
// TODO вставка в свободное место набора
int index = 0;
@@ -43,14 +43,14 @@ public class MassiveGenericObjects : ICollectionGenericObjects
if (_collection[index] == null)
{
_collection[index] = obj;
- return true;
+ return index;
}
index++;
}
- return false;
+ return -1;
}
- public bool Insert(T obj, int position)
+ public int Insert(T obj, int position)
{
// TODO проверка позиции
// TODO проверка, что элемент массива по этой позиции пустой, если нет, то
@@ -58,39 +58,49 @@ public class MassiveGenericObjects : ICollectionGenericObjects
// если нет после, ищем до
// TODO вставка
if (position >= _collection.Length || position < 0)
- return false;
+ return -1;
- while (position + 1 < _collection.Length)
+ // TODO проверка, что элемент массива по этой позиции пустой, если нет, то
+ if (_collection[position] != null)
{
- if (_collection[position] == null)
+ // проверка, что после вставляемого элемента в массиве есть пустой элемент
+ int nullIndex = -1;
+ for (int i = position + 1; i < Count; i++)
{
- _collection[position] = obj;
- return true;
+ if (_collection[i] == null)
+ {
+ nullIndex = i;
+ break;
+ }
}
- position++;
- }
-
- while (position - 1 >= 0)
- {
- if (_collection[position] == null)
+ // Если пустого элемента нет, то выходим
+ if (nullIndex < 0)
{
- _collection[position] = obj;
- return true;
+ return -1;
+ }
+ // сдвиг всех объектов, находящихся справа от позиции до первого пустого элемента
+ int j = nullIndex - 1;
+ while (j >= position)
+ {
+ _collection[j + 1] = _collection[j];
+ j--;
}
- position--;
}
- return false;
+ // TODO вставка по позиции
+ _collection[position] = obj;
+ return position;
}
- public bool Remove(int position)
+ public T? Remove(int position)
{
// TODO проверка позиции
// TODO удаление объекта из массива, присвоив элементу массива значение null
if (position >= _collection.Length || position < 0)
{
- return false;
+ return null;
}
+ T temp = _collection[position];
_collection[position] = null;
- return true;
+ return temp;
}
}
diff --git a/ProjectExcavator/ProjectExcavator/FormBulldozerCollection.cs b/ProjectExcavator/ProjectExcavator/FormBulldozerCollection.cs
index 6c4389e..96d151e 100644
--- a/ProjectExcavator/ProjectExcavator/FormBulldozerCollection.cs
+++ b/ProjectExcavator/ProjectExcavator/FormBulldozerCollection.cs
@@ -78,7 +78,7 @@ public partial class FormBulldozerCollection : Form
return;
}
- if (_company + drawningBulldozer)
+ if (_company + drawningBulldozer != -1)
{
MessageBox.Show("Объект добавлен");
pictureBox.Image = _company.Show();
@@ -114,7 +114,7 @@ public partial class FormBulldozerCollection : Form
}
int pos = Convert.ToInt32(maskedTextBoxPosition.Text);
- if (_company - pos)
+ if (_company - pos != null)
{
MessageBox.Show("Объект удален");
pictureBox.Image = _company.Show();