Go to Package Interface

WITH Employees.IO;
WITH Debugging_Support; USE Debugging_Support;
PACKAGE BODY Tables IS
------------------------------------------------------------------
--| Body of the abstract data type for a table of
--| element records, each element containing a key.
--| Author: Michael B. Feldman, The George Washington University
--| Last Modified: October 1995
------------------------------------------------------------------
 
  PROCEDURE InitializeTable (T : IN OUT TableType) IS
  BEGIN -- InitializeTable
 
    Enter(Subprogram => "InitializeTable");
 
    T.CurrentSize := 0;
 
    Leave
      (Subprogram => "InitializeTable", Message => "table is initialized.");
 
  END InitializeTable;
 
  PROCEDURE Insert (T       : IN OUT TableType;
                    E       : ElementType;
                    Success : OUT Boolean) IS
  BEGIN -- Insert
 
    Enter(Subprogram => "Insert");
 
    Success := True;
 
    -- First search table for E's ID; set Success false if found
    FOR Which IN 1..T.CurrentSize LOOP
      IF Employees.RetrieveID(T.ActualElements(Which)) =
         Employees.RetrieveID(E) THEN
        Success := False;
        RETURN;
      END IF;
    END LOOP;
 
    -- we didn't find a matching record, so we can insert this one
    T.CurrentSize := T.CurrentSize + 1;
    T.ActualElements(T.CurrentSize) := E;
 
    Leave(Subprogram => "Insert");
 
  END Insert;
 
  PROCEDURE Traverse (T : TableType) IS
  BEGIN -- Traverse
 
    Enter(Subprogram => "Traverse");
 
    FOR Count IN 1..T.CurrentSize LOOP
      Employees.IO.Put(Item => T.ActualElements(Count));
      Ada.Text_IO.New_Line;
    END LOOP;
 
    Leave(Subprogram => "Traverse");
 
  END Traverse;
 
  PROCEDURE Retrieve (T       : TableType;
                      Target  : KeyType;
                      E       : OUT ElementType;
                      Success : OUT Boolean) IS
  BEGIN -- stub
 
    Enter(Subprogram => "Retrieve", Message => "under construction");
    Leave(Subprogram => "Retrieve");
 
  END Retrieve;
 
  PROCEDURE Delete (T       : IN OUT TableType;
                    Target  : KeyType;
                    Success : OUT Boolean) IS
  BEGIN -- stub
 
    Enter(Subprogram => "Retrieve", Message => "under construction");
    Leave(Subprogram => "Retrieve");
 
  END Delete;
 
END Tables;