Sobre el proyecto

StormByte Base es el módulo base de C++26 al que enlazan todas las demás bibliotecas de la suite StormByte. Los encabezados públicos residen en `StormByte/` y la raíz del espacio de nombres es `StormByte`. Requiere un compilador de C++26 y CMake 3.28 o posterior, y compila en Linux, Windows y macOS. Facilidades principales documentadas en el README: - **Excepciones** — `StormByte::Exception` construye mensajes jerárquicos como `StormByte.Crypto.Crypter: …`; `what()` devuelve un `CString`. Cada tipo con nombre define su destructor en el módulo `.cxx` para que `catch` coincida a través de los límites de DLL. - **Error** — `Domain`, `Category`, `Code` y `Fault` para `std::error_code`; `Fault::what()` devuelve un `CString` para uso entre DLL. - **Expected** — `Expected<T, E>` construido sobre `std::expected`, con el error almacenado como un `Shared<E>` en el heap de Base y convertible a `std::shared_ptr<E>`. - **Serialización** — `Serializable<T>` a `BinaryData`, siempre little-endian, sin BOM ni etiqueta de versión; los tipos personalizados especializan `Detail::Codec<T>`. Las cadenas anchas viajan como UTF-8 con una longitud `uint64`. - **CString / WCString** — búferes propios terminados en NUL, estrechos y anchos, seguros a través de los límites de DLL, con igualdad de contenido, ordenación, `swap` y `std::hash`. - **BinaryData** — secuencia contigua propia de `std::byte` con una API similar a `std::vector<std::byte>`, salida `HexDump` e interoperabilidad con `std::span` y `std::vector`. - **Size / ByteSize** — tipos de recuento de unidades y longitud en octetos respaldados por `uint64_t`, con constantes IEC/SI y formato legible; los productos de área están eliminados. - **UUID** — generación de la versión 4 según RFC 4122. - **Bitmask** — indicadores CRTP sobre una enumeración con ámbito sin signo. - **Punteros seguros** — `Shared`, `Unique` y `Weak` complementan los punteros inteligentes estándar para objetos que deben liberarse en el heap de Base; `Heap` es privado y no se instala. - **Clonable** — `Clone` / `Move` polimórficos que devuelven punteros `Shared` o `Unique`. - **ThreadLock** — bloqueo reentrante del hilo propietario. - **Conceptos de tipo** — conceptos `StormByte::Type::*` como `String`, `Container`, `Optional`, `Pair`, `Numeral` y `Array`. - **Plataforma / visibilidad** — macros para `WINDOWS` / `LINUX` / `MACOS`, `BIT32` / `BIT64` y `CLANG` / `GCC` / `MSVC`. El README destaca que las API públicas de Base usan `Size` para recuentos y `ByteSize` para octetos en lugar de `std::size_t` / `std::uint64_t` sin procesar. La suite está deliberadamente dividida: Buffer, Config, Crypto, Database, Logger, Multimedia, Network, String y System son repositorios separados que dependen de este. La licencia es LGPL v3 o comercial.