diff --git a/plans/pivector2d.md b/plans/pivector2d.md new file mode 100644 index 00000000..b1d54ab1 --- /dev/null +++ b/plans/pivector2d.md @@ -0,0 +1,70 @@ +# План рефакторинга PIVector2D + +## Этап 1: Выполнить наследование Row от RowConst, Col от ColConst + +### 1.1 Переместить RowConst перед Row +- Найти местоположение RowConst (текущая позиция ~строка 610) +- Переместить определение RowConst перед Row (до строки ~184) + +### 1.2 Переместить ColConst перед Col +- Найти местоположение ColConst (текущая позиция ~строка 770) +- Переместить определение ColConst перед Col (до строки ~402) + +### 1.3 Изменить класс Row +- Наследовать от RowConst: `class Row : public RowConst` +- Убрать дублирующиеся методы (они унаследованы от RowConst): + - size() + - toVector() + - operator[] (const версия) + - data() (const версия) + - indexOf() + - lastIndexOf() + - indexWhere() + - lastIndexWhere() + - forEach() (const версия) + - contains() + - entries() + - any() + - every() +- Сохранить неконстантные методы: + - operator[] (неконстантный) + - data() (неконстантный) + - operator=() + - forEach() (неконстантный) + - fill() + +### 1.4 Изменить класс Col +- Наследовать от ColConst: `class Col : public ColConst` +- Аналогично убрать дублирующиеся методы + +### 1.5 Проверить тесты +- Запустить: `./pip_math_test --gtest_filter="*Vector2D*"` + +--- + +## Этап 2: Заменить PIPair на PIVector2DIndex + +### 2.1 Создать структуру PIVector2DIndex +```cpp +struct PIVector2DIndex { + ssize_t row; + ssize_t col; +}; +``` + +### 2.2 Обновить return types +Методы для изменения: +- indexOf() -> возвращает PIVector2DIndex вместо PIPair +- lastIndexOf() +- indexWhere() +- lastIndexWhere() + +### 2.3 Обновить тесты и документацию + +--- + +## Этап 3: Дополнительные улучшения (опционально) + +- Добавить методы для работы с диапазонами +- Оптимизировать методы удаления строк/столбцов +- Добавить проверку границ в debug-режиме