X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fio%2Fpoll.h;h=c8739239d960f4f801d1f1bd22846ddcd3a9989e;hp=952ea896068aff1c0da8bbcf2d14841a5364d3b2;hb=HEAD;hpb=754132d5541ff9db869ef22e7863097110545339 diff --git a/source/io/poll.h b/source/io/poll.h index 952ea89..53e3808 100644 --- a/source/io/poll.h +++ b/source/io/poll.h @@ -1,9 +1,10 @@ #ifndef MSP_IO_POLL_H_ #define MSP_IO_POLL_H_ -#include #include #include +#include +#include #include namespace Msp { @@ -31,45 +32,41 @@ inline PollEvent operator~(PollEvent e) { return PollEvent(~static_cast(e)); } -class Poller +class MSPCORE_API Poller: private NonCopyable { public: - struct Slot + struct PolledObject { EventObject *object; PollEvent events; - - Slot(EventObject *o, PollEvent e): object(o), events(e) { } }; - typedef std::list SlotList; private: - typedef std::map EventMap; - struct Private; - EventMap objects; - Private *priv; - bool objs_changed; - SlotList poll_result; + std::vector objects; + Private *priv = nullptr; + bool events_changed = false; + bool objs_changed = false; + std::vector poll_result; public: Poller(); ~Poller(); void set_object(EventObject &, PollEvent); - int poll(); - int poll(const Time::TimeDelta &); + unsigned poll(); + unsigned poll(const Time::TimeDelta &); private: void rebuild_array(); - int do_poll(int); + unsigned do_poll(int); void platform_poll(int); public: - const SlotList &get_result() const { return poll_result; } + const std::vector &get_result() const { return poll_result; } }; -PollEvent poll(EventObject &, PollEvent); -PollEvent poll(EventObject &, PollEvent, const Time::TimeDelta &); +MSPCORE_API PollEvent poll(EventObject &, PollEvent); +MSPCORE_API PollEvent poll(EventObject &, PollEvent, const Time::TimeDelta &); } // namespace IO } // namespace Msp