module Std::Channel { extern func bux_channel_new(capacity: int64, elem_size: int64) -> *void; extern func bux_channel_send(handle: *void, elem: *void); extern func bux_channel_recv(handle: *void, out: *void) -> int; extern func bux_channel_close(handle: *void); extern func bux_channel_free(handle: *void); struct Channel { handle: *void; } func Channel_New(capacity: int64) -> Channel { return Channel { handle: bux_channel_new(capacity, sizeof(T)) }; } func Channel_Send(ch: *Channel, value: T) { bux_channel_send(ch.handle, &value); } func Channel_Recv(ch: *Channel) -> T { var result: T; bux_channel_recv(ch.handle, &result); return result; } func Channel_Close(ch: *Channel) { bux_channel_close(ch.handle); } func Channel_Free(ch: *Channel) { bux_channel_free(ch.handle); } }