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 or earlier is not supported)
Eearly testing stage. Not ready for the production use.
- Experimental CUDA support. You can use NanoSTL on device functions.
- See
sandbox/cuda/
- See
- vector
- string
-
to_string(float)
(using ryu) -
to_string(double)
(using ryu) -
stof
(string to float. using ryu_parse) -
stod
(string to double. using ryu_parse)
-
- algorithm
- limits
- map
Be careful! Not all C++ STL functions are supported for each module.
- 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
- cstring
- memcpy
- memmove
- strcpy
- strncpy
- strcat
- strncat
- memcmp
- strcmp
- strcoll
- strncmp
- strxfrm
- memchr
- strchr
- strcspn
- strpbrk
- strrchr
- strspn
- strstr
- strtok
- memset
- strerror
- strlen
- NULL
-
size_t
- 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)
- cassert
- assert
- CUDA
- Other platform
- assert
- To be filled...
- 64bit and 32bit machine.
- Big endian and little endian
- Some math functions may not run on big endian machine.
- CUDA device.
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.
- No thread safety Currently NanoSTL is not thread safe
- Application must care about the thread safety
- For example, need to use mutex or lock for
nanostl::vector::push_back()
operation if you are accesingnanostl::vector
object from multiple threads.
- RTTI and exception is not supported.
- Returns
NULL
when memory allocation failed(nobad_alloc
) - stof, stod
- Return (signaling) NaN for invalid input
- iostream, fstream(stdout/stdin, file IO)
- Math complex type
- CUDA support(experimental)
- isnan/isinf/isfinite support
- Unit tests
- Unit tests on CUDA platform
- Write mote unit tests for CPU platform
- 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.
Unless otherwise expressed, NanoSTL is licensed under 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/
- ryu(floating point <-> string converter). NanoSTL choose Boost 1.0 license. https://github.com/ulfjack/ryu