# План рефакторинга 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-режиме