#include #include #include #include #include #include #include #include #include #include #include #include "message.h" #include "link.h" #include "basic.h" #ifndef GHOST_KERNEL_H #define GHOST_KERNEL_H using namespace std; class Kernel { public: fd_set fd_read, fd_write; int fd_limit, n_select; vector > can_read_links, // could use hash_map? can_write_links; queue<_Link*> to_push, to_pull; Kernel() : fd_limit(0), n_select(0) { FD_ZERO(&fd_read); FD_ZERO(&fd_write); } void run() { // TODO } /* void register_fd(int fd, trigger& can_read, trigger& can_write) { // this is slightly inefficient, stupid C++ for (int i = fd - can_read_links.size() + 1; i > 0; --i) { can_read_links.push(Link()); can_write_links.push(Link()); } can_read_links[fd] = Link(can_read, this, 0, &Kernel::pull_can_read, fd); can_write_links[fd] = Link(can_write, this, 0, &Kernel::pull_can_write, fd); // TODO add to the select bitsets } */ }; extern Kernel kernel; #endif