summaryrefslogtreecommitdiff
path: root/src/looper.hh
blob: 731522008a52b7d0f0a5265d9cc7b2f5cec05bda (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// -*- mode: c++; c-basic-offset: 2; -*-

#ifndef LOOPER_HH
#define LOOPER_HH

#include <chrono>
#include <functional>

class Looper {
public:
  typedef std::chrono::steady_clock clock;
  typedef std::function<void(int, uint8_t)> FdCallback;
  typedef std::function<void(void*)> ScheduleCallback;
  virtual ~Looper() { }

  static const uint8_t EVENT_READ;
  static const uint8_t EVENT_WRITE;
  // Always reported, need not be set
  static const uint8_t EVENT_HUP;
  static const uint8_t EVENT_ERROR;

  static Looper* create();

  virtual void add(int fd, uint8_t events, FdCallback const& callback) = 0;
  virtual void modify(int fd, uint8_t events) = 0;
  virtual void remove(int fd) = 0;

  virtual void* schedule(float delay_s, ScheduleCallback const& callback) = 0;
  virtual void cancel(void* handle) = 0;

  virtual bool run() = 0;
  virtual void quit() = 0;

  virtual clock::time_point now() const = 0;

protected:
  Looper() { }
  Looper(Looper const&) = delete;
};

#endif  // LOOPER_HH