query/source/core/net/fdset.cpp

67 lines
926 B
C++

#include "matador/net/fdset.hpp"
namespace matador {
fdset::fdset()
{
reset();
}
fdset::fdset(fdset&& x) noexcept
: max_fd_set_(std::move(x.max_fd_set_))
, fd_set_(x.fd_set_) {}
fdset& fdset::operator=(fdset&& x) noexcept
{
max_fd_set_ = std::move(x.max_fd_set_);
fd_set_ = x.fd_set_;
return *this;
}
// set all bits to zero
void fdset::reset()
{
FD_ZERO(&fd_set_);
max_fd_set_.clear();
max_fd_set_.insert(0);
}
bool fdset::is_set(socket_type fd) const
{
return FD_ISSET(fd, &fd_set_) > 0;
}
void fdset::clear(socket_type fd)
{
FD_CLR(fd, &fd_set_);
max_fd_set_.erase(fd);
}
void fdset::set(socket_type fd)
{
FD_SET(fd, &fd_set_);
max_fd_set_.insert(fd);
}
socket_type fdset::maxp1() const
{
return *max_fd_set_.begin();
}
size_t fdset::count() const
{
return max_fd_set_.size() - 1;
}
bool fdset::empty() const
{
return count() == 0;
}
fd_set* fdset::get()
{
return &fd_set_;
}
}