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;
  }
  };
  

slide: Behavioral abstractions in ACT++