diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2012-03-23 01:34:37 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2012-03-23 01:34:37 +0900 |
| commit | eed804baaa02b4f81a27ba2844868b19992a90a1 (patch) | |
| tree | f6c5741443a979593fe080422ac78ef1b0f699d2 /src/SelectEventPoll.h | |
| parent | 4acc0f88317287b86c6b89ba5e5262d3ebd30cc9 (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.h | 18 |
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__ |
