summaryrefslogtreecommitdiff
path: root/src/SelectEventPoll.h
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2012-03-23 01:34:37 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2012-03-23 01:34:37 +0900
commiteed804baaa02b4f81a27ba2844868b19992a90a1 (patch)
treef6c5741443a979593fe080422ac78ef1b0f699d2 /src/SelectEventPoll.h
parent4acc0f88317287b86c6b89ba5e5262d3ebd30cc9 (diff)
Use std::set instead of std::deque if the elements are sorted and
insertions and deletions are frequent.
Diffstat (limited to 'src/SelectEventPoll.h')
-rw-r--r--src/SelectEventPoll.h18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/SelectEventPoll.h b/src/SelectEventPoll.h
index 739ccb2a..fcceab1a 100644
--- a/src/SelectEventPoll.h
+++ b/src/SelectEventPoll.h
@@ -38,7 +38,9 @@
#include "EventPoll.h"
#include <deque>
+#include <set>
+#include "a2functional.h"
#ifdef ENABLE_ASYNC_DNS
# include "AsyncNameResolver.h"
#endif // ENABLE_ASYNC_DNS
@@ -145,6 +147,13 @@ private:
command_ == entry.command_;
}
+ bool operator<(const AsyncNameResolverEntry& entry)
+ {
+ return nameResolver_.get() < entry.nameResolver_.get() ||
+ (nameResolver_.get() == entry.nameResolver_.get() &&
+ command_ < entry.command_);
+ }
+
int getFds(fd_set* rfdsPtr, fd_set* wfdsPtr);
void process(fd_set* rfdsPtr, fd_set* wfdsPtr);
@@ -155,9 +164,14 @@ private:
fd_set wfdset_;
sock_t fdmax_;
- std::deque<SharedHandle<SocketEntry> > socketEntries_;
+ typedef std::set<SharedHandle<SocketEntry>,
+ DerefLess<SharedHandle<SocketEntry> > > SocketEntrySet;
+ SocketEntrySet socketEntries_;
#ifdef ENABLE_ASYNC_DNS
- std::deque<SharedHandle<AsyncNameResolverEntry> > nameResolverEntries_;
+ typedef std::set<SharedHandle<AsyncNameResolverEntry>,
+ DerefLess<SharedHandle<AsyncNameResolverEntry> > >
+ AsyncNameResolverEntrySet;
+ AsyncNameResolverEntrySet nameResolverEntries_;
#endif // ENABLE_ASYNC_DNS
#ifdef __MINGW32__