Behavioral abstractions
\zline{\fbox{ACT++}}class bounded_buffer : actor { int buf[MAX]; int in, out; behavior: empty_buffer = { put() }; full_buffer = { get() }; partial_buffer = {get(),put()}; public: bounded_buffer() { in=0; out=0; } int get() { reply buf[out++]; out %= MAX; if (in == out) become empty_buffer; else become partial_buffer; } void put( int item ) { buf[in++] = item; in %= MAX; if (in == out ) become full_buffer; else become partial_buffer; } };