18#include <QtCore/qglobal.h>
19#include <QtCore/qlogging.h>
20#include <QtCore/qdebug.h>
25#ifndef QT_NO_EXCEPTIONS
31#define Q_OHOS_NAMED_FUNC(func) (QT_PREPEND_NAMESPACE(makeQOhosNamedFunc)<decltype(func)*, func>)(QT_STRINGIFY(func))
33#define qOhosReportFatalErrorAndAbort(...)
35 QT_PREPEND_NAMESPACE(QMessageLogger)(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).fatal(__VA_ARGS__);
41template<
typename Func,
typename... FuncArgs>
42using QOhosInvokeResult =
decltype(std::declval<Func>()(std::declval<FuncArgs>()...));
44template<
typename ...Ts>
50template<
typename Func, Func func>
58 const char *
name()
const;
66 const char *m_funcName;
69template<
typename Func, Func func>
78 template<
typename ...Ts>
79 void operator()(
const Ts &...)
const;
82template<
typename ...Ts>
99 template<
typename ProcessFunc>
102 template<
typename EvalFunc>
103 auto evalWithValue(EvalFunc &&evalFunc)
const ->
decltype(evalFunc(
std::declval<
const T &>()));
106 mutable std::mutex m_valueMutex;
117 std::shared_ptr<T> baseSharedPtr,
std::shared_ptr<
void> extraData);
126template<
typename Func, Func func>
127QOhosNamedFunc<Func, func>::QOhosNamedFunc(
const char *funcName)
128 : m_funcName(funcName)
132template<
typename Func, Func func>
133const char *QOhosNamedFunc<Func, func>::name()
const
138template<
typename Func, Func func>
139Func QOhosNamedFunc<Func, func>::ptr()
const
144template<
typename Func, Func func>
145QOhosNamedFunc<Func, func>::operator Func ()
const
150template<
typename ...Ts>
155template<
typename ...Ts>
158 return [](
const Ts &...) {
171template<
typename ProcessFunc>
174 std::lock_guard<
std::mutex> valueLock(m_valueMutex);
175 std::forward<ProcessFunc>(processFunc)(m_value);
179template<
typename EvalFunc>
182 std::lock_guard<
std::mutex> valueLock(m_valueMutex);
183 return std::forward<EvalFunc>(evalFunc)(m_value);
191 return std::make_shared<T>(
std::forward<T>(obj));
196 std::shared_ptr<T> baseSharedPtr,
std::shared_ptr<
void> extraData)
198 auto *baseRawPtr = baseSharedPtr.get();
199 return std::shared_ptr<T>(
202 std::move(baseSharedPtr),
203 std::move(extraData))),
215 class DestroyNotifier
218 explicit DestroyNotifier(
std::function<
void()> callOnDestroy)
219 : callOnDestroy(std::move(callOnDestroy))
223 DestroyNotifier(
const DestroyNotifier &) =
delete;
224 DestroyNotifier(DestroyNotifier &&) =
delete;
225 DestroyNotifier &operator=(
const DestroyNotifier &) =
delete;
226 DestroyNotifier &operator=(DestroyNotifier &&) =
delete;
234 std::function<
void()> callOnDestroy;
237 return std::make_shared<DestroyNotifier>(
std::move(callOnDestroy));
auto evalWithValue(EvalFunc &&evalFunc) const -> decltype(evalFunc(std::declval< const T & >()))
QOhosMutexProtectedValue()
QOhosMutexProtectedValue & operator=(const QOhosMutexProtectedValue< T > &other)=delete
void processValue(ProcessFunc &&processFunc)
QOhosMutexProtectedValue & operator=(QOhosMutexProtectedValue< T > &&other)=delete
QOhosMutexProtectedValue(const QOhosMutexProtectedValue< T > &other)=delete
QOhosMutexProtectedValue(QOhosMutexProtectedValue< T > &&other)=delete
QOhosNamedFunc(const char *funcName)
const char * name() const
static constexpr Func funcPtr
void operator()(const Ts &...) const
std::shared_ptr< T > makeSharedPtrWithAttachedExtraData(std::shared_ptr< T > baseSharedPtr, std::shared_ptr< void > extraData)
std::shared_ptr< T > moveToSharedPtr(T &&obj)
std::weak_ptr< T > makeWeakPtr(const std::shared_ptr< T > &obj)
std::shared_ptr< void > makeDestroyNotifier(std::function< void()> callOnDestroy)
QOhosNoOpConsumer makeQOhosNoOpConsumer()
std::function< T()> QOhosSupplier
std::function< void(Ts...)> QOhosConsumer
QOhosConsumer< Ts... > makeQOhosNoOpConsumer()
QOhosNamedFunc< Func, func > makeQOhosNamedFunc(const char *funcName)