Behavioral extension
class extended_buffer : bounded_buffer {
behavior:
full_buffer = { get(), get_rear() };
partial_buffer = { get(), get_rear(), put() };
public:
int get_rear() {
reply buf[--in % MAX];
out %= MAX;
if (in == out) become empty_buffer;
else
become partial_buffer;
}
};