#pragma once
#include <memory>
#include <mutex>
#include <cxx-qt/thread.h>
namespace rust::cxxqt1 {
template<typename T>
class CxxQtThreading
{
public:
explicit CxxQtThreading(T* obj)
: m_cxxQtThreadObj(::std::make_shared<CxxQtGuardedPointer<T>>(obj))
{
}
virtual ~CxxQtThreading()
{
const auto guard = ::std::unique_lock(m_cxxQtThreadObj->mutex);
m_cxxQtThreadObj->ptr = nullptr;
}
CxxQtThread<T> qtThread() const { return CxxQtThread<T>(m_cxxQtThreadObj); }
private:
::std::shared_ptr<CxxQtGuardedPointer<T>> m_cxxQtThreadObj;
};
template<typename T>
auto
qtThread(const T& qobject) -> CxxQtThread<T>
{
return static_cast<const CxxQtThreading<T>&>(qobject).qtThread();
}
}