Files
pip/plans/pivector2d.md
2026-02-26 22:16:28 +03:00

2.0 KiB

План рефакторинга PIVector2D

Этап 1: Выполнить наследование Row от RowConst, Col от ColConst

1.1 Найти классы Col, Row, ColConst и RowConst

  • они находятся в файле libs/main/containers/pivector2d.h

1.2 Изменить класс 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.3 Изменить класс Col

  • Наследовать от ColConst: class Col : public ColConst
  • Аналогично убрать дублирующиеся методы

1.4 Собрать проект

  • собери проект, при необходимости поправь ошибки
  • тесты не трогай

Этап 2: Проверить и поправить тесты

2.1 Запустить тесты

  • Запустить: ./build/tests/pip_math_test --gtest_filter="*Vector2D*"

2.2 Поправить код или тесты

  • внести правки в pivector2d.h

Этап 3: Заменить PIPair<ssize_t, ssize_t> на PIVector2DIndex

3.1 Создать структуру PIVector2DIndex

struct PIVector2DIndex {
    ssize_t row;
    ssize_t col;
};

3.2 Обновить return types

Методы для изменения:

  • indexOf() -> возвращает PIVector2DIndex вместо PIPair<ssize_t, ssize_t>
  • lastIndexOf()
  • indexWhere()
  • lastIndexWhere()