// // Created by Lenn on 2025/10/31. // #ifndef TOUCHSENSOR_PRESIST_HH #define TOUCHSENSOR_PRESIST_HH #include #include #include #include #include #include #include #include #include namespace ffmsep { struct DecodedFrame; namespace persist { struct WriteResult { bool ok = false; std::string error; std::string path; }; struct WriteRequest { WriteRequest() = default; WriteRequest(std::string p, std::deque> f, std::promise&& pr) : path(std::move(p)) , frames(std::move(f)) , promise(std::move(pr)) {} WriteRequest(const WriteRequest&) = delete; WriteRequest& operator=(const WriteRequest&) = delete; WriteRequest(WriteRequest&&) noexcept = default; WriteRequest& operator=(WriteRequest&&) noexcept = default; std::string path; std::deque> frames; std::promise promise; }; class WriteQueue { public: bool push(WriteRequest&& req); bool pop(WriteRequest& out); void stop(); private: std::mutex mutex_; std::condition_variable cond_; std::queue queue_; bool stopped_ = false; }; class JsonWritter { public: JsonWritter(); ~JsonWritter(); std::future enqueue(std::string path, std::deque> frames); void stop(); private: void run(); WriteResult write_once(const std::string& path, std::deque> frames); private: std::thread write_thread_; WriteQueue write_queue_; std::atomic_bool stopped_{false}; }; } // namespace persist } // namespace ffmsep #endif // TOUCHSENSOR_PRESIST_HH