প্রকল্প সম্পর্কে

StormByte Base হলো C++26 ভিত্তি মডিউল, যার উপর StormByte স্যুটের প্রতিটি অন্য লাইব্রেরি নির্ভর করে। পাবলিক হেডারগুলো `StormByte/`-এর অধীনে থাকে এবং namespace root হলো `StormByte`। এটির জন্য C++26 কম্পাইলার এবং CMake 3.28 বা নতুন সংস্করণ প্রয়োজন, এবং এটি Linux, Windows ও macOS-এ বিল্ড হয়। README-তে নথিভুক্ত মূল সুবিধাগুলো: - **Exceptions** — `StormByte::Exception` `StormByte.Crypto.Crypter: …`-এর মতো শ্রেণিবদ্ধ বার্তা তৈরি করে; `what()` একটি `CString` ফেরত দেয়। প্রতিটি নামযুক্ত টাইপ মডিউল `.cxx`-এ তার destructor সংজ্ঞায়িত করে, যাতে DLL সীমানা জুড়ে `catch` মিলে যায়। - **Error** — `std::error_code`-এর জন্য `Domain`, `Category`, `Code` এবং `Fault`; ক্রস-DLL ব্যবহারের জন্য `Fault::what()` একটি `CString` ফেরত দেয়। - **Expected** — `std::expected`-এর উপর স্তরভুক্ত `Expected<T, E>`, যেখানে error Base-এর heap-এ `Shared<E>` হিসেবে ধারণ করা হয় এবং `std::shared_ptr<E>`-তে রূপান্তরযোগ্য। - **Serialization** — `Serializable<T>` থেকে `BinaryData`, সর্বদা little-endian, কোনো BOM বা version tag নেই; কাস্টম টাইপগুলো `Detail::Codec<T>` বিশেষায়িত করে। Wide string-গুলো `uint64` দৈর্ঘ্যসহ UTF-8 হিসেবে যায়। - **CString / WCString** — মালিকানাধীন NUL-সমাপ্ত narrow ও wide বাফার, যা DLL সীমানা জুড়ে নিরাপদ, সাথে content equality, ordering, `swap` এবং `std::hash`। - **BinaryData** — মালিকানাধীন সংলগ্ন `std::byte` অনুক্রম, `std::vector<std::byte>`-সদৃশ API, `HexDump` আউটপুট, এবং `std::span` ও `std::vector`-এর সাথে আন্তঃকার্যক্ষমতা। - **Size / ByteSize** — `uint64_t`-ভিত্তিক unit count এবং octet length টাইপ, IEC/SI ধ্রুবক ও মানব-পাঠ্য ফরম্যাটিংসহ; area গুণফল মুছে ফেলা হয়েছে। - **UUID** — RFC 4122 version 4 জেনারেশন। - **Bitmask** — unsigned scoped enum-এর উপর CRTP flags। - **Safe pointers** — `Shared`, `Unique` এবং `Weak` স্ট্যান্ডার্ড smart pointer-গুলোর পরিপূরক, এমন অবজেক্টের জন্য যা Base-এর heap-এ মুক্ত করতে হয়; `Heap` প্রাইভেট এবং ইনস্টল করা হয় না। - **Clonable** — পলিমরফিক `Clone` / `Move`, যা `Shared` বা `Unique` পয়েন্টার ফেরত দেয়। - **ThreadLock** — owner-thread reentrant lock। - **Type concepts** — `StormByte::Type::*` concepts যেমন `String`, `Container`, `Optional`, `Pair`, `Numeral` এবং `Array`। - **Platform / visibility** — `WINDOWS` / `LINUX` / `MACOS`, `BIT32` / `BIT64`, এবং `CLANG` / `GCC` / `MSVC`-এর জন্য ম্যাক্রো। README জোর দিয়ে বলে যে পাবলিক Base API-গুলো কাঁচা `std::size_t` / `std::uint64_t`-এর বদলে count-এর জন্য `Size` এবং octet-এর জন্য `ByteSize` ব্যবহার করে। স্যুটটি ইচ্ছাকৃতভাবে বিভক্ত: Buffer, Config, Crypto, Database, Logger, Multimedia, Network, String এবং System আলাদা রিপোজিটরি, যা এটির উপর নির্ভর করে। লাইসেন্সিং LGPL v3 বা বাণিজ্যিক।