Об этом проекте

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 или коммерческая.