--- /dev/null
+/*
+This file is part of libmspframework
+Copyright © 2006 Mikko Rasa, Mikkosoft Productions
+Distributed under the LGPL
+*/
+#ifndef MSP_FRAMEWORK_POLLER_H_
+#define MSP_FRAMEWORK_POLLER_H_
+
+#include <sys/poll.h>
+#include <vector>
+#include <sigc++/sigc++.h>
+#include "mutex.h"
+
+namespace Msp {
+
+class Pollable;
+
+class Poller
+{
+public:
+ class Slot
+ {
+ public:
+ sigc::signal<void, short> signal_event;
+
+ Slot(Pollable *, short);
+ Pollable *get_object() const { return obj; }
+ short get_events() const { return events; }
+ private:
+ Pollable *obj;
+ short events;
+
+ void obj_deleted() { obj=0; }
+ };
+
+ Slot &add_pollable(Pollable *, short);
+ int poll(int =0);
+private:
+ std::list<Slot *> slots;
+ std::vector<pollfd> pfd;
+ Mutex slots_mutex;
+ Mutex pfd_mutex;
+ bool dirty;
+
+ void remove_stale_slots();
+ void rebuild_pfd();
+ void pollable_deleted(Pollable *);
+};
+
+};
+
+#endif