프로젝트 소개

StormByte Base는 StormByte 제품군의 다른 모든 라이브러리가 링크하는 C++26 기반 모듈입니다. 공개 헤더는 `StormByte/` 아래에 있으며 네임스페이스 루트는 `StormByte`입니다. C++26 컴파일러와 CMake 3.28 이상이 필요하며 Linux, Windows, macOS에서 빌드됩니다. README에 문서화된 핵심 기능: - **예외** — `StormByte::Exception`은 `StormByte.Crypto.Crypter: …`와 같은 계층적 메시지를 구성하며, `what()`은 `CString`을 반환합니다. 각 명명된 타입은 모듈 `.cxx`에서 소멸자를 정의하므로 DLL 경계를 넘어 `catch`가 일치합니다. - **Error** — `std::error_code`를 위한 `Domain`, `Category`, `Code`, `Fault`; `Fault::what()`은 DLL 간 사용을 위해 `CString`을 반환합니다. - **Expected** — `std::expected` 위에 계층화된 `Expected<T, E>`로, 오류는 Base의 힙에 `Shared<E>`로 보관되며 `std::shared_ptr<E>`로 변환 가능합니다. - **직렬화** — `Serializable<T>`에서 `BinaryData`로, 항상 리틀 엔디언이며 BOM이나 버전 태그가 없습니다. 사용자 정의 타입은 `Detail::Codec<T>`를 특수화합니다. 와이드 문자열은 `uint64` 길이와 함께 UTF-8로 전달됩니다. - **CString / WCString** — DLL 경계를 넘어 안전한 소유형 NUL 종료 좁은/와이드 버퍼로, 내용 동등성, 순서, `swap`, `std::hash`를 지원합니다. - **BinaryData** — `std::vector<std::byte>`와 유사한 API, `HexDump` 출력, `std::span` 및 `std::vector`와의 상호 운용성을 갖춘 소유형 연속 `std::byte` 시퀀스입니다. - **Size / ByteSize** — IEC/SI 상수와 사람이 읽을 수 있는 형식을 갖춘 `uint64_t` 기반 단위 개수 및 옥텟 길이 타입이며, 면적 곱은 삭제됩니다. - **UUID** — RFC 4122 버전 4 생성. - **Bitmask** — 부호 없는 범위 지정 열거형에 대한 CRTP 플래그입니다. - **안전 포인터** — Base의 힙에서 해제되어야 하는 객체를 위해 표준 스마트 포인터를 보완하는 `Shared`, `Unique`, `Weak`; `Heap`은 비공개이며 설치되지 않습니다. - **Clonable** — `Shared` 또는 `Unique` 포인터를 반환하는 다형적 `Clone` / `Move`입니다. - **ThreadLock** — 소유자 스레드 재진입 잠금입니다. - **타입 개념** — `String`, `Container`, `Optional`, `Pair`, `Numeral`, `Array`와 같은 `StormByte::Type::*` 개념입니다. - **플랫폼 / 가시성** — `WINDOWS` / `LINUX` / `MACOS`, `BIT32` / `BIT64`, `CLANG` / `GCC` / `MSVC`를 위한 매크로입니다. README는 공개 Base API가 원시 `std::size_t` / `std::uint64_t` 대신 개수에는 `Size`를, 옥텟에는 `ByteSize`를 사용한다는 점을 강조합니다. 제품군은 의도적으로 분리되어 있습니다: Buffer, Config, Crypto, Database, Logger, Multimedia, Network, String, System은 이 라이브러리에 의존하는 별도 저장소입니다. 라이선스는 LGPL v3 또는 상용입니다.