The Compositional Numeric Library (CNL) is a C++ library of fixed-precision numeric classes which enhance integers to deliver safer, simpler, cheaper arithmetic types. Documentation can be found here.
Compiled on x86-64 and armv7. Tested on x86-86 using Travis and CircleCI.
Requires:
- GCC 5.1 / Clang 3.8
Optional:
- CMake (3.7.2)
- Boost - facilitates multiprecision support
- Doxygen - generates documentation in the doc/gh-pages directory
Tested on AppVeyor and on Windows 10 Professional with CMake 3.8.0. Requires:
- MSBuild 15.0 (VS 2017)
- CMake 3.8.0
The library is hosted on GitHub:
cd /some/directory
git clone https://github.com/johnmcfarlane/cnl.git
CNL is a header-only library so there is no need to build it. However, it comes with a number of tests and benchmarks.
-
Generate the build system:
cmake -DCNL_DEV=ON /some/directory/cnl
-
Build tests:
-
For Linux (in parallel using N cores):
cmake --build . -- -j N
-
For Windows:
cmake --build .
-
-
Run tests:
ctest
-
Generate the build system (optimized):
cmake -DCMAKE_BUILD_TYPE=Release -DCNL_DEV=ON /some/directory/cnl
-
Build benchmarks:
cmake --build . --target Benchmark
-
Run benchmarks:
src/benchmark/Benchmark
-
To describe CNL build options:
cmake -LH /some/directory/cnl
-
Then to apply an option, e.g. to disabled exceptions:
cmake -DCNL_EXCEPTIONS=OFF /some/directory/cnl
The API is exposed through headers in the include directory. Add this to your system header list and include, e.g.:
// to use a specific type:
#include <cnl/scaled_integer.h>
// or to include all CNL types:
#include <cnl/all.h>
Examples of projects using CNL:
- CDSP - Compositional DSP Library for C++;
- BrewBlox firmware - firmware for a brewery controller
- cnl_example - minimal CMake-based project which uses CNL as a dependency.
- CNL documentation
- CppCon 2017 presentation
- Embedded Artistry article
- ISO C++ papers:
All feedback greatly appreciated.