Skip to content

Pagghiu/SaneCppLibraries

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

1,666 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Windows Linux+macOS Coverage

Sane C++ Libraries

YouTube X Discord GitHub Repo stars

Sane C++ Libraries is a set of C++ platform abstraction libraries for macOS, Windows and Linux.

Principles:
βœ… Fast compile times
βœ… Bloat free
βœ… Simple and readable code
βœ… Easy to integrate
⛔️ No C++ Standard Library / Exceptions / RTTI
⛔️ No third party build dependencies (prefer OS API)

Libraries are designed to be used as Single File Libraries with minimal dependencies between them and follow a strict No Allocations (*) policy.

Library Description Single File
Async 🟨 Async I/O (files, sockets, timers, processes, fs events, tasks) Download
Async Streams 🟨 Concurrently read, write and transform byte streams Download
Await 🟨 C++20 coroutine layer over Async Download
Containers 🟨 Generic containers (SC::Vector, SC::SmallVector, SC::Array) Download
Containers Reflection 🟨 Containers specializations for Reflection and Serialization Download
File 🟩 Synchronous Disk File I/O Download
File System 🟩 File System operations (like copy / delete) for files / dirs Download
File System Iterator 🟩 Enumerates files and directories inside a given path Download
File System Watcher 🟩 Notifications {add,remove,rename,modify} for files / dirs Download
Foundation 🟩 Primitive types, asserts, macros, Function, Span, Result Download
Hashing 🟩 Compute MD5, SHA1 or SHA256 hashes for bytes streams Download
Http πŸŸ₯ HTTP parser, client and server Download
Http Client πŸŸ₯ Streaming-first HTTP client with native OS backends Download
Memory 🟩 Custom allocators, Virtual Memory, Buffer, Segment Download
Plugin 🟨 Minimal dependency based plugin system with hot-reload Download
Process 🟩 Create child processes and redirect their input / output Download
Reflection 🟩 Describe C++ types at compile time for serialization Download
SerialPort 🟨 Serial port configuration and handling Download
Serialization Binary 🟨 Serialize to and from a binary format using Reflection Download
Serialization Text 🟨 Serialize to / from text formats (JSON) using Reflection Download
Socket 🟨 Synchronous socket networking and DNS lookup Download
Strings 🟩 String formatting / conversion / manipulation (UTF8 / UTF16) Download
Testing 🟨 Simple testing framework used by all of the other libraries Download
Threading 🟩 Atomic, thread, mutex, semaphore, barrier, rw-lock, condition Download
Time 🟨 Time handling (relative, absolute, high resolution) Download

Each library is color-coded to signal its status:
πŸŸ₯ Draft (incomplete, WIP, works on basic test cases)
🟨 MVP (a minimum set of features has been implemented)
🟩 Usable (a reasonable set of useful features has been implemented)

Sane C++ Libraries dependencies

How to use Sane C++ Libraries in your project

Option 1: use single file libraries

  1. Obtain a specific library:
  2. #include SaneCppLIBRARY.h in your headers
  3. #define SANE_CPP_IMPLEMENTATION + #include "SaneCppLIBRARY.h" in one of your .cpp files

See Building (user) for details on the (system) libraries to link.

Option 2: use all libraries together

  1. Clone the entire repo and add it as subfolder of your project
  2. Add SC.cpp to your build system of choice
  3. Include any public header (Libraries/[Library]/*.h)

See Building (user) for details on the (system) libraries to link.

Examples

  • SCTest Suite showcases most functionalities of all libraries. Check Building (contributor) for details.
  • Documentation page of each library embeds some examples and / or code snippets.
  • Examples showcases some basic examples like an AsyncWebServer and a more advanced SCExample an Async event loop integration with a GUI and usage of Plugin.
  • Tools is a collection of repository / code automation tools built using libraries themselves
    • Includes a fully self-hosted SC::Build build system where builds are imperatively described using C++ code, can generate XCode / Visual Studio / Make projects, and can also build directly through a native backend on macOS, Linux, and Windows.

No Allocations (*)

  • All libraries are designed to work inside user-provided memory buffers and can be used without dynamic memory allocation.
  • All libraries return error codes when running out of such memory buffers (except in containers assignment operators, where they will assert).
  • Memory and Containers are the only ones that will allocate by default, even if they support working inside fixed memory buffers (Opt-out allocation).
  • Await uses by default caller-owned fixed buffers, while virtual memory, malloc/free, and polymorphic allocators are explicit opt-in modes (Opt-in allocation).
  • Third-party container classes, including std:: ones, are fully supported (see InteropSTL for an example).
  • Memory and Containers are provided for convenience if user prefers them to std:: or to any other equivalent containers library, and they're totally optional.

Documentation

Documentation is automatically generated using Doxygen and updated at every commit to main branch.

Getting in touch

Contributing

License

Sane C++ Libraries are licensed under the MIT License, see LICENSE.txt for more information.

Videos

On this YouTube Channel there are some videos showing bits of the development process.

Blog posts

On Sane Coding Blog there is a series of posts about this project.

Relevant yearly posts:

External