Format wxWebViewEdge Callback code

This commit is contained in:
Maarten Bent
2021-01-27 22:41:40 +01:00
committed by Vadim Zeitlin
parent ad1219d0a2
commit a8b726359b

View File

@@ -47,10 +47,12 @@ public:
*ppvObj = NULL;
return E_NOINTERFACE;
}
ULONG STDMETHODCALLTYPE AddRef(void) override {
ULONG STDMETHODCALLTYPE AddRef() override
{
return ++m_nRefCount;
}
ULONG STDMETHODCALLTYPE Release(void) override {
ULONG STDMETHODCALLTYPE Release() override
{
size_t ret = --m_nRefCount;
if (ret == 0)
delete this;
@@ -59,35 +61,40 @@ public:
private:
std::atomic<size_t> m_nRefCount;
};
template <typename baseT, typename ...argTs>
class CInvokableLambda : public CInvokable<baseT, argTs...>
{
public:
CInvokableLambda(std::function<HRESULT(argTs...)> lambda)
: m_lambda(lambda) {
}
: m_lambda(lambda)
{}
// baseT method
HRESULT STDMETHODCALLTYPE Invoke(argTs ...args) override {
HRESULT STDMETHODCALLTYPE Invoke(argTs ...args) override
{
return m_lambda(args...);
}
private:
std::function<HRESULT(argTs...)> m_lambda;
};
template <typename baseT, typename contextT, typename ...argTs>
class CInvokableMethod : public CInvokable<baseT, argTs...>
{
public:
CInvokableMethod(contextT* ctx, HRESULT(contextT::* mthd)(argTs...))
: m_ctx(ctx), m_mthd(mthd) {
}
: m_ctx(ctx), m_mthd(mthd)
{}
// baseT method
HRESULT STDMETHODCALLTYPE Invoke(argTs ...args) override {
HRESULT STDMETHODCALLTYPE Invoke(argTs ...args) override
{
return (m_ctx->*m_mthd)(args...);
}
private:
contextT* m_ctx;
HRESULT(contextT::* m_mthd)(argTs...);
};
// the function templates to generate concrete classes from above class templates
template <
typename baseT, typename lambdaT, // base type & lambda type
@@ -97,11 +104,13 @@ wxCOMPtr<baseT> Callback_impl(lambdaT&& lambda, HRESULT (LT::*)(argTs...) const)
{
return wxCOMPtr<baseT>(new CInvokableLambda<baseT, argTs...>(lambda));
}
template <typename baseT, typename lambdaT>
wxCOMPtr<baseT> Callback(lambdaT&& lambda)
{
return Callback_impl<baseT>(std::move(lambda), &lambdaT::operator());
}
template <typename baseT, typename contextT, typename ...argTs>
wxCOMPtr<baseT> Callback(contextT* ctx, HRESULT(contextT::* mthd)(argTs...))
{