[+] AuAsync::PromiseCallback<Resul_t, Error_t>

[*] Adjust compression defaults
This commit is contained in:
Reece Wilson 2022-08-16 08:41:32 +01:00
parent 57d31e0212
commit 08ff087f42
2 changed files with 90 additions and 7 deletions

View File

@ -7,6 +7,11 @@
***/
#pragma once
struct AuNullS
{
AuUInt8 null;
};
namespace Aurora::Async
{
struct IPromiseCompleter
@ -50,6 +55,79 @@ namespace Aurora::Async
OnSuccess_f onSuccess_;
};
template <class SuccessValue_t, class ErrorValue_t = AuNullS>
struct PromiseCallback : IPromiseFailure, IPromiseComplete
{
inline PromiseCallback()
{}
inline virtual void OnFailure(void *in) override
{
this->OnFailure(AuReinterpretCast<ErrorValue_t *>(in));
}
inline virtual void OnSuccess(void *in) override
{
this->OnSuccess(AuReinterpretCast<ErrorValue_t *>(in));
}
virtual void OnFailure(ErrorValue_t *in) = 0;
virtual void OnSuccess(SuccessValue_t *in) = 0;
};
template <class SuccessValue_t, class ErrorValue_t>
struct PromiseCallbackFunctional : PromiseCallback<SuccessValue_t, ErrorValue_t>, AuEnableSharedFromThis<PromiseCallbackFunctional<SuccessValue_t, ErrorValue_t>>
{
using OnSuccess_f = AuFunction<void(const AuSPtr<SuccessValue_t> &)>;
using OnFailure_f = AuFunction<void(const AuSPtr<ErrorValue_t> &)>;
inline PromiseCallbackFunctional(OnSuccess_f onSuccess,
OnFailure_f onFailure) :
onSuccess(onSuccess),
onFailure(onFailure)
{
}
inline PromiseCallbackFunctional()
{
}
virtual void OnFailure(ErrorValue_t *in) override
{
if (this->onFailure)
{
if (!in)
{
this->onFailure({});
}
else
{
this->onFailure(AuSPtr<ErrorValue_t>(AuSharedFromThis(), in));
}
}
}
virtual void OnSuccess(SuccessValue_t *in) override
{
if (this->onSuccess)
{
if (!in)
{
this->onSuccess({});
}
else
{
this->onSuccess(AuSPtr<SuccessValue_t>(AuSharedFromThis(), in));
}
}
}
OnFailure_f onFailure;
OnSuccess_f onSuccess;
};
template <class ErrorValue_t>
struct PromiseFailTmpl : IPromiseFailure
{
@ -169,6 +247,8 @@ namespace Aurora::Async
using FunctionalFail_f = typename FunctionalFail_t::OnFailure_f;
using FunctionalDelegate_f = typename FunctionalCall_t::OnDelegate_f;
inline AuSPtr<This_t> SetCallback(const AuSPtr<PromiseCallback<SuccessValue_t, ErrorValue_t>> &callbacks);
inline AuSPtr<This_t> OnSuccessFunctional(const FunctionalResponse_f &in);
inline AuSPtr<This_t> OnSuccessCallback(const AuSPtr<IPromiseComplete> &in);
@ -501,6 +581,14 @@ namespace Aurora::Async
return BeginWorkEx(AuUnsafeRaiiToShared(&this->delegateFunctional_), worker);
}
template<class SuccessValue_t, class ErrorValue_t>
inline AuSPtr<Promise<SuccessValue_t, ErrorValue_t>> Promise<SuccessValue_t, ErrorValue_t>::SetCallback(const AuSPtr<PromiseCallback<SuccessValue_t, ErrorValue_t>> &callbacks)
{
this->OnSuccessCallback(callbacks);
this->OnFailureCallback(callbacks);
return AuSPtr<Promise>(AuSharedFromThis());
}
template<class SuccessValue_t, class ErrorValue_t>
inline AuSPtr<Promise<SuccessValue_t, ErrorValue_t>> Promise<SuccessValue_t, ErrorValue_t>::OnSuccessFunctional(const FunctionalResponse_f &in)
{
@ -621,11 +709,6 @@ namespace Aurora::Async
}
}
struct AuNullS
{
AuUInt8 null;
};
using AuNullPromise = Aurora::Async::Promise<AuNullS, AuNullS>;
template <class Out_t, class Error_t = AuNullS>

View File

@ -69,7 +69,7 @@ namespace Aurora::Compression
* @brief Internal output buffer size.
* Internal swap page is undefined.
*/
AuUInt32 internalStreamSize {4096};
AuUInt32 internalStreamSize { 10 * 4096 };
AuUInt8 threads {1};
@ -98,7 +98,7 @@ namespace Aurora::Compression
/**
* @brief Internal output buffer size. Internal swap page is undefined.
*/
AuUInt32 internalStreamSize {4096};
AuUInt32 internalStreamSize { 10 * 4096 };
/**
* @brief Flag for headerless decompression streams