CLASS chop IS

 PASSIVE

spec

-- Dining Philosophers - Ada 95 edition
-- 
-- Chopstick is an Ada95 protected type
-- 
-- Michael B. Feldman, The George Washington University, July 1995.
-- HOOD version by Pierre Dissaux, TNI, June 1998.


--  required interface : 
--   Required OPERATION : NONE
--   Required EXCEPTION : NONE
--   Required TYPE : NONE
--   Required CONSTANT : NONE
--   Required DATA : NONE

--  visibility on required modules : 

package chop is

  protected type Stick is 

    entry pick_up;

    procedure put_down;

  private
    In_Use : Boolean := false;
  end Stick;

  type Stick_Ptr is access all Stick;

  procedure pick_up (
    me : IN OUT stick);

  procedure put_down (
    me : IN OUT stick);

end chop;

body

-- Dining Philosophers - Ada 95 edition
-- 
-- Chopstick is an Ada95 protected type
-- 
-- Michael B. Feldman, The George Washington University, July 1995.
-- HOOD version by Pierre Dissaux, TNI, June 1998.


--  visibility on required modules : 

--  visibility on objects required by nested operation bodies : 

package body chop is

  protected body Stick is 

    entry pick_up when not In_Use is
    begin
      In_Use := True;
    end pick_up;

    procedure put_down is
    begin
      In_Use := False;
    end put_down;

  end Stick;

  procedure pick_up (
    me : IN OUT stick) is
  begin
    me.pick_up;
  end pick_up;

  procedure put_down (
    me : IN OUT stick) is
  begin
    me.put_down;
  end put_down;


end chop;

END chop