Skip to content

Добавить класс pstringview — интернированная read-only персистная строка (задача #92)#93

Merged
netkeep80 merged 3 commits intonetkeep80:mainfrom
konard:issue-92-b58d4fd52250
Feb 28, 2026
Merged

Добавить класс pstringview — интернированная read-only персистная строка (задача #92)#93
netkeep80 merged 3 commits intonetkeep80:mainfrom
konard:issue-92-b58d4fd52250

Conversation

@konard
Copy link
Copy Markdown
Contributor

@konard konard commented Feb 28, 2026

Описание

Реализует задачу #92: создание нового класса pstringview — read-only персистная строка с интернированием (аналог string_view для ПАП).

Что сделано

pstringview.h — новый заголовочный файл, содержащий:

  • pstringview — read-only персистная строка с интернированием:

    • Хранит uintptr_t length и uintptr_t chars_offset (смещение массива char в ПАП)
    • Метод intern(const char*) — поиск/добавление строки в таблицу интернирования
    • Деструктор не освобождает chars_offset — строки живут вечно в ПАП
    • operator== работает за O(1): сравнивает chars_offset (интернирование гарантирует одинаковый указатель для одинаковых строк)
    • Поддерживает operator< для использования как ключ в pmap
  • pstringview_table — персистная хэш-таблица интернирования (открытая адресация, linear probing):

    • Строки добавляются, но никогда не удаляются (перманентный пул)
    • Автоматически перехэшируется при load factor > 0.5
    • Живёт только в ПАП; раскладка: count_, capacity_, buckets_ (3 × sizeof(void*))
  • pstringview_manager — синглтон для доступа к таблице:

    • Хранит смещение таблицы в статической переменной
    • Метод reset() для очистки в тестах

tests/test_pstringview.cpp — 13 тестов:

  • Проверки layout (sizeof)
  • Нулевая инициализация
  • Интернирование строк (одинаковые строки → один chars_offset)
  • Операторы ==, !=, <
  • Пустые строки и nullptr
  • 10 различных строк с повторным интернированием

Соответствие требованиям задачи #92

Требование Реализация
read-only строки pstringview не имеет методов изменения данных
только создаются в ПАП, никогда не удаляются деструктор не освобождает chars_offset
одинаковые строки → один персистный указатель таблица интернирования pstringview_table
ключ для pmap тривиально копируем, operator<, operator==
поиск по таблице при создании pstringview::intern()
аналог string_view (название pstringview) файл назван pstringview.h

CI

Все проверки CI пройдены ✅:

  • clang-format check ✓
  • windows-latest / msvc ✓
  • File size check (≤ 1500 lines) ✓
  • ubuntu-latest / clang ✓
  • cppcheck ✓
  • ubuntu-latest / gcc ✓
  • macos-latest / clang ✓

Fixes #92


This PR was updated automatically by the AI issue solver

konard and others added 2 commits February 28, 2026 17:30
Adding CLAUDE.md with task information for AI processing.
This file will be removed when the task is complete.

Issue: netkeep80#92
…ока (задача netkeep80#92)

- Новый заголовочный файл pstringview.h с классом pstringview
  (read-only строка с интернированием, аналог string_view для ПАП)
- pstringview_table — персистная хэш-таблица (open addressing, linear probing)
  для хранения уникальных строк в ПАП: строки добавляются но никогда не удаляются
- pstringview_manager — синглтон для доступа к таблице интернирования
- Оператор == использует O(1) сравнение chars_offset (интернирование гарантирует
  что одинаковые строки всегда имеют один указатель)
- Новый файл tests/test_pstringview.cpp: 13 тестов, 100% проходят

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@konard konard changed the title [WIP] создание нового класса kstring Добавить класс pstringview — интернированная read-only персистная строка (задача #92) Feb 28, 2026
@konard konard marked this pull request as ready for review February 28, 2026 17:48
@konard
Copy link
Copy Markdown
Contributor Author

konard commented Feb 28, 2026

🤖 Solution Draft Log

This log file contains the complete execution trace of the AI solution draft process.

💰 Cost estimation:

  • Public pricing estimate: $1.910475
  • Calculated by Anthropic: $1.953869 USD
  • Difference: $0.043394 (+2.27%)
    📎 Log file uploaded as Gist (8103KB)
    🔗 View complete solution draft log

Now working session is ended, feel free to review and add any feedback on the solution draft.

@konard
Copy link
Copy Markdown
Contributor Author

konard commented Feb 28, 2026

🔄 Auto-restart 1/3

Detected uncommitted changes from previous run. Starting new session to review and commit them.

Uncommitted files:

?? issue-92.txt
?? issue-comments.json
?? md-files.txt
?? pam-content.txt
?? persist-content.txt
?? pmap-content.txt
?? pr-93.txt
?? pstring-content.txt
?? repo-structure.txt
?? tests-list.txt

Auto-restart will stop after changes are committed or after 2 more iterations. Please wait until working session will end and give your feedback.

@konard
Copy link
Copy Markdown
Contributor Author

konard commented Feb 28, 2026

🔄 Auto-restart 1/3 Log

This log file contains the complete execution trace of the AI solution draft process.

💰 Cost estimation:

  • Public pricing estimate: $1.602294
  • Calculated by Anthropic: $1.411597 USD
  • Difference: $-0.190697 (-11.90%)
    📎 Log file uploaded as Gist (10194KB)
    🔗 View complete solution draft log

Now working session is ended, feel free to review and add any feedback on the solution draft.

@konard
Copy link
Copy Markdown
Contributor Author

konard commented Feb 28, 2026

✅ Ready to merge

This pull request is now ready to be merged:

  • All CI checks have passed
  • No merge conflicts
  • No pending changes

Monitored by hive-mind with --auto-restart-until-mergeable flag

@netkeep80 netkeep80 merged commit dd1cc9e into netkeep80:main Feb 28, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

создание нового класса kstring

2 participants