]> git.tdb.fi Git - libs/core.git/blob - source/poller.h
Add files
[libs/core.git] / source / poller.h
1 /*
2 This file is part of libmspframework
3 Copyright © 2006 Mikko Rasa, Mikkosoft Productions
4 Distributed under the LGPL
5 */
6 #ifndef MSP_FRAMEWORK_POLLER_H_
7 #define MSP_FRAMEWORK_POLLER_H_
8
9 #include <sys/poll.h>
10 #include <vector>
11 #include <sigc++/sigc++.h>
12 #include "mutex.h"
13
14 namespace Msp {
15
16 class Pollable;
17
18 class Poller
19 {
20 public:
21         class Slot
22         {
23         public:
24                 sigc::signal<void, short> signal_event;
25
26                 Slot(Pollable *, short);
27                 Pollable *get_object() const { return obj; }
28                 short    get_events() const  { return events; }
29         private:
30                 Pollable *obj;
31                 short    events;
32                 
33                 void obj_deleted() { obj=0; }
34         };
35
36         Slot &add_pollable(Pollable *, short);
37         int  poll(int =0);
38 private:
39         std::list<Slot *>   slots;
40         std::vector<pollfd> pfd;
41         Mutex               slots_mutex;
42         Mutex               pfd_mutex;
43         bool                dirty;
44
45         void remove_stale_slots();
46         void rebuild_pfd();
47         void pollable_deleted(Pollable *);
48 };
49
50 };
51
52 #endif