Codechange: Remove std::function from Pool iteration wrapper

Add a separate template wrapper for filtered iteration
This commit is contained in:
Jonathan G Rennison
2020-01-06 17:19:24 +00:00
committed by Charles Pigott
parent 4cc1420beb
commit 150dfba95b
3 changed files with 60 additions and 13 deletions

View File

@@ -83,15 +83,18 @@ public:
return "admin";
}
struct ServerNetworkAdminSocketHandlerFilter {
bool operator() (size_t index) { return ServerNetworkAdminSocketHandler::Get(index)->GetAdminStatus() == ADMIN_STATUS_ACTIVE; }
};
/**
* Returns an iterable ensemble of all active admin sockets
* @param from index of the first socket to consider
* @return an iterable ensemble of all active admin sockets
*/
static Pool::IterateWrapper<ServerNetworkAdminSocketHandler> IterateActive(size_t from = 0)
static Pool::IterateWrapperFiltered<ServerNetworkAdminSocketHandler, ServerNetworkAdminSocketHandlerFilter> IterateActive(size_t from = 0)
{
return Pool::IterateWrapper<ServerNetworkAdminSocketHandler>(from,
[](size_t index) { return ServerNetworkAdminSocketHandler::Get(index)->GetAdminStatus() == ADMIN_STATUS_ACTIVE; });
return Pool::IterateWrapperFiltered<ServerNetworkAdminSocketHandler, ServerNetworkAdminSocketHandlerFilter>(from, ServerNetworkAdminSocketHandlerFilter{});
}
};