Major Features

Non intrusive

nCore does not collide with your existing work, everything is contained in a single dedicated namespace and every #defines are appropriately prefixed to avoid namespace polluting (which seems to be a "national sport" launched by the people at Microsoft for their so famous polluting defines in the platform SDK :) ).

Debugging support

While being open source, which is already a good thing for debugging practice, nCore in debug mode, performs lot of sanity/security checks to track down bugs as soon as possible.

Simple to use

nCore is full of little C++ classes, you can integrate them independently to your work.
nCore only needs two calls from your application (at the begin and the end) to initialize and uninitialize it.

Multi platform awareness

nCore was coded with a multiplatform awareness in mind, but I cannot implement it myself on a very wide range of platforms ("emulators are not everything" (c) :) ).
Thus, as usual, a kind-of autodetect task is performed during compile-time to switch on dedicated parts of the library, and every parts of code required to be platform specific are left blank with an #error C++ tag when target platform is unsupported.
As a side note, cross-compiling has also been tested (for ARM targets only).

Keep only what you want

You can manually disable most of the nCore features by simply commenting one line per feature in a dedicated and well-documented configuration file just before compiling it.
This can make the final binary file size twice smaller than a full version.

Extended Logging support (optional)

A configurable logger on which you can attach several "sinks", i.e. the default ones (stdout, stderr, text file, OutputDebugString) or customized ones.
This may sounds "overkill" but this can be very helpful when enabled.

Optional FileIO module

This module will allows you to handle File or Memory file in the same way according to the wanted endianess.
Those classes are not derived from std::*stream classes but work basically the same way by implementing << and >> redirecting operators.
Those IO operations can be buffered or memory mapped if you want them to.

Optional MemoryManager module

This module is an adapted version of the work of Paul Nettle (see its MMGR code) and will allows you to perform complete trace of memory allocations made by nCore and its client sides.

Optional Threading module

Beyond the usual Thread class you may find in this kind of implementations (natively implemented on Windows, using pthread on Linux flavors), this module contains classes to handle mutex objects, atomic counters, and thread local storage (TSS).
Client side threads can poll and receive signals from other threads periodically.
Because Linux lacks of serious support for some kind-of completion ports (this is a fact, not a troll, but I know there are/were some patches to the Kernel and things are going ahead now) and support for waiting multiple blocking objects at time, I could not go further in the design so everything is flattened thus letting you an entire free willingness (this is the good side).

Optional Networking module

IPv4 and IPv6 aware networking stack.
Socket polling is using the best and portable polling method according to the target platform.
This module also has a simple SMTP sender for example, to send alert mails to an administrator, or to send a memory dump (support for multiple file attachments).

Miscellaneous utils

Last but not least, nCore contains several independent and optional (mostly) util classes to perform some dedicated tasks like :

  • Advanced string manipulation (see the StringA class)
  • Hashing (String Hashing, MD5, CRC32, CRC16, CRC8, ...)
  • Time counting (high precision)
  • Loading Dynamic Library
  • Dog-tagging (a tool to create/modify some specific tagged values in a binary file)
  • Creating/Comparing GUID
  • Handling text configuration files
  • Handling smart pointers
  • Handling version numbers

And so on...