NanoSTL is good for using STL-like feature in your C++ application and C++-like JIT compiler.
NanoSTL is portable, it should run well on many environments including Windows, Linux, macOS, x86, ARM, SPARC, etc.
NanoSTL should work well on C++11 compiler or later. C++03 would also work well.
Eearly testing stage. Not ready for the production use.
Be careful! Not all C++ STL functions are supported for each module.
- vector
- string
- algorithm
- limits
- map
- math : Approximate math functions. Please keep in mind this is basically not be IEEE-754 compliant and does not consier a processor's rounding mode.
- valarray
- isnan
- isinf
- isfinite
- isnormal
- fabs(float)
- copysign(float)
- sqrt(float) Approximated.
- exp(float)
- pow(float)
- log(float)
- log10(float)
- sin(float)
- cos(float)
- tanh(float)
- cbrt(float)
- erf(float)
- erfc(float)
- ierf(float)
- 64bit and 32bit machine.
- Big endian and little endian
- Some math functions may not run on big endian machine.
Even though NanoSTL should be compilable with older and various C++ compilers, at least following compilers shold work well.
- gcc 4.4.7+
- NanoSTL itself can be compilable with gcc 4.2.4(fails to compile Catch unit test code)
- clang 3.4+
NanoSTL assumes following type definitions.
- char : 8bit(NOTE: unsigned is default for some ARM compiler. Use
signed char
if you want signed 8bit type) - short : 16bit
- int : 32bit
- long long : 64bit
- float : 32bit IEEE754 floating point.
- double : 64bit IEEE754 floating point.
NANOSTL_BIG_ENDIAN
Set endianness to big endian. Considering to support various compilers, user must explicitly specify endianness to the compiler. Default is little endian.
- RTTI and exception is not supported.
- Returns
NULL
when memory allocation failed(nobad_alloc
)
- complex type
- CUDA NVRTC support
- isnan/isinf/isfinite support
- Unit tests
- Multithread support
- Backport of some C++11 features(e.g.
unordered_map
) - Replace oiio math functions so that we can have clean MIT licensed code.
- FLOAT16 and BFLOAT16 support.
$ python scripts/generateSingleHeader.py
Compiling unit test requires C++11 compiler since unit test uses some C++11 math functions for the reference.
$ cd tests
$ make
$ ./test
Use NANOSTL_DEBUG
define for debugging.
MIT license. Some functions in nanomath is licenced under modified BSD license.
- acutest : MIT license.
- faster math functions: Some math functions implemented in nanomath is grabbed from OpenImageIO fmath.h, which is licensed under modified BSD license. https://github.com/OpenImageIO/oiio/