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