3.7 KiB
3.7 KiB
Обсуждение дизайна библиотеки
Поддержка Unicode
Unicode-поддержка в библиотеке означает:
- Возможность парсинга как char*, так и wchar_t*
- Возможность указания типа обработки для каждой опции (ASCII или Unicode)
- Гарантии корректной конвертации данных
Основные гарантии библиотеки
- ASCII-вход передается в ASCII-значение без изменений
- Unicode-вход передается в Unicode-значение без изменений
- При несовпадении типов происходит автоматическая конвертация через codecvt
Особенности реализации
Смешанная поддержка ASCII и Unicode:
- Возможность использования обоих типов опций одновременно
- Отсутствие необходимости писать дополнительный код для Unicode
- Совместимость с существующими библиотеками
Проблемы реализации
Основные сложности:
- Сравнение Unicode-строк
- Интернационализация имен опций
- Необходимость дополнительных настроек для корректной работы
Подход к реализации
Варианты реализации:
- Шаблонное решение с std::basic_string
- Внутренняя кодировка с конвертацией на границах
Выбранный подход:
- Использование внутренней кодировки UTF-8
- Конвертация только при необходимости
- Минимизация накладных расходов
Компоненты системы
Парсеры:
- Работа с входными строками
- Конвертация в internal encoding
- Хранение результатов в parsed_options
Описания опций:
- Поддержка смешанных типов
- Дополнительная информация о кодировке
- Гибкая обработка значений
Хранение данных:
- Конвертация при сохранении
- Информирование о типе кодировки
- Корректная работа с разными типами
Выбор внутренней кодировки
Критерии выбора:
- Скорость обработки
- Затраты памяти
- Размер кода
Принятое решение: UTF-8 как внутренняя кодировка из-за:
- Универсальности
- Эффективности для ASCII-данных
- Простоты интеграции с существующими компонентами
Особые случаи
Важные моменты:
- Предполагается ASCII-кодировка для символьных литералов
- Учет возможных проблем с комбинирующими символами
- Практическая нерелевантность проблем в большинстве случаев
Такой подход обеспечивает баланс между функциональностью, производительностью и простотой использования библиотеки.