summaryrefslogtreecommitdiff
path: root/src/KqueueEventPoll.h
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2014-09-13 15:36:27 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2014-09-13 17:33:22 +0900
commit596e5c616218c9681adf4eb45077608510e2876e (patch)
treebe2c7fb20b14f0c4dc533c82dbb5dad23529d693 /src/KqueueEventPoll.h
parentf55c16c7edeb319a82217a91a87a35cddfd606b0 (diff)
Refactor event poll classes so that we don't have to allocate memory on query
I left Port and libuv classes, since I don't have them compiled. So they were updated minimally.
Diffstat (limited to 'src/KqueueEventPoll.h')
-rw-r--r--src/KqueueEventPoll.h15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/KqueueEventPoll.h b/src/KqueueEventPoll.h
index 9e0ea47e..a5fdcf47 100644
--- a/src/KqueueEventPoll.h
+++ b/src/KqueueEventPoll.h
@@ -41,7 +41,7 @@
#include <sys/event.h>
#include <sys/time.h>
-#include <set>
+#include <map>
#include "Event.h"
#include "a2functional.h"
@@ -67,6 +67,9 @@ private:
public:
KSocketEntry(sock_t socket);
+ KSocketEntry(const KSocketEntry&) = delete;
+ KSocketEntry(KSocketEntry&&) = default;
+
// eventlist should be at least size 2. This function returns the
// number of filled struct kevent in eventlist.
size_t getEvents(struct kevent* eventlist);
@@ -75,13 +78,11 @@ private:
friend int accumulateEvent(int events, const KEvent& event);
private:
- typedef std::set<std::shared_ptr<KSocketEntry>,
- DerefLess<std::shared_ptr<KSocketEntry> > > KSocketEntrySet;
+ typedef std::map<sock_t, KSocketEntry> KSocketEntrySet;
KSocketEntrySet socketEntries_;
#ifdef ENABLE_ASYNC_DNS
- typedef std::set<std::shared_ptr<KAsyncNameResolverEntry>,
- DerefLess<std::shared_ptr<KAsyncNameResolverEntry> > >
- KAsyncNameResolverEntrySet;
+ typedef std::map<std::pair<AsyncNameResolver*, Command*>,
+ KAsyncNameResolverEntry> KAsyncNameResolverEntrySet;
KAsyncNameResolverEntrySet nameResolverEntries_;
#endif // ENABLE_ASYNC_DNS
@@ -89,7 +90,7 @@ private:
size_t kqEventsSize_;
- struct kevent* kqEvents_;
+ std::unique_ptr<struct kevent[]> kqEvents_;
static const size_t KQUEUE_EVENTS_MAX = 1024;