Об этом проекте
StormByte Base — это базовый модуль C++26, с которым компонуется каждая другая библиотека набора StormByte. Публичные заголовки находятся в `StormByte/`, корневое пространство имён — `StormByte`. Требуется компилятор C++26 и CMake 3.28 или новее; сборка поддерживается на Linux, Windows и macOS.
Основные средства, описанные в README:
- **Исключения** — `StormByte::Exception` строит иерархические сообщения вида `StormByte.Crypto.Crypter: …`; `what()` возвращает `CString`. Каждый именованный тип определяет деструктор в модуле `.cxx`, чтобы `catch` совпадал через границы DLL.
- **Error** — `Domain`, `Category`, `Code` и `Fault` для `std::error_code`; `Fault::what()` возвращает `CString` для использования через DLL.
- **Expected** — `Expected<T, E>` поверх `std::expected`, где ошибка хранится как `Shared<E>` в куче Base и может быть преобразована в `std::shared_ptr<E>`.
- **Сериализация** — `Serializable<T>` в `BinaryData`, всегда little-endian, без BOM и тега версии; пользовательские типы специализируют `Detail::Codec<T>`. Широкие строки передаются как UTF-8 с длиной `uint64`.
- **CString / WCString** — собственные буферы узких и широких символов с завершающим NUL, безопасные через границы DLL, с сравнением содержимого, упорядочиванием, `swap` и `std::hash`.
- **BinaryData** — собственная непрерывная последовательность `std::byte` с API, подобным `std::vector<std::byte>`, выводом `HexDump` и совместимостью с `std::span` и `std::vector`.
- **Size / ByteSize** — типы количества единиц и длины в октетах на основе `uint64_t` с константами IEC/SI и человекочитаемым форматированием; произведения площадей удалены.
- **UUID** — генерация версии 4 по RFC 4122.
- **Bitmask** — флаги CRTP поверх беззнакового scoped enum.
- **Безопасные указатели** — `Shared`, `Unique` и `Weak` дополняют стандартные умные указатели для объектов, которые должны освобождаться в куче Base; `Heap` является приватным и не устанавливается.
- **Clonable** — полиморфные `Clone` / `Move`, возвращающие указатели `Shared` или `Unique`.
- **ThreadLock** — реентерабельная блокировка с владельцем-потоком.
- **Концепции типов** — концепции `StormByte::Type::*`, такие как `String`, `Container`, `Optional`, `Pair`, `Numeral` и `Array`.
- **Платформа / видимость** — макросы для `WINDOWS` / `LINUX` / `MACOS`, `BIT32` / `BIT64` и `CLANG` / `GCC` / `MSVC`.
README подчёркивает, что публичные API Base используют `Size` для количеств и `ByteSize` для октетов, а не необработанные `std::size_t` / `std::uint64_t`. Набор намеренно разделён: Buffer, Config, Crypto, Database, Logger, Multimedia, Network, String и System — отдельные репозитории, зависящие от этого. Лицензирование — LGPL v3 или коммерческая.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.