// "bool-sink.hac"
//	$Id: bool-sink.hac,v 1.5 2007/10/12 22:44:21 fang Exp $
// bool buckets

//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/**
	Plain infinite sink.  
 */
defproc bool_sink(chan?(bool) B) {
bool b;
chp {
*[ B?(b) ]
}
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/**
	Plain infinite sink, with configurable delay.  
 */
template <preal D>
defproc bool_sink_delay(chan?(bool) B) {
bool b;
chp {
*[ $(after=D) B?(b) ]
}
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/**
	sinks a limited number of times
 */
template <pint N>
defproc bool_sink_once(chan?(bool) B) {
bool b;
chp {
{;i:N: B?(b) }
}
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/***
template <pint N, pbool V[N]>
defproc bool_assert_sink (chan?(bool) B) {
... $[x == V[i]]
}
***/

//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/***
template <pint N, pbool V[N]>
defproc bool_assert_sink_once (chan?(bool) B) {
...
}
***/

//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/**
	Tokn-controlled sink, suitable for shared channel.  
 */
defproc bool_sink_shared(chan?() Cin; chan!() Cout; chan??(bool) B) {
chp {
*[ Cin?; B?; Cout! ]
}
}

