Next: thread.future, Previous: thread.channel, Up: Top [Contents]
%--------------------------------------------------% % vim: ft=mercury ts=4 sw=4 et %--------------------------------------------------% % Copyright (C) 2020 The Mercury team. % This file is distributed under the terms specified in COPYING.LIB. %--------------------------------------------------% % % File: thread.closeable_channel.m. % Main author: wangp. % Stability: low. % % Unbounded closeable channels. % %--------------------------------------------------% %--------------------------------------------------% :- module thread.closeable_channel. :- interface. :- import_module bool. :- import_module io. %--------------------------------------------------% :- type closeable_channel(T). % Initialise a channel. % :- pred init(closeable_channel(T)::out, io::di, io::uo) is det. % Put an item at the end of the channel. % Returns `yes' if successful, or `no' if the channel is closed. % :- pred put(closeable_channel(T)::in, T::in, bool::out, io::di, io::uo) is det. % Close a channel. Once a channel is closed, no more items can be added % to it. Closing a channel that is already closed has no effect. % :- pred close(closeable_channel(T)::in, io::di, io::uo) is det. :- type take_result(T) ---> ok(T) ; closed. % Take an item from the start of the channel, blocking until an item is % available or until the channel is closed. Returns `ok(Item)' if `Item' % was taken, or `closed' if the channel is closed. % :- pred take(closeable_channel(T)::in, take_result(T)::out, io::di, io::uo) is det. :- type try_take_result(T) ---> ok(T) ; closed ; would_block. % Take an item from the start of the channel, but do not block. % Returns `ok(Item)' if `Item' was taken from the channel, % `closed' if no item was taken because the channel is closed, or % `would_block' if no item could be taken from the channel without % blocking. `would_block' may be returned even if the channel is not % empty. % :- pred try_take(closeable_channel(T)::in, try_take_result(T)::out, io::di, io::uo) is det. %--------------------------------------------------% %--------------------------------------------------%