plan for pivector2d

This commit is contained in:
2026-02-26 19:43:13 +03:00
parent 6041a72f30
commit 35772fc2d1

70
plans/pivector2d.md Normal file
View File

@@ -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<ssize_t, ssize_t> на PIVector2DIndex
### 2.1 Создать структуру PIVector2DIndex
```cpp
struct PIVector2DIndex {
ssize_t row;
ssize_t col;
};
```
### 2.2 Обновить return types
Методы для изменения:
- indexOf() -> возвращает PIVector2DIndex вместо PIPair<ssize_t, ssize_t>
- lastIndexOf()
- indexWhere()
- lastIndexWhere()
### 2.3 Обновить тесты и документацию
---
## Этап 3: Дополнительные улучшения (опционально)
- Добавить методы для работы с диапазонами
- Оптимизировать методы удаления строк/столбцов
- Добавить проверку границ в debug-режиме