Tools and high-level programming constructs in c++.
#include<data.hpp>
to gain all usable features. See data.hpp
for
how to use all features.
- Functional data structures
- stack
- queue
- list
- tree
- map
- set
- Functional programming
- reduce
- fold
- for_each
- map_thread
- Mathematical types
- natural numbers
- integers
- rational numbers
- complex rationals
- rational quaternions
- rational octonions
- prime fields
- polynomials
- permutations
- AKS algorithm
- Encodings
- hex
- base58
- base64
- cryptography
- AES
- SHA
- RIPEMD160
- NIST_DRBG
- concurrency
- golang-style communication channel.
- networking
- TCP protocols.
- HTTP client.
- Boost 1.80
- GMP
- PEGTL
- Crypto++ https://github.com/weidai11/cryptopp
- https://github.com/BartoszMilewski/Okasaki (included as needed)
- Rotella's implementation of AKS. (included)
- compile-time-regular-expressions https://github.com/hanickadot/compile-time-regular-expressions
- Google test
We use conan 2 for dependency management. All dependencies are available through conan 2 other than PEGTL, which must be installed separately.
- GCC v11
conan install . --build=missing
cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=Release/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release
cmake --build .
This library is an alpha product. This is what is planned for version 1.
- use c++ 20 concepts to define interfaces. (See c++20 branch)
- everything needs to be properly tested. There are tests now but they are incomplete.
- documentation.
- new features to be included.
- finite size signed and unsigned numbers for every size. There are versions of these types already but not everything about them works. See c++20 branch for overhauled versions.
- list works more like Mathematica's List.
- inner
- outer
- flatten
- riffle
- partition
- minimal polynomials using NTL.
- finite fields. Right now we do prime fields but we need to be able to generate minimal polynomials for arbitrary finite fields.
- elliptic curves using NTL.
- permutations
- merge sort
- Rabin, ElGamal, and RSA signatures.
- optimizatons
- map.remove should use matt.might.net/articles/red-black-delete/
- use NTL to hide GMP.
- use NTL integer exponentiation.
- secp256k1 should use libsecp256k1.
- required fixes
- encoding/ascii.hpp, encoding/unicode.hpp, and encoding utf8.hpp are out of date and don't work. They should either be deleted or brought up to date and working.