]> git.tdb.fi Git - libs/core.git/blob - source/io/eventobject.h
Add move semantics to Variant
[libs/core.git] / source / io / eventobject.h
1 #ifndef MSP_IO_EVENTOBJECT_H_
2 #define MSP_IO_EVENTOBJECT_H_
3
4 #include <msp/core/mspcore_api.h>
5 #include "base.h"
6
7 namespace Msp {
8 namespace IO {
9
10 class Handle;
11
12 /**
13 Interface class for objects that can provide event-based I/O.  These objects
14 can be fed to the various poll functions in poll.h, or added to an
15 EventDispatcher to generate event signals.
16 */
17 class MSPCORE_API EventObject: public Base
18 {
19 public:
20         /** Emitted when there is data available for reading.  If all data is not
21         read, the signal is emitted again immediately. */
22         sigc::signal<void> signal_data_available;
23
24         /** Emitted when the mask of interesting events changes.  Mainly for use by
25         EventDispatcher. */
26         sigc::signal<void, PollEvent> signal_events_changed;
27
28 private:
29         PollEvent _events = P_NONE;
30
31 protected:
32         EventObject();
33         ~EventObject() override;
34
35         void set_events(PollEvent);
36 public:
37         /** Returns a mask of the currently interesting events.  Used by
38         EventDispatcher. */
39         PollEvent get_events() const { return _events; }
40
41         /** Returns a handle for polling. */
42         virtual const Handle &get_event_handle() = 0;
43
44         /** Notifies the object of an event.  Used by EventDispatcher. */
45         void event(PollEvent);
46
47 protected:
48         /** Called when an event occurs.  Derived classes can implement this to
49         process events. */
50         virtual void on_event(PollEvent) { }
51 };
52
53 } // namespace IO
54 } // namespace Msp
55
56 #endif