A collection of useful C++ routines.
Go to file
Danny Robson d3f434b523 coord: make template parameters more flexible
The coordinate system was unable to support types that prohibited
redim or retype operations. Additionally, the `tags' type used for
providing named data parameters was unwiedly.

We remove much of the dependance on template template parameters in the
defined operations and instead define these in terms of a template
specialisation of is_coord.

The tag types were replaced with direct specialisation of the `store'
struct by the primary type, and passing this type through use of the
CRTP.
2017-11-22 17:03:00 +11:00
algo build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
alloc build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
cmake@06bb32ff00 cmake: bump for warning reduction 2017-06-05 17:07:37 +10:00
coord coord: make template parameters more flexible 2017-11-22 17:03:00 +11:00
crypto build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
doc doc: add noise documentation stubs 2016-02-02 10:36:42 +11:00
fixup/experimental build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
geom coord: make template parameters more flexible 2017-11-22 17:03:00 +11:00
hash coord: make template parameters more flexible 2017-11-22 17:03:00 +11:00
json build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
memory build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
posix build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
rand build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
roots use nested namespace declarations 2017-01-05 15:06:49 +11:00
test coord: make template parameters more flexible 2017-11-22 17:03:00 +11:00
tools hash/crc: parameterise crc for reflection, and 64 bits 2017-02-14 19:47:12 +11:00
types comparator: workaround clang structured bindings ICE 2017-06-29 15:28:58 +10:00
win32 build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
.gitignore test/json: run tests through a line wine/crlf wrapper 2016-04-27 17:13:36 +10:00
.gitmodules build: remove autotools support 2017-03-23 15:01:09 +11:00
adapter.cpp unify licences 2016-02-26 13:36:01 +11:00
adapter.hpp build: use explicit constructors 2017-05-23 12:50:51 +10:00
annotation.hpp annotation: add likely/unlikely functions 2016-08-02 18:49:42 +10:00
ascii.hpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
backtrace_execinfo.cpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
backtrace_null.cpp don't pull in namespace std 2016-03-11 13:28:56 +11:00
backtrace_stackwalk.cpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
backtrace_win32.cpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
backtrace.hpp backtrace/win32: enable win32 backtrace support 2016-04-19 16:08:56 +10:00
bezier.cpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
bezier.hpp bezier: add signed distance queries 2016-12-21 20:25:50 +11:00
bezier1.cpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
bezier2.cpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
bezier3.cpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
bitwise.cpp bitwise: use bit reversal from bit twiddling hacks 2017-02-13 17:14:30 +11:00
bitwise.hpp bitwise: use bit reversal from bit twiddling hacks 2017-02-13 17:14:30 +11:00
cast.hpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
CMakeLists.txt coord: make template parameters more flexible 2017-11-22 17:03:00 +11:00
cmdopt.cpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
cmdopt.hpp build: use explicit constructors 2017-05-23 12:50:51 +10:00
cmdopt.ipp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
colour.cpp coord: make template parameters more flexible 2017-11-22 17:03:00 +11:00
colour.hpp coord: make template parameters more flexible 2017-11-22 17:03:00 +11:00
colour.ipp coord: make template parameters more flexible 2017-11-22 17:03:00 +11:00
coord.hpp relicence under Apache-2.0 2015-04-13 18:05:28 +10:00
COPYING unify licences 2016-02-26 13:36:01 +11:00
debug_posix.cpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
debug_win32.cpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
debug.cpp build: remove unnecessary includes 2016-10-12 15:08:22 +11:00
debug.hpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
debug.ipp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
Doxyfile.in doc: improve naive doxygen support 2016-02-26 17:04:54 +11:00
endian.cpp relicence under Apache-2.0 2015-04-13 18:05:28 +10:00
endian.hpp endian: add signed byteswap 2017-01-04 22:38:15 +11:00
except.cpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
except.hpp build: use explicit constructors 2017-05-23 12:50:51 +10:00
exe_freebsd.cpp exe: split into platform units 2016-10-10 16:23:07 +11:00
exe_linux.cpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
exe_win32.cpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
exe.hpp build: use experimental::fs over boost::fs 2016-10-07 19:48:42 +11:00
extent.cpp coord: make template parameters more flexible 2017-11-22 17:03:00 +11:00
extent.hpp coord: make template parameters more flexible 2017-11-22 17:03:00 +11:00
extent.ipp extent: prefer constexpr functions over static variables 2016-12-12 17:06:55 +11:00
fixed.cpp fixed: add integer logical operators 2017-01-04 22:38:41 +11:00
fixed.hpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
float.cpp build: remove unnecessary includes 2016-10-12 15:08:22 +11:00
float.hpp build: remove unnecessary includes 2016-10-12 15:08:22 +11:00
format.cpp use nested namespace declarations 2017-01-05 15:06:49 +11:00
format.hpp build: use explicit constructors 2017-05-23 12:50:51 +10:00
format.ipp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
fourcc.cpp iostream: use consistent ostream format 2016-03-11 13:01:57 +11:00
fourcc.hpp iostream: use consistent ostream format 2016-03-11 13:01:57 +11:00
gcc.hpp relicence under Apache-2.0 2015-04-13 18:05:28 +10:00
hash.hpp hash: change default mix function to murmur2 mix 2017-06-29 16:32:58 +10:00
introspection.cpp build: remove explicit constexpr instantiations 2017-06-08 15:49:25 +10:00
introspection.hpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
io_posix.cpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
io_posix.hpp use nested namespace declarations 2017-01-05 15:06:49 +11:00
io_posix.ipp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
io_win32.cpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
io_win32.hpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
io_win32.ipp io: move view conversion operator to named function 2016-06-28 15:58:41 +10:00
io.cpp build: remove unnecessary includes 2016-10-12 15:08:22 +11:00
io.hpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
io.ipp posix/fd: extract file descriptor into own unit 2016-10-02 15:50:13 +11:00
iterator.hpp iterator: add make_indices, zip, and izip 2017-06-13 17:01:06 +10:00
libcruft-util-inline.pc.in pkg-config: remove erroneous boost build flags 2016-10-11 20:51:19 +11:00
libcruft-util-system.pc.in pkg-config: remove erroneous boost build flags 2016-10-11 20:51:19 +11:00
library_posix.cpp change const char paths to std::filesystem::path 2016-10-08 17:18:18 +11:00
library_posix.hpp change const char paths to std::filesystem::path 2016-10-08 17:18:18 +11:00
library_win32.cpp build: use path objects over c_str calls 2016-11-17 18:07:57 +11:00
library_win32.hpp build: use explicit constructors 2017-05-23 12:50:51 +10:00
library.hpp library: initial wrapper 2015-08-10 15:51:44 +10:00
LICENCE relicence under Apache-2.0 2015-04-13 18:05:28 +10:00
log.cpp log: remove duplicate listings for severity levels 2017-05-22 13:56:19 +10:00
log.hpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
log.ipp format: reimplement format rendering 2016-07-28 13:39:27 +10:00
maths.cpp maths: make round_pow2 constexpr 2017-01-04 22:40:06 +11:00
maths.hpp coord: make template parameters more flexible 2017-11-22 17:03:00 +11:00
matrix.cpp coord: make template parameters more flexible 2017-11-22 17:03:00 +11:00
matrix.hpp coord: make template parameters more flexible 2017-11-22 17:03:00 +11:00
matrix.ipp coord: make template parameters more flexible 2017-11-22 17:03:00 +11:00
matrix2.cpp coord: make template parameters more flexible 2017-11-22 17:03:00 +11:00
matrix3.cpp coord: make template parameters more flexible 2017-11-22 17:03:00 +11:00
matrix4.cpp coord: make template parameters more flexible 2017-11-22 17:03:00 +11:00
nocopy.hpp dont overinclude iostream headers 2016-03-17 18:14:40 +11:00
pascal.cpp pascal: instantiations for signed lengths 2017-05-29 17:20:43 +10:00
pascal.hpp pascal: parameterise on size type 2017-02-21 21:19:58 +11:00
platform.hpp platform: add freebsd platform defines 2016-05-13 15:23:22 +10:00
point.cpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
point.hpp coord: make template parameters more flexible 2017-11-22 17:03:00 +11:00
point.ipp point: use vector operations for distance functions 2016-12-21 20:23:43 +11:00
pointer.hpp pointer: add uintptr align function 2016-03-11 09:40:12 +11:00
polynomial.cpp polynomial: avoid unnecessary instantiation 2017-02-09 16:49:00 +11:00
polynomial.hpp polynomial: style 2016-12-21 20:23:43 +11:00
polynomial.ipp polynomial: style 2016-12-21 20:23:43 +11:00
pool.cpp relicence under Apache-2.0 2015-04-13 18:05:28 +10:00
pool.hpp pool: avoid alignment warnings on ARM 2017-01-05 19:50:28 +11:00
pool.ipp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
preprocessor.hpp preprocessor: expand argument count for MAP 2017-03-06 18:40:13 +11:00
quaternion.cpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
quaternion.hpp coord: make template parameters more flexible 2017-11-22 17:03:00 +11:00
quaternion.ipp quaternion: move out of coord infrastructure 2016-10-17 22:30:16 +11:00
raii.hpp raii: scoped_function takes a nullary void functor 2015-11-13 13:48:46 +11:00
random.cpp random: remove typed randomisers without generators 2016-11-17 18:38:08 +11:00
random.hpp coord: make template parameters more flexible 2017-11-22 17:03:00 +11:00
range.cpp range: convert static members to constexpr methods 2016-12-21 16:44:48 +11:00
range.hpp range: convert static members to constexpr methods 2016-12-21 16:44:48 +11:00
range.ipp range: convert static members to constexpr methods 2016-12-21 16:44:48 +11:00
rational.cpp rational: add type deducing divide/multiply 2015-09-21 16:36:38 +10:00
rational.hpp rational: express assignment in terms of constructors 2016-05-12 17:55:20 +10:00
rational.ipp rational: add type deducing divide/multiply 2015-09-21 16:36:38 +10:00
README readme: note the supported compiler versions 2017-06-19 15:29:41 +10:00
region.cpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
region.hpp region: prefer constexpr functions over static variables 2016-12-12 17:07:53 +11:00
region.ipp region: prefer constexpr functions over static variables 2016-12-12 17:07:53 +11:00
sarray.cpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
sarray.hpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
si.cpp relicence under Apache-2.0 2015-04-13 18:05:28 +10:00
si.hpp whitespace 2015-04-13 18:06:08 +10:00
signal.cpp relicence under Apache-2.0 2015-04-13 18:05:28 +10:00
signal.hpp build: use explicit constructors 2017-05-23 12:50:51 +10:00
signal.ipp build: remove unnecessary includes 2016-10-12 15:08:22 +11:00
stats.cpp build: remove unnecessary includes 2016-10-12 15:08:22 +11:00
stats.hpp build: use ostream/istream over iostream 2016-08-04 17:42:41 +10:00
stream.cpp stream: use scoped manipulators 2017-01-05 20:21:20 +11:00
stream.hpp build: use explicit constructors 2017-05-23 12:50:51 +10:00
string.cpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
string.hpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
stringid.cpp stringid: remove explicit synchronisation 2016-11-17 18:38:08 +11:00
stringid.hpp build: avoid type truncation warnings 2016-05-12 17:39:33 +10:00
strongdef.cpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
strongdef.hpp strongdef: remove unnecessary copy constructor 2017-01-27 14:56:54 +11:00
tap.cpp build: remove unnecessary includes 2016-10-12 15:08:22 +11:00
tap.hpp tap: temporarily remove c++17 nested namespaces 2017-02-20 18:09:23 +11:00
tap.ipp WIP tap param rename 2016-07-28 14:18:47 +10:00
term.cpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
term.hpp use nested namespace declarations 2017-01-05 15:06:49 +11:00
time_posix.cpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
time_win32.cpp time: use std::chrono for nanoseconds query 2016-04-05 11:02:54 +10:00
time.cpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
time.hpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
time.ipp time: use std::chrono for nanoseconds query 2016-04-05 11:02:54 +10:00
tuple.cpp tuple: add tuple iteration helpers 2015-04-20 17:48:11 +10:00
tuple.hpp tuple: better document the 'ignore' function 2017-06-13 17:01:06 +10:00
typeidx.cpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
typeidx.hpp typeidx: add lightweight runtime type id call 2017-05-29 17:21:11 +10:00
types.hpp types: remove elems function, prefer std::size 2016-11-17 18:06:39 +11:00
uri.cpp.rl build: fix switch/enum coverage warnings 2016-05-12 17:45:29 +10:00
uri.hpp build: avoid type truncation warnings 2016-05-12 17:39:33 +10:00
variadic.cpp variadic: add index helper type 2015-04-20 17:13:14 +10:00
variadic.hpp variadic: add accessor for the first template pack parameter 2017-06-13 17:01:06 +10:00
vector.cpp vector: prefer constexpr functions over static variables 2016-12-12 17:04:39 +11:00
vector.hpp coord: make template parameters more flexible 2017-11-22 17:03:00 +11:00
vector.ipp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
version.cpp.rl version: add more constructors, comparators 2016-06-20 13:08:24 +10:00
version.hpp build: use ostream/istream over iostream 2016-08-04 17:42:41 +10:00
view.cpp coord: make template parameters more flexible 2017-11-22 17:03:00 +11:00
view.hpp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
view.ipp build: don't use './' as an include prefix 2017-11-22 16:49:37 +11:00
zlib.cpp unify licences 2016-02-26 13:36:01 +11:00
zlib.hpp build: make single argument constructors explicit 2015-06-04 22:18:43 +10:00

A simple cross-platform C++ utility library.

Supported compilers: >=clang-4.x, >=gcc7.x; specifically, we require c++17 features such as structured bindings which aren't present in older compilers. No attempt has been made to compile under MSVC.

For the love of God, do not use the crypto routines. I am not a cryptographer or a security specialist. You have been warned.