À propos du projet

StormByte Base est le module fondamental C++26 sur lequel toutes les autres bibliothèques de la suite StormByte se lient. Les en-têtes publics se trouvent sous `StormByte/` et la racine du namespace est `StormByte`. Il nécessite un compilateur C++26 et CMake 3.28 ou plus récent, et se compile sur Linux, Windows et macOS. Fonctionnalités principales documentées dans le README : - **Exceptions** — `StormByte::Exception` construit des messages hiérarchiques tels que `StormByte.Crypto.Crypter: …` ; `what()` renvoie un `CString`. Chaque type nommé définit son destructeur dans le fichier `.cxx` du module afin que `catch` fonctionne à travers les frontières de DLL. - **Error** — `Domain`, `Category`, `Code` et `Fault` pour `std::error_code` ; `Fault::what()` renvoie un `CString` pour un usage inter-DLL. - **Expected** — `Expected<T, E>` superposé à `std::expected`, avec l'erreur conservée sous forme de `Shared<E>` sur le tas de Base et convertible en `std::shared_ptr<E>`. - **Sérialisation** — `Serializable<T>` vers `BinaryData`, toujours en little-endian, sans BOM ni balise de version ; les types personnalisés spécialisent `Detail::Codec<T>`. Les chaînes larges sont transmises en UTF-8 avec une longueur `uint64`. - **CString / WCString** — tampons étroits et larges terminés par NUL et possédés, sûrs à travers les frontières de DLL, avec égalité de contenu, ordonnancement, `swap` et `std::hash`. - **BinaryData** — séquence contiguë de `std::byte` possédée avec une API similaire à `std::vector<std::byte>`, sortie `HexDump`, et interopérabilité avec `std::span` et `std::vector`. - **Size / ByteSize** — types de comptage d'unités et de longueur en octets basés sur `uint64_t` avec constantes IEC/SI et formatage lisible par l'humain ; les produits d'aires sont supprimés. - **UUID** — génération de version 4 selon la RFC 4122. - **Bitmask** — indicateurs CRTP sur une énumération à portée non signée. - **Pointeurs sûrs** — `Shared`, `Unique` et `Weak` complètent les pointeurs intelligents standard pour les objets qui doivent être libérés sur le tas de Base ; `Heap` est privé et non installé. - **Clonable** — `Clone` / `Move` polymorphes renvoyant des pointeurs `Shared` ou `Unique`. - **ThreadLock** — verrou réentrant lié au thread propriétaire. - **Concepts de types** — concepts `StormByte::Type::*` tels que `String`, `Container`, `Optional`, `Pair`, `Numeral` et `Array`. - **Plateforme / visibilité** — macros pour `WINDOWS` / `LINUX` / `MACOS`, `BIT32` / `BIT64`, et `CLANG` / `GCC` / `MSVC`. Le README souligne que les API publiques de Base utilisent `Size` pour les comptages et `ByteSize` pour les octets plutôt que `std::size_t` / `std::uint64_t` bruts. La suite est délibérément divisée : Buffer, Config, Crypto, Database, Logger, Multimedia, Network, String et System sont des dépôts séparés qui dépendent de celui-ci. La licence est LGPL v3 ou commerciale.