-- CC3019C0.ADA
|
-- CC3019C0.ADA
|
|
|
-- Grant of Unlimited Rights
|
-- Grant of Unlimited Rights
|
--
|
--
|
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
|
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
|
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained
|
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained
|
-- unlimited rights in the software and documentation contained herein.
|
-- unlimited rights in the software and documentation contained herein.
|
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making
|
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making
|
-- this public release, the Government intends to confer upon all
|
-- this public release, the Government intends to confer upon all
|
-- recipients unlimited rights equal to those held by the Government.
|
-- recipients unlimited rights equal to those held by the Government.
|
-- These rights include rights to use, duplicate, release or disclose the
|
-- These rights include rights to use, duplicate, release or disclose the
|
-- released technical data and computer software in whole or in part, in
|
-- released technical data and computer software in whole or in part, in
|
-- any manner and for any purpose whatsoever, and to have or permit others
|
-- any manner and for any purpose whatsoever, and to have or permit others
|
-- to do so.
|
-- to do so.
|
--
|
--
|
-- DISCLAIMER
|
-- DISCLAIMER
|
--
|
--
|
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
|
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
|
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
|
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
|
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
|
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
|
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE
|
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE
|
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
|
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
|
-- PARTICULAR PURPOSE OF SAID MATERIAL.
|
-- PARTICULAR PURPOSE OF SAID MATERIAL.
|
--*
|
--*
|
-- OBJECTIVE
|
-- OBJECTIVE
|
-- THIS IS GENERIC PACKAGE WHICH IS USED TO CHECK THE LEVEL OF
|
-- THIS IS GENERIC PACKAGE WHICH IS USED TO CHECK THE LEVEL OF
|
-- NESTED GENERICS SUPPORTED BY AN IMPLEMENTATION.
|
-- NESTED GENERICS SUPPORTED BY AN IMPLEMENTATION.
|
--
|
--
|
-- HISTORY:
|
-- HISTORY:
|
-- EDWARD V. BERARD, 31 AUGUST 1990
|
-- EDWARD V. BERARD, 31 AUGUST 1990
|
|
|
GENERIC
|
GENERIC
|
|
|
TYPE ELEMENT IS LIMITED PRIVATE ;
|
TYPE ELEMENT IS LIMITED PRIVATE ;
|
|
|
WITH PROCEDURE ASSIGN (SOURCE : IN OUT ELEMENT ;
|
WITH PROCEDURE ASSIGN (SOURCE : IN OUT ELEMENT ;
|
DESTINATION : IN OUT ELEMENT) ;
|
DESTINATION : IN OUT ELEMENT) ;
|
|
|
WITH FUNCTION "=" (LEFT : IN ELEMENT ;
|
WITH FUNCTION "=" (LEFT : IN ELEMENT ;
|
RIGHT : IN ELEMENT) RETURN BOOLEAN ;
|
RIGHT : IN ELEMENT) RETURN BOOLEAN ;
|
|
|
PACKAGE CC3019C0_LIST_CLASS IS
|
PACKAGE CC3019C0_LIST_CLASS IS
|
|
|
TYPE LIST IS LIMITED PRIVATE ;
|
TYPE LIST IS LIMITED PRIVATE ;
|
|
|
OVERFLOW : EXCEPTION ;
|
OVERFLOW : EXCEPTION ;
|
UNDERFLOW : EXCEPTION ;
|
UNDERFLOW : EXCEPTION ;
|
|
|
PROCEDURE ADD (THIS_ELEMENT : IN OUT ELEMENT ;
|
PROCEDURE ADD (THIS_ELEMENT : IN OUT ELEMENT ;
|
TO_THIS_LIST : IN OUT LIST) ;
|
TO_THIS_LIST : IN OUT LIST) ;
|
|
|
PROCEDURE DELETE (THIS_ELEMENT : IN OUT ELEMENT ;
|
PROCEDURE DELETE (THIS_ELEMENT : IN OUT ELEMENT ;
|
FROM_THIS_LIST : IN OUT LIST) ;
|
FROM_THIS_LIST : IN OUT LIST) ;
|
|
|
PROCEDURE COPY (THIS_LIST : IN OUT LIST ;
|
PROCEDURE COPY (THIS_LIST : IN OUT LIST ;
|
TO_THIS_LIST : IN OUT LIST) ;
|
TO_THIS_LIST : IN OUT LIST) ;
|
|
|
PROCEDURE CLEAR (THIS_LIST : IN OUT LIST) ;
|
PROCEDURE CLEAR (THIS_LIST : IN OUT LIST) ;
|
|
|
GENERIC
|
GENERIC
|
|
|
WITH PROCEDURE PROCESS (THIS_ELEMENT : IN ELEMENT ;
|
WITH PROCEDURE PROCESS (THIS_ELEMENT : IN ELEMENT ;
|
CONTINUE : OUT BOOLEAN) ;
|
CONTINUE : OUT BOOLEAN) ;
|
|
|
PROCEDURE ITERATE (OVER_THIS_LIST : IN LIST) ;
|
PROCEDURE ITERATE (OVER_THIS_LIST : IN LIST) ;
|
|
|
FUNCTION NUMBER_OF_ELEMENTS (IN_THIS_LIST : IN LIST)
|
FUNCTION NUMBER_OF_ELEMENTS (IN_THIS_LIST : IN LIST)
|
RETURN NATURAL ;
|
RETURN NATURAL ;
|
|
|
FUNCTION "=" (LEFT : IN LIST ;
|
FUNCTION "=" (LEFT : IN LIST ;
|
RIGHT : IN LIST) RETURN BOOLEAN ;
|
RIGHT : IN LIST) RETURN BOOLEAN ;
|
|
|
PRIVATE
|
PRIVATE
|
|
|
TYPE LIST_TABLE IS ARRAY (POSITIVE RANGE 1 .. 10) OF ELEMENT ;
|
TYPE LIST_TABLE IS ARRAY (POSITIVE RANGE 1 .. 10) OF ELEMENT ;
|
|
|
TYPE LIST IS RECORD
|
TYPE LIST IS RECORD
|
LENGTH : NATURAL := 0 ;
|
LENGTH : NATURAL := 0 ;
|
ACTUAL_LIST : LIST_TABLE ;
|
ACTUAL_LIST : LIST_TABLE ;
|
END RECORD ;
|
END RECORD ;
|
|
|
END CC3019C0_LIST_CLASS ;
|
END CC3019C0_LIST_CLASS ;
|
|
|
PACKAGE BODY CC3019C0_LIST_CLASS IS
|
PACKAGE BODY CC3019C0_LIST_CLASS IS
|
|
|
PROCEDURE ADD (THIS_ELEMENT : IN OUT ELEMENT ;
|
PROCEDURE ADD (THIS_ELEMENT : IN OUT ELEMENT ;
|
TO_THIS_LIST : IN OUT LIST) IS
|
TO_THIS_LIST : IN OUT LIST) IS
|
|
|
BEGIN -- ADD
|
BEGIN -- ADD
|
|
|
IF TO_THIS_LIST.LENGTH >= 10 THEN
|
IF TO_THIS_LIST.LENGTH >= 10 THEN
|
RAISE OVERFLOW ;
|
RAISE OVERFLOW ;
|
ELSE
|
ELSE
|
TO_THIS_LIST.LENGTH := TO_THIS_LIST.LENGTH + 1 ;
|
TO_THIS_LIST.LENGTH := TO_THIS_LIST.LENGTH + 1 ;
|
ASSIGN (
|
ASSIGN (
|
SOURCE => THIS_ELEMENT,
|
SOURCE => THIS_ELEMENT,
|
DESTINATION =>
|
DESTINATION =>
|
TO_THIS_LIST.ACTUAL_LIST(TO_THIS_LIST.LENGTH));
|
TO_THIS_LIST.ACTUAL_LIST(TO_THIS_LIST.LENGTH));
|
END IF ;
|
END IF ;
|
|
|
END ADD ;
|
END ADD ;
|
|
|
PROCEDURE DELETE (THIS_ELEMENT : IN OUT ELEMENT ;
|
PROCEDURE DELETE (THIS_ELEMENT : IN OUT ELEMENT ;
|
FROM_THIS_LIST : IN OUT LIST) IS
|
FROM_THIS_LIST : IN OUT LIST) IS
|
|
|
BEGIN -- DELETE
|
BEGIN -- DELETE
|
|
|
IF FROM_THIS_LIST.LENGTH <= 0 THEN
|
IF FROM_THIS_LIST.LENGTH <= 0 THEN
|
RAISE UNDERFLOW ;
|
RAISE UNDERFLOW ;
|
ELSE
|
ELSE
|
ASSIGN (
|
ASSIGN (
|
SOURCE =>
|
SOURCE =>
|
FROM_THIS_LIST.ACTUAL_LIST(FROM_THIS_LIST.LENGTH),
|
FROM_THIS_LIST.ACTUAL_LIST(FROM_THIS_LIST.LENGTH),
|
DESTINATION => THIS_ELEMENT) ;
|
DESTINATION => THIS_ELEMENT) ;
|
FROM_THIS_LIST.LENGTH := FROM_THIS_LIST.LENGTH - 1 ;
|
FROM_THIS_LIST.LENGTH := FROM_THIS_LIST.LENGTH - 1 ;
|
END IF ;
|
END IF ;
|
|
|
END DELETE ;
|
END DELETE ;
|
|
|
PROCEDURE COPY (THIS_LIST : IN OUT LIST ;
|
PROCEDURE COPY (THIS_LIST : IN OUT LIST ;
|
TO_THIS_LIST : IN OUT LIST) IS
|
TO_THIS_LIST : IN OUT LIST) IS
|
|
|
BEGIN -- COPY
|
BEGIN -- COPY
|
|
|
TO_THIS_LIST.LENGTH := THIS_LIST.LENGTH ;
|
TO_THIS_LIST.LENGTH := THIS_LIST.LENGTH ;
|
FOR INDEX IN TO_THIS_LIST.ACTUAL_LIST'RANGE LOOP
|
FOR INDEX IN TO_THIS_LIST.ACTUAL_LIST'RANGE LOOP
|
ASSIGN (SOURCE => THIS_LIST.ACTUAL_LIST (INDEX),
|
ASSIGN (SOURCE => THIS_LIST.ACTUAL_LIST (INDEX),
|
DESTINATION => TO_THIS_LIST.ACTUAL_LIST (INDEX));
|
DESTINATION => TO_THIS_LIST.ACTUAL_LIST (INDEX));
|
END LOOP ;
|
END LOOP ;
|
|
|
END COPY ;
|
END COPY ;
|
|
|
PROCEDURE CLEAR (THIS_LIST : IN OUT LIST) IS
|
PROCEDURE CLEAR (THIS_LIST : IN OUT LIST) IS
|
|
|
BEGIN -- CLEAR
|
BEGIN -- CLEAR
|
|
|
THIS_LIST.LENGTH := 0 ;
|
THIS_LIST.LENGTH := 0 ;
|
|
|
END CLEAR ;
|
END CLEAR ;
|
|
|
PROCEDURE ITERATE (OVER_THIS_LIST : IN LIST) IS
|
PROCEDURE ITERATE (OVER_THIS_LIST : IN LIST) IS
|
|
|
CONTINUE : BOOLEAN := TRUE ;
|
CONTINUE : BOOLEAN := TRUE ;
|
FINISHED : NATURAL := 0 ;
|
FINISHED : NATURAL := 0 ;
|
|
|
BEGIN -- ITERATE
|
BEGIN -- ITERATE
|
|
|
WHILE (CONTINUE = TRUE) AND (FINISHED < OVER_THIS_LIST.LENGTH)
|
WHILE (CONTINUE = TRUE) AND (FINISHED < OVER_THIS_LIST.LENGTH)
|
LOOP
|
LOOP
|
FINISHED := FINISHED + 1 ;
|
FINISHED := FINISHED + 1 ;
|
PROCESS (THIS_ELEMENT =>
|
PROCESS (THIS_ELEMENT =>
|
OVER_THIS_LIST.ACTUAL_LIST (FINISHED),
|
OVER_THIS_LIST.ACTUAL_LIST (FINISHED),
|
CONTINUE => CONTINUE) ;
|
CONTINUE => CONTINUE) ;
|
END LOOP ;
|
END LOOP ;
|
|
|
END ITERATE ;
|
END ITERATE ;
|
|
|
FUNCTION NUMBER_OF_ELEMENTS (IN_THIS_LIST : IN LIST)
|
FUNCTION NUMBER_OF_ELEMENTS (IN_THIS_LIST : IN LIST)
|
RETURN NATURAL IS
|
RETURN NATURAL IS
|
|
|
BEGIN -- NUMBER_OF_ELEMENTS
|
BEGIN -- NUMBER_OF_ELEMENTS
|
|
|
RETURN IN_THIS_LIST.LENGTH ;
|
RETURN IN_THIS_LIST.LENGTH ;
|
|
|
END NUMBER_OF_ELEMENTS ;
|
END NUMBER_OF_ELEMENTS ;
|
|
|
FUNCTION "=" (LEFT : IN LIST ;
|
FUNCTION "=" (LEFT : IN LIST ;
|
RIGHT : IN LIST) RETURN BOOLEAN IS
|
RIGHT : IN LIST) RETURN BOOLEAN IS
|
|
|
RESULT : BOOLEAN := TRUE ;
|
RESULT : BOOLEAN := TRUE ;
|
INDEX : NATURAL := 0 ;
|
INDEX : NATURAL := 0 ;
|
|
|
BEGIN -- "="
|
BEGIN -- "="
|
|
|
IF LEFT.LENGTH /= RIGHT.LENGTH THEN
|
IF LEFT.LENGTH /= RIGHT.LENGTH THEN
|
RESULT := FALSE ;
|
RESULT := FALSE ;
|
ELSE
|
ELSE
|
WHILE (INDEX < LEFT.LENGTH) AND RESULT LOOP
|
WHILE (INDEX < LEFT.LENGTH) AND RESULT LOOP
|
INDEX := INDEX + 1 ;
|
INDEX := INDEX + 1 ;
|
IF LEFT.ACTUAL_LIST (INDEX) /=
|
IF LEFT.ACTUAL_LIST (INDEX) /=
|
RIGHT.ACTUAL_LIST (INDEX) THEN
|
RIGHT.ACTUAL_LIST (INDEX) THEN
|
RESULT := FALSE ;
|
RESULT := FALSE ;
|
END IF ;
|
END IF ;
|
END LOOP ;
|
END LOOP ;
|
END IF ;
|
END IF ;
|
|
|
RETURN RESULT ;
|
RETURN RESULT ;
|
|
|
END "=" ;
|
END "=" ;
|
|
|
END CC3019C0_LIST_CLASS ;
|
END CC3019C0_LIST_CLASS ;
|
|
|