# About Much like boost.io this library is a replacement of the standard C/C++ libraries. It provides most features needed when designing applications in a cross-platform manner. The goal for this project is for it to be compiled and run on anything which means embedded hardware support. This project does not fully follow the C++ standard. ### Features - Audio IO/Processing/Manipulation - Image Processing/Manipulation - 3D Model & Mesh Processing/Manipulation - File IO - Basic File Monitoring - Console IO - 2/3/4D Vectors - 2x2/3x3/4x4 Matrices - Hardware/Software Level Math Functions - Smart Pointers - Threads - Mutexes - Semaphores - CPU information and features at runtime - HTTP(S) Sockets - TCP Socket - UDP Socket - COM (Serial) IO - UTF_8/16/32 Character Encoding - Spotify Integration - Twitch Integration - Json Parsing/Writing - User Friendly HID Input - Basic Garbage Collector - Linked List - Array - Vector - Asynchronous Task System - URI Parsing ### Supported Architectures - AMD64 - AARCH64 ### Supported Operating Systems - Windows - Linux # Compiling ## Prerequisites ### Windows - [Visual Studio Community](https://visualstudio.microsoft.com/vs/community/) - [Netwide Assembler](https://www.nasm.us/) - [CMake](https://cmake.org/) - [vcpkg](https://learn.microsoft.com/en-us/vcpkg/get_started/get-started?pivots=shell-cmd) ### Linux - **Arch Linux**: `sudo pacman -S gcc nasm cmake alsa-lib libxcb xcb-util-cursor` - **Debian Linux**: `sudo apt install gcc nasm cmake libasound2-dev libxcb1-dev libxcb-xinput-dev libxcb-cursor-dev` For building on the Raspberry Pi instead of the Netwide Assembler (NASM), GCC's Assembler is used. ## Building ### Linux 1. `cmake -DCMAKE_BUILD_TYPE=Release -DLINUX_WINDOW_SYSTEM:STRING=XCB /path/to/source` 2. `cmake --build /path/to/build --config Release` The `LINUX_WINDOW_SYSTEM` variable in the first step can be either `XCB` for the X Window System or `Wayland` for the Wayland Window System. Wayland support is currently not fully supported yet, use only `XCB`. ### Windows 1. `cmake -A x64 -DCMAKE_BUILD_TYPE=Release --preset=default .` 2. `cmake --build build --config Release` # Simple Example ```cpp #include #include ehs::Int_32 Main(ehs::Str_8* appName, ehs::Str_8* appVerId, ehs::Version* appVer) { // Simple identifying meta-data for the logger. *appName = "Simple Example App"; // The application's name *appVerId = "Release"; // The app's version prefix; i.e. Alpha, Beta or Release as an example. *appVer = {1, 0, 0}; // The app's version major, minor and patch number. ehs::Console::Write_8("How old are you?"); // Write to the console in UTF_8 character encoding. ehs::Str_8 response = ehs::Console::Read_8(); // Read from the console in UTF_8 character encoding. if (!response.IsNum()) { ehs::Console::Clear(); // Clear the console's buffer. return Main(appName, appVerId, appVer); // Repeat process if given response is not a number. } ehs::UInt_8 age = response.ToDecimal(); // Converts the string number into a number based primitive. ehs::Console::Write("Your age is " + ehs::Str_8::FromNum(age) + "."); // Write the console with the age converted back to string. return 0; } ```