/*** Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: AuroraUtils.hpp File: auROXTLUtils.hpp Date: 2021-6-9 Author: Reece ***/ #pragma once #if defined(__has_include) #if __has_include() #include #endif #if __has_include() #include #endif #if __has_include() #include #endif #if __has_include() #include #endif #endif #if defined(AURORA_ARCH_X64) #include #endif // homeless :( #if !defined(AURORA_RUNTIME_EXCHANGE) #define AURORA_RUNTIME_EXCHANGE std::exchange #endif template T AuExchange(T &obj, U &&new_value) { return AURORA_RUNTIME_EXCHANGE(obj, new_value); } #include #include #include #include #include #include #include #include #include #include #include #include #include #include struct IAuNullDelegate { virtual void OnCall() = 0; }; struct AuNullCallback { const AuVoidFunc voidFunc; const AuSPtr callbackFunc; AU_DEFINE_CTOR_ONE(AuNullCallback, (AuVoidFunc, voidFunc)); AU_DEFINE_CTOR_ONE(AuNullCallback, (AuSPtr, callbackFunc)); auline void operator()() { if (voidFunc) { voidFunc(); } else if (callbackFunc) { callbackFunc->OnCall(); } } };