Polyphase Game Engine
Loading...
Searching...
No Matches
GitOperationQueue.h
Go to the documentation of this file.
1#pragma once
2
3#if EDITOR
4
5#include "GitTypes.h"
7#include <vector>
8#include <deque>
9#include <mutex>
10#include <thread>
11#include <condition_variable>
12#include <atomic>
13
14class GitOperationQueue
15{
16public:
17 void Start();
18 void Stop();
19
20 void Enqueue(const GitOperationRequest& request);
21 void PollResults(std::vector<GitOperationResult>& outResults);
22
23 bool IsRunning() const { return mRunning.load(); }
24 bool HasPendingOps() const;
25
26 const GitProgressEvent& GetCurrentProgress() const { return mCurrentProgress; }
27
28private:
29 void WorkerLoop();
30 void ExecuteOperation(const GitOperationRequest& request);
31 std::vector<std::string> BuildCommandArgs(const GitOperationRequest& request) const;
32
33 std::thread mWorkerThread;
34 std::atomic_bool mRunning{false};
35 std::atomic_bool mExecuting{false};
36
37 std::mutex mQueueMutex;
38 std::condition_variable mQueueCV;
39 std::deque<GitOperationRequest> mPendingRequests;
40
41 std::mutex mResultMutex;
42 std::deque<GitOperationResult> mResults;
43
44 GitProgressEvent mCurrentProgress;
45};
46
47#endif