Skip to content

Pagghiu/SaneCppLibraries

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.

Sane Cpp

Libraries

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
Containers 🟨 Generic containers (SC::Vector, SC::SmallVector, SC::Array) Download
Containers Serialization 🟨 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
File System Watcher Async 🟩 Async backend for FileSystemWatcher 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
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
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 case)
🟨 MVP (minimum set of features have been implemented)
🟩 Usable (a reasonable set of useful features has been implemented)

How to use Sane C++ Libraries in your project

Option 1: use single file libraries

  • Obtain a specific library:
  • #define SC_COMPILER_ENABLE_STD_CPP=1 if you plan to use the Standard C++ library
  • #include SaneCppLIBRARY.h in your headers
  • #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

  • Clone the entire repo and add it as subfolder of your project
  • Add SC.cpp to your build system of choice
  • #define SC_COMPILER_ENABLE_STD_CPP=1 if you plan to use the Standard C++ library
  • Include any public header (Libraries/[Library]/*.h)

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

Tests

Tests are built with the self-hosted SC::Build project generator, describing the builds in C++.
Check Building (contributor) to run the tests.

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