// select.h // Author: Allen Porter #ifndef __YNET_SELECT_H__ #define __YNET_SELECT_H__ #include #include #include #include #include namespace ynet { typedef ythread::Callback1 ReadyCallback; // Select is NOT threadsafe class Select { public: explicit Select(); virtual ~Select(); void AddReadFd(int fd, ReadyCallback*); void RemoveReadFd(int fd); void AddWriteFd(int fd, ReadyCallback*); void RemoveWriteFd(int fd); void Start(); void Stop(); // Threadsafe methods void AddCallback(ythread::Callback* callback); private: int nfds() const; std::vector readfds_; std::vector writefds_; std::map read_callbacks_; std::map write_callbacks_; bool looping_; ythread::Mutex callbacks_mutex_; // protects callbacks_ std::set callbacks_; }; } // namespace ynet #endif // __YNET_SELECT_H__