Guitar
CommitDetailGetter.h
Go to the documentation of this file.
1 #ifndef COMMITDETAILGETTER_H
2 #define COMMITDETAILGETTER_H
3 
4 #include "GitRunner.h"
5 #include <QObject>
6 #include <condition_variable>
7 #include <mutex>
8 #include <thread>
9 #include <map>
10 
11 class CommitDetailGetter : public QObject {
12  Q_OBJECT
13 public:
14  struct Data {
15  char sign_verify = 0;
16  };
17 private:
18  static constexpr int num_threads = 1;
19 
20  std::mutex mutex_;
21  std::condition_variable condition_;
22  std::vector<std::thread> threads_;
23  bool interrupted_ = false;
24 
26 
27  struct Request {
28  bool done = false;
29  bool busy = false;
32 
33  operator bool () const
34  {
35  return done;
36  }
37  };
38  std::vector<Request> requests_;
39  std::map<GitHash, Data> cache_;
40 public:
41  CommitDetailGetter() = default;
42  virtual ~CommitDetailGetter();
43  void start(GitRunner git);
44  void stop();
45 private:
46  Data _query(const GitHash &id, bool request_if_not_found, bool lock);
47 public:
48  Data query(const GitHash &id, bool request_if_not_found);
49 signals:
50  void ready();
51 };
52 
53 #endif // COMMITDETAILGETTER_H
Definition: CommitDetailGetter.h:11
static constexpr int num_threads
Definition: CommitDetailGetter.h:18
virtual ~CommitDetailGetter()
Definition: CommitDetailGetter.cpp:4
std::condition_variable condition_
Definition: CommitDetailGetter.h:21
std::vector< Request > requests_
Definition: CommitDetailGetter.h:38
std::vector< std::thread > threads_
Definition: CommitDetailGetter.h:22
void stop()
CommitDetailGetter::stop.
Definition: CommitDetailGetter.cpp:86
Data _query(const GitHash &id, bool request_if_not_found, bool lock)
CommitDetailGetter::query.
Definition: CommitDetailGetter.cpp:113
std::map< GitHash, Data > cache_
Definition: CommitDetailGetter.h:39
Data query(const GitHash &id, bool request_if_not_found)
Definition: CommitDetailGetter.cpp:166
void start(GitRunner git)
CommitDetailGetter::start.
Definition: CommitDetailGetter.cpp:15
CommitDetailGetter()=default
std::mutex mutex_
Definition: CommitDetailGetter.h:20
bool interrupted_
Definition: CommitDetailGetter.h:23
GitRunner git_
Definition: CommitDetailGetter.h:25
Definition: GitTypes.h:32
Definition: GitRunner.h:11
Definition: CommitDetailGetter.h:14
char sign_verify
Definition: CommitDetailGetter.h:15
Definition: CommitDetailGetter.h:27
Data data
Definition: CommitDetailGetter.h:31
GitHash id
Definition: CommitDetailGetter.h:30
bool done
Definition: CommitDetailGetter.h:28
bool busy
Definition: CommitDetailGetter.h:29