X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Fpoll.cpp;h=dce1912f830e27921df6835d3b8e96b9969279f3;hb=49c1f3c3ffdf318579a809f3f800442c0c76c818;hp=f8f6c5112ff84bcba1ca42195b72d3bdfcd9f5e5;hpb=c0861d1f8e3869f058bc8b152cd35a08e5b03e73;p=libs%2Fcore.git diff --git a/source/poll.cpp b/source/poll.cpp index f8f6c51..dce1912 100644 --- a/source/poll.cpp +++ b/source/poll.cpp @@ -1,13 +1,7 @@ -/* $Id$ - -This file is part of libmspio -Copyright © 2007 Mikko Rasa, Mikkosoft Productions -Distributed under the LGPL -*/ #include #include #include -#include "error.h" +#include "except.h" #include "base.h" #include "poll.h" @@ -18,18 +12,18 @@ using namespace Msp::IO; inline int sys_poll_event(PollEvent event) { - int result=0; + int result = 0; if(event&~(P_INPUT|P_PRIO|P_OUTPUT)) throw InvalidParameterValue("Invalid poll events"); #ifndef WIN32 if(event&P_INPUT) - result|=POLLIN; + result |= POLLIN; if(event&P_PRIO) - result|=POLLPRI; + result |= POLLPRI; if(event&P_OUTPUT) - result|=POLLOUT; + result |= POLLOUT; #endif return result; @@ -37,20 +31,20 @@ inline int sys_poll_event(PollEvent event) inline PollEvent poll_event_from_sys(int event) { - PollEvent result=P_NONE; + PollEvent result = P_NONE; #ifdef WIN32 // Stop the compiler from complaining about unused parameter - event=event; + event = event; #else if(event&POLLIN) - result=result|P_INPUT; + result = result|P_INPUT; if(event&POLLPRI) - result=result|P_PRIO; + result = result|P_PRIO; if(event&POLLOUT) - result=result|P_OUTPUT; + result = result|P_OUTPUT; if(event&POLLERR) - result=result|P_ERROR; + result = result|P_ERROR; #endif return result; @@ -60,9 +54,9 @@ inline PollEvent do_poll(Base &obj, PollEvent pe, int timeout) { #ifdef WIN32 if(timeout<0) - timeout=INFINITE; + timeout = INFINITE; - DWORD ret=WaitForSingleObject(obj.get_event_handle(), timeout); + DWORD ret = WaitForSingleObject(obj.get_event_handle(), timeout); if(ret==WAIT_OBJECT_0) return pe; else if(ret==WAIT_FAILED) @@ -70,9 +64,9 @@ inline PollEvent do_poll(Base &obj, PollEvent pe, int timeout) return P_NONE; #else - pollfd pfd={obj.get_event_handle(), sys_poll_event(pe), 0}; + pollfd pfd = {obj.get_event_handle(), sys_poll_event(pe), 0}; - int ret=::poll(&pfd, 1, timeout); + int ret = ::poll(&pfd, 1, timeout); if(ret==-1) { if(errno==EINTR) @@ -100,17 +94,15 @@ void Poller::set_object(Base &obj, PollEvent ev) if(ev) obj.get_event_handle(); - //cout<<"poller set_object "<<&obj<<' '<second.events=ev; + i->second.events = ev; else objects.erase(i); - pfd_dirty=true; + pfd_dirty = true; } else if(ev) { @@ -120,7 +112,7 @@ void Poller::set_object(Base &obj, PollEvent ev) #endif objects.insert(SlotMap::value_type(&obj, Slot(&obj, ev))); - pfd_dirty=true; + pfd_dirty = true; } } @@ -145,14 +137,14 @@ void Poller::rebuild_pfd() for(SlotMap::iterator i=objects.begin(); i!=objects.end(); ++i) { - p.fd=i->second.object->get_event_handle(); + p.fd = i->second.object->get_event_handle(); #ifndef WIN32 - p.events=sys_poll_event(i->second.events); + p.events = sys_poll_event(i->second.events); #endif pfd.push_back(p); } - pfd_dirty=false; + pfd_dirty = false; } int Poller::do_poll(int timeout) @@ -162,17 +154,14 @@ int Poller::do_poll(int timeout) poll_result.clear(); - if(pfd.empty()) - throw InvalidState("Nothing to poll"); - #ifdef WIN32 if(timeout<0) - timeout=INFINITE; + timeout = INFINITE; - DWORD ret=WaitForMultipleObjects(pfd.size(), reinterpret_cast(&pfd.front()), false, timeout); + DWORD ret = WaitForMultipleObjects(pfd.size(), &pfd.front().fd, false, timeout); if(/*ret>=WAIT_OBJECT_0 &&*/ retsecond.object, i->second.events)); @@ -183,7 +172,7 @@ int Poller::do_poll(int timeout) return 0; #else - int ret=::poll(&pfd.front(), pfd.size(), timeout); + int ret = ::poll(&pfd.front(), pfd.size(), timeout); if(ret==-1) { if(errno==EINTR) @@ -192,8 +181,8 @@ int Poller::do_poll(int timeout) throw SystemError("Poll failed", errno); } - int n=ret; - SlotMap::iterator j=objects.begin(); + int n = ret; + SlotMap::iterator j = objects.begin(); for(std::vector::iterator i=pfd.begin(); (i!=pfd.end() && n>0); ++i,++j) if(i->revents) {