A signal called is allowed to free ourselves, in which case we're not allowed to use this anymore. Only perform the housekeeping of removing stale events before emit, and in registerListener.
* sharedptr: dont downcast ptr implentation
avoid runtime errors of wrong downcasts by adding a underlaying ptr data
getter and only cast the data, downcasting the implentation type isnt
inherited from eachother, while the intention was do upcast/downcast
a derived class to a base class. found with UBSAN "runtime error:
downcast of address which does not point to an object of type
"CSharedPointer_::impl<IKeyboard>" note: object is of type
"Hyprutils::Memory::CSharedPointer_::impl<CKeyboard>"
also make dataNonNull check against != nullptr.
* sharedptr: use reinterpret_cast instead of c style
make it more type safe, C style casts tries every single one until one
works, or not. compilers also produces better warnings/errors when using
c++ casts in favour of C style ones.
* Added some constants to handle floating point presicion comparisons and other calculations plus some refactoring
* Removed validation
* Added comments to understand how box header works
* Extended the EXPECT macro to evaluate Vector2D test cases
* Added box.cpp test cases
* Applied clang-format
if we dont decrement the sharedptr on destruction any weakptr remaining
will have an impl_ with a ref of 1 and upon destruction of the weakptr
it wont delete the implentation because it thinks a shared pointer still
exist.