#ifndef RUST_PORT_H #define RUST_PORT_H #include "rust_internal.h" class port_detach_cond : public rust_cond { }; class rust_port : public kernel_owned, public rust_cond { private: // Protects ref_count and detach_cond lock_and_signal ref_lock; intptr_t ref_count; port_detach_cond detach_cond; public: void ref(); void deref(); public: rust_port_id id; rust_kernel *kernel; rust_task *task; size_t unit_sz; circular_buffer buffer; lock_and_signal lock; public: rust_port(rust_task *task, size_t unit_sz); ~rust_port(); void log_state(); void send(void *sptr); void receive(void *dptr, uintptr_t *yield); size_t size(); void begin_detach(uintptr_t *yield); void end_detach(); }; // // Local Variables: // mode: C++ // fill-column: 78; // indent-tabs-mode: nil // c-basic-offset: 4 // buffer-file-coding-system: utf-8-unix // compile-command: "make -k -C $RBUILD 2>&1 | sed -e 's/\\/x\\//x:\\//g'"; // End: // #endif /* RUST_PORT_H */