]> git.tdb.fi Git - libs/core.git/blobdiff - source/io/poll.cpp
Rework exceptions for IO
[libs/core.git] / source / io / poll.cpp
index dce1912f830e27921df6835d3b8e96b9969279f3..a0ccf84a4c07fcf5c601edf8eac6f943241c1245 100644 (file)
@@ -1,10 +1,13 @@
 #include <errno.h>
+#include <stdexcept>
+#include <msp/core/systemerror.h>
 #include <msp/strings/formatter.h>
 #include <msp/time/units.h>
-#include "except.h"
 #include "base.h"
 #include "poll.h"
 
+using namespace std;
+
 namespace {
 
 using namespace Msp;
@@ -15,7 +18,7 @@ inline int sys_poll_event(PollEvent event)
        int result = 0;
 
        if(event&~(P_INPUT|P_PRIO|P_OUTPUT))
-               throw InvalidParameterValue("Invalid poll events");
+               throw invalid_argument("sys_poll_event");
 
 #ifndef WIN32
        if(event&P_INPUT)
@@ -60,7 +63,7 @@ inline PollEvent do_poll(Base &obj, PollEvent pe, int timeout)
        if(ret==WAIT_OBJECT_0)
                return pe;
        else if(ret==WAIT_FAILED)
-               throw SystemError("Poll failed", GetLastError());
+               throw system_error("WaitForSingleObject");
 
        return P_NONE;
 #else
@@ -72,7 +75,7 @@ inline PollEvent do_poll(Base &obj, PollEvent pe, int timeout)
                if(errno==EINTR)
                        return P_NONE;
                else
-                       throw SystemError("Poll failed", errno);
+                       throw system_error("poll");
        }
 
        return poll_event_from_sys(pfd.revents);
@@ -108,7 +111,7 @@ void Poller::set_object(Base &obj, PollEvent ev)
        {
 #ifdef WIN32
                if(objects.size()>=MAXIMUM_WAIT_OBJECTS)
-                       throw InvalidState("Maximum number of wait objects reached");
+                       throw logic_error("Maximum number of wait objects reached");
 #endif
                objects.insert(SlotMap::value_type(&obj, Slot(&obj, ev)));
 
@@ -124,7 +127,7 @@ int Poller::poll()
 int Poller::poll(const Time::TimeDelta &timeout)
 {
        if(timeout<Time::zero)
-               throw InvalidParameterValue("Invalid timeout");
+               throw invalid_argument("Poller::poll");
 
        return do_poll(static_cast<int>(timeout/Time::msec));
 }
@@ -168,7 +171,7 @@ int Poller::do_poll(int timeout)
                return 1;
        }
        else if(ret==WAIT_FAILED)
-               throw SystemError("Poll failed", GetLastError());
+               throw system_error("WaitForMultipleObjects");
 
        return 0;
 #else
@@ -178,7 +181,7 @@ int Poller::do_poll(int timeout)
                if(errno==EINTR)
                        return 0;
                else
-                       throw SystemError("Poll failed", errno);
+                       throw system_error("poll");
        }
 
        int n = ret;
@@ -203,7 +206,7 @@ PollEvent poll(Base &obj, PollEvent pe)
 PollEvent poll(Base &obj, PollEvent pe, const Time::TimeDelta &timeout)
 {
        if(timeout<Time::zero)
-               throw InvalidParameterValue("Invalid timeout");
+               throw invalid_argument("poll");
 
        return do_poll(obj, pe, static_cast<int>(timeout/Time::msec));
 }