2023-10-18 21:34:48 +04:00
|
|
|
package ProjectStormtrooper;
|
|
|
|
|
|
|
|
public class SetGeneric<T extends DrawingPlane> {
|
|
|
|
private T[] _places;
|
2023-10-20 22:43:07 +04:00
|
|
|
public int Count;
|
|
|
|
|
|
|
|
public SetGeneric(int count) {
|
2023-10-18 21:34:48 +04:00
|
|
|
_places = (T[]) new DrawingPlane[count];
|
2023-10-20 22:43:07 +04:00
|
|
|
Count = count;
|
2023-10-18 21:34:48 +04:00
|
|
|
}
|
2023-10-20 22:43:07 +04:00
|
|
|
|
|
|
|
public int Insert(T plane) {
|
2023-10-18 21:34:48 +04:00
|
|
|
return Insert(plane, 0);
|
|
|
|
}
|
2023-10-20 22:43:07 +04:00
|
|
|
|
|
|
|
public int Insert(T plane, int position) {
|
2023-10-18 21:34:48 +04:00
|
|
|
// Проверка позиции
|
2023-10-20 22:43:07 +04:00
|
|
|
if (position < 0 || position >= Count) {
|
2023-10-18 21:34:48 +04:00
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
// Проверка, что элемент массива по этой позиции пустой
|
2023-10-20 22:43:07 +04:00
|
|
|
if (_places[position] != null) {
|
2023-10-18 21:34:48 +04:00
|
|
|
// Проверка, что после вставляемого элемента в массиве есть пустой элемент
|
|
|
|
int nullIndex = -1;
|
2023-10-20 22:43:07 +04:00
|
|
|
for (int i = position + 1; i < Count; i++) {
|
|
|
|
if (_places[i] == null) {
|
2023-10-18 21:34:48 +04:00
|
|
|
nullIndex = i;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// Если пустого элемента нет, то выходим
|
2023-10-20 22:43:07 +04:00
|
|
|
if (nullIndex < 0) {
|
2023-10-18 21:34:48 +04:00
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
// Сдвиг всех объектов, находящихся справа от позиции до первого пустого элемента
|
|
|
|
int j = nullIndex - 1;
|
2023-10-20 22:43:07 +04:00
|
|
|
while (j >= position) {
|
2023-10-18 21:34:48 +04:00
|
|
|
_places[j + 1] = _places[j];
|
|
|
|
j--;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// Вставка по позиции
|
|
|
|
_places[position] = plane;
|
|
|
|
return position;
|
|
|
|
}
|
2023-10-20 22:43:07 +04:00
|
|
|
|
|
|
|
public T Remove(int position) {
|
2023-10-18 21:34:48 +04:00
|
|
|
// Проверка позиции
|
2023-10-20 22:43:07 +04:00
|
|
|
if (position < 0 || position >= Count) {
|
2023-10-18 21:34:48 +04:00
|
|
|
return null;
|
|
|
|
}
|
|
|
|
// Удаление объекта из массива, присвоив элементу массива значение null
|
|
|
|
T plane = _places[position];
|
|
|
|
_places[position] = null;
|
|
|
|
return plane;
|
|
|
|
}
|
2023-10-20 22:43:07 +04:00
|
|
|
|
|
|
|
public T Get(int position) {
|
2023-10-18 21:34:48 +04:00
|
|
|
// Проверка позиции
|
2023-10-20 22:43:07 +04:00
|
|
|
if (position < 0 || position >= Count) {
|
2023-10-18 21:34:48 +04:00
|
|
|
return null;
|
|
|
|
}
|
|
|
|
return _places[position];
|
|
|
|
}
|
|
|
|
}
|