#pragma once #include "../../helpers/memory/Memory.hpp" #include "SurfaceState.hpp" #include class CWLSurfaceResource; class CSurfaceStateQueue { public: CSurfaceStateQueue() = default; explicit CSurfaceStateQueue(WP surf); void clear(); WP enqueue(UP&& state); void dropState(const WP& state); void lock(const WP& state, eLockReason reason); void unlock(const WP& state, eLockReason reason); void unlockFirst(eLockReason reason); void tryProcess(); private: std::deque> m_queue; WP m_surface; typename std::deque>::iterator find(const WP& state); };