From 3752b3f59d5216d7dc6221a361efc76b9ad2273d Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 23 Jan 2014 19:17:22 -0500 Subject: New socketengine stuff: Use vectors that grow as necessary instead of mass allocating everything at once Rework poll engine logic to make sense --- src/socketengine.cpp | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) (limited to 'src/socketengine.cpp') diff --git a/src/socketengine.cpp b/src/socketengine.cpp index 219d154f2..c2a357b38 100644 --- a/src/socketengine.cpp +++ b/src/socketengine.cpp @@ -94,16 +94,33 @@ void SocketEngine::DispatchTrialWrites() } } -bool SocketEngine::HasFd(int fd) +bool SocketEngine::AddFd(EventHandler* eh) { - if ((fd < 0) || (fd > GetMaxFds())) + int fd = eh->GetFd(); + if (HasFd(fd)) return false; - return (ref[fd] != NULL); + + while (static_cast(fd) >= ref.size()) + ref.resize(ref.empty() ? 1 : (ref.size() * 2)); + ref[fd] = eh; + return true; +} + +void SocketEngine::DelFd(EventHandler *eh) +{ + int fd = eh->GetFd(); + if (GetRef(fd) == eh) + ref[fd] = NULL; +} + +bool SocketEngine::HasFd(int fd) +{ + return GetRef(fd) != NULL; } EventHandler* SocketEngine::GetRef(int fd) { - if ((fd < 0) || (fd > GetMaxFds())) + if (fd < 0 || static_cast(fd) >= ref.size()) return 0; return ref[fd]; } -- cgit v1.3.1-10-gc9f91