# IACore (Independent Architecture Core) ![License](https://img.shields.io/badge/license-GPLv3-blue.svg) ![Standard](https://img.shields.io/badge/C%2B%2B-20-yellow.svg) ![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20Linux-lightgrey.svg) IACore is a high-performance, battery-included C++20 foundation library designed to eliminate "dependency hell." It bundles essential systems—IPC, Logging, Networking, Compression, and Async Scheduling—into a single, coherent API. Originally developed as the internal core for IASoft (PVT) LTD., it is now open-source to provide a standardized bedrock for C++ applications. ## ✨ Features * **🚀 High-Performance IPC:** Shared-Memory Ring Buffers with wait-free SPSC synchronization. * **🌐 Networking:** Integrated HTTP/HTTPS client (wrapper around `cpp-httplib` with automatic Zlib/Gzip handling). * **🧵 Async Scheduler:** A job system with high/normal priority queues and work stealing. * **💾 File I/O:** Memory-mapped file operations and optimized binary stream readers/writers. * **📦 Compression:** Unified API for Zlib, Gzip, and Zstd. * **📜 Logging:** Thread-safe, colored console and disk logging. * **⚡ Modern C++:** Heavily uses C++20 concepts, `std::span`, and `tl::expected` for error handling. ## 🛠️ Integration IACore is built with CMake. You can include it in your project via `FetchContent` or by adding it as a subdirectory. Note: On Windows, you must have VCPKG installed and the VCPKG_ROOT environment variable set, for OpenSSL support. ### CMake Example ```cmake add_subdirectory(IACore) add_executable(MyApp Main.cpp) target_link_libraries(MyApp PRIVATE IACore) ``` ## 📦 Dependencies IACore manages its own dependencies via CMake's FetchContent. You do not need to install these manually: * nlohmann_json & glaze (JSON Parsing) * cpp-httplib (Networking) * zlib-ng & zstd (Compression) * tl-expected (Error Handling) ## 💡 Usage Examples ### 1. IPC (Manager & Node) IACore provides a manager/node architecture using shared memory. Manager: ```C++ #include // Spawns a child process and connects via Shared Memory auto nodeID = manager.SpawnNode("MyChildNodeExe"); manager.WaitTillNodeIsOnline(*nodeID); // Send data with zero-copy overhead String msg = "Hello Node"; manager.SendPacket(*nodeID, 100, {(PCUINT8)msg.data(), msg.size()}); ``` ### 2. Async Jobs ```C++ #include // Initialize worker threads (hardware_concurrency - 2) IACore::AsyncOps::InitializeScheduler(); // Schedule a task IACore::AsyncOps::Schedule *mySchedule = new IACore::AsyncOps::Schedule(); IACore::AsyncOps::ScheduleTask([](auto workerID) { printf("Running on worker %d\n", workerID); }, 0, mySchedule); // Wait for completion IACore::AsyncOps::WaitForScheduleCompletion(mySchedule); ``` ### 3. HTTP Request ```C++ #include IACore::HttpClient client("[https://api.example.com](https://api.example.com)"); auto res = client.JsonGet("/data", {}); if (res) { std::cout << "Data: " << res->value << "\n"; } else { std::cerr << "Error: " << res.error() << "\n"; } ``` ## ⚖️ License This project is licensed under the GNU General Public License v3 (GPLv3).