Цель
Сделать один минимальный, явный и переиспользуемый protocol для forest domains.
Протокол должен быть достаточно маленьким, чтобы его было легко читать, проверять и применять,
и достаточно сильным, чтобы на него можно было перевести pmap, pstringview и системные домены.
Почему это нужно
Сейчас в библиотеке уже есть общий AVL-substrate, registry и частично domain-aware код,
но protocol размазан:
- часть логики сидит в
ForestDomainOps,
- часть в
pstringview::forest_domain_descriptor,
- часть в private helper'ах
PersistMemoryManager,
- часть остаётся локальной и ad hoc.
Это ухудшает interoperability, мешает упрощению и делает код похожим на "blob" из нескольких несогласованных путей.
Что надо сделать
Свести forest domain API к одному минимальному набору операций.
Ожидаемое ядро протокола:
name()
root_index()
root_index_ptr()
resolve_node(node_pptr)
less_node(lhs, rhs)
compare_key(key, node_pptr) — только если домен поддерживает поиск по внешнему ключу
validate_node(node_pptr) — опционально
Ожидаемое ядро generic ops:
find(key)
insert(node)
reset_root()
Жёсткие требования
- Не добавлять второй protocol рядом со старым.
- Не оставлять альтернативные "legacy" способы работы с domain roots.
- Не плодить новые абстракции "на будущее".
- Не превращать protocol в большой trait-blob.
- Протокол должен быть маленьким и single-purpose.
Что удалить
После введения нового protocol удалить или схлопнуть всё, что дублирует его роль:
- частные helper'ы, которые делают то же самое, но не через protocol;
- избыточные локальные обёртки вокруг
ForestDomainOps;
- любые доменные helper'ы, которые отличаются только именами.
Файлы-кандидаты
include/pmm/avl_tree_mixin.h
include/pmm/pstringview.h
include/pmm/forest_domain_mixin.inc
include/pmm/forest_registry.h
Критерии приёмки
- В кодовой базе существует один минимальный forest domain protocol.
ForestDomainOps остаётся маленьким и очевидным.
- Нет параллельных путей работы с доменными root'ами там, где можно использовать protocol.
- Общий LOC по затронутым файлам уменьшился или остался почти тем же, но без роста conceptual complexity.
- Документация и комментарии больше не называют старые helper'ы каноническими.
Формат PR для агента
В PR-описании явно показать:
- какие старые пути удалены;
- какой протокол считается каноническим;
- на сколько строк суммарно сократился код.
Цель
Сделать один минимальный, явный и переиспользуемый protocol для forest domains.
Протокол должен быть достаточно маленьким, чтобы его было легко читать, проверять и применять,
и достаточно сильным, чтобы на него можно было перевести
pmap,pstringviewи системные домены.Почему это нужно
Сейчас в библиотеке уже есть общий AVL-substrate, registry и частично domain-aware код,
но protocol размазан:
ForestDomainOps,pstringview::forest_domain_descriptor,PersistMemoryManager,Это ухудшает interoperability, мешает упрощению и делает код похожим на "blob" из нескольких несогласованных путей.
Что надо сделать
Свести forest domain API к одному минимальному набору операций.
Ожидаемое ядро протокола:
name()root_index()root_index_ptr()resolve_node(node_pptr)less_node(lhs, rhs)compare_key(key, node_pptr)— только если домен поддерживает поиск по внешнему ключуvalidate_node(node_pptr)— опциональноОжидаемое ядро generic ops:
find(key)insert(node)reset_root()Жёсткие требования
Что удалить
После введения нового protocol удалить или схлопнуть всё, что дублирует его роль:
ForestDomainOps;Файлы-кандидаты
include/pmm/avl_tree_mixin.hinclude/pmm/pstringview.hinclude/pmm/forest_domain_mixin.incinclude/pmm/forest_registry.hКритерии приёмки
ForestDomainOpsостаётся маленьким и очевидным.Формат PR для агента
В PR-описании явно показать: