عن المشروع

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`، دائمًا صغير-endian، بدون BOM أو علامة إصدار؛ الأنواع المخصصة تُخصص `Detail::Codec<T>`. السلاسل الواسعة تُنقل بصيغة UTF-8 مع طول `uint64`. - **CString / WCString** — مخازن ضيقة وواسعة مملوكة ومنتهية بـ NUL آمنة عبر حدود DLL، مع مساواة المحتوى والترتيب و`swap` و`std::hash`. - **BinaryData** — تسلسل `std::byte` متصل مملوك مع واجهة برمجة شبيهة بـ `std::vector<std::byte>`، وإخراج `HexDump`، وقابلية التشغيل مع `std::span` و`std::vector`. - **Size / ByteSize** — أنواع عدد الوحدات وطول الأوكتيت المدعومة بـ `uint64_t` مع ثوابت IEC/SI وتنسيق قابل للقراءة البشرية؛ منتجات المساحة محذوفة. - **UUID** — توليد الإصدار 4 من RFC 4122. - **Bitmask** — أعلام CRTP فوق تعداد نطاقي غير موقع. - **المؤشرات الآمنة** — `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 أن واجهات برمجة تطبيقات Base العامة تستخدم `Size` للعد و`ByteSize` للأوكتيت بدلاً من `std::size_t` / `std::uint64_t` الخام. المجموعة مقسمة عمدًا: Buffer وConfig وCrypto وDatabase وLogger وMultimedia وNetwork وString وSystem هي مستودعات منفصلة تعتمد على هذا. الترخيص هو LGPL v3 أو تجاري.