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