#pragma once #include #include namespace mbgl { namespace util { template class exclusive { public: exclusive(T* val, std::unique_ptr> mtx) : ptr(val), lock(std::move(mtx)) {} T* operator->() { return ptr; } const T* operator->() const { return ptr; } T* operator*() { return ptr; } const T* operator*() const { return ptr; } private: T *ptr; std::unique_ptr> lock; }; } // end namespace util } // end namespace mbgl