* Add missing includes.
* Add libc++ < 20 fallback for floating-point strToNumber
libc++ prior to version 20 does not implement std::from_chars for
floating point types, which causes builds to fail on systems using older
libc++ versions (e.g. FreeBSD).
Add a small fallback using strtof/strtod/strtold for building with
libc++ < 20.
While libstdc++, or libc++ 20 or later continue to use the existing
std::from_chars implementation, this change restores compatibility with
older libc++ versions.
* signals: use tuple reference and check if listeners is empty
use forward_as_tuple as ít creates a temporary tuple reference instead
of copying/moving each argument. also if guard the emitInternal to only
create locals if there is actually any listeners.
* signal: revert forward_as_tuple
cant use references as signals expect a copy/move.
use is_trivially_copyable instead because is_arithmetic_v exludes small
POD structs, enums, and certain trivially copyable types.
also add a if guard in emit if we have no listeners, no point emitting.
Apparently on some setups directly modifying the rectangles is a no-go, see #78.
Pixman is another piece of undocumented shit. I hope whomever wrote this stubs their toe.
Note to self: drop pixman, rewrite region. Fucking idiots.
while profiling vector showed up as a marginal waster because it wasnt a
trivial class, a few if(m_someVector != Vector()) was causing a lot of
churn because of not being trivial and doing a lot of allocaitons and
destructions. make it trivial by defaulting constructor, and destructor,
and while we are at it make it constexpr friendly on constructors and
operators.
modernize validHierarchy and isConstructible, mark move operator
noexcept, use default destructor instead of {}, __deleter is a reserved
name, remove a underscore.
as per clangd docs.
The C standard additionally reserves names beginning with a double underscore,
while the C++ standard strengthens this to reserve names with a double underscore occurring anywhere.