ca11007.a
字号:
-- CA11007.A---- Grant of Unlimited Rights---- 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 -- unlimited rights in the software and documentation contained herein.-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making -- this public release, the Government intends to confer upon all -- recipients unlimited rights equal to those held by the Government. -- These rights include rights to use, duplicate, release or disclose the -- 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 -- to do so.---- DISCLAIMER---- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED -- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE -- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A-- PARTICULAR PURPOSE OF SAID MATERIAL.--*---- OBJECTIVE:-- Check that the private part of a grandchild library unit can-- utilize its grandparent unit's private definition.---- TEST DESCRIPTION:-- Declare a package, child package, and grandchild package, all -- with private parts in their specifications. ---- The private part of the grandchild package will make use of components-- that have been declared in the private part of the grandparent-- specification.---- The child package demonstrates the extension of a parent file type -- into an abstraction of an analog file structure. The grandchild package-- extends the grandparent file type into an abstraction of a digital -- file structure, and provides conversion capability to/from the parent -- analog file structure.------ CHANGE HISTORY:-- 06 Dec 94 SAIC ACVC 2.0----! package CA11007_0 is -- Package File_Package type File_Descriptor is private; type File_Type is tagged private; function Next_Available_File return File_Descriptor;private type File_Measure_Type is range 0 .. 1000; type File_Descriptor is new Integer; Null_Measure : constant File_Measure_Type := File_Measure_Type'First; Null_File : constant File_Descriptor := 0; type File_Type is tagged record Descriptor : File_Descriptor := Null_File; end record;end CA11007_0; -- Package File_Package --=================================================================--package body CA11007_0 is -- Package body File_Package File_Count : Integer := 0; function Next_Available_File return File_Descriptor is begin File_Count := File_Count + 1; return File_Descriptor (File_Count); end Next_Available_File;end CA11007_0; -- Package body File_Package --=================================================================--package CA11007_0.CA11007_1 is -- Child package Analog type Analog_File_Type is new File_Type with private;private type Wavelength_Type is new File_Measure_Type; Min_Wavelength : constant Wavelength_Type := Wavelength_Type'First; type Analog_File_Type is new File_Type with -- Parent type. record Wavelength : Wavelength_Type := Min_Wavelength; end record;end CA11007_0.CA11007_1; -- Child package Analog --=================================================================--package CA11007_0.CA11007_1.CA11007_2 is -- Grandchild package Digital type Digital_File_Type is new File_Type with private; procedure Recording (File : out Digital_File_Type); procedure Convert (From : in Analog_File_Type; To : out Digital_File_Type); function Validate (File : in Digital_File_Type) return Boolean; function Valid_Conversion (To : Digital_File_Type) return Boolean; function Valid_Initial (From : Analog_File_Type) return Boolean;private type Track_Type is new File_Measure_Type; -- Grandparent type. Min_Tracks : constant Track_Type := Track_Type (Null_Measure) + Track_Type'First; -- Grandparent private Max_Tracks : constant Track_Type := -- constant. Track_Type (Null_Measure) + Track_Type'Last; type Digital_File_Type is new File_Type with -- Grandparent type. record Tracks : Track_Type := Min_Tracks; end record;end CA11007_0.CA11007_1.CA11007_2; -- Grandchild package Digital --=================================================================-- -- Grandchild package body Digitalpackage body CA11007_0.CA11007_1.CA11007_2 is procedure Recording (File : out Digital_File_Type) is begin File.Descriptor := Next_Available_File; -- Assign new file descriptor. File.Tracks := Max_Tracks; -- Change initial value. end Recording; -------------------------------------------------------------------------- procedure Convert (From : in Analog_File_Type; To : out Digital_File_Type) is begin To.Descriptor := From.Descriptor + 100; -- Dummy conversion. To.Tracks := Track_Type (From.Wavelength) / 2; end Convert; -------------------------------------------------------------------------- function Validate (File : in Digital_File_Type) return Boolean is Result : Boolean := False; begin if not (File.Tracks /= Max_Tracks) then Result := True; end if; return Result; end Validate; -------------------------------------------------------------------------- function Valid_Conversion (To : Digital_File_Type) return Boolean is begin return (To.Descriptor = 100) and (To.Tracks = (Min_Tracks / 2)); end Valid_Conversion; -------------------------------------------------------------------------- function Valid_Initial (From : Analog_File_Type) return Boolean is begin return (From.Wavelength = Min_Wavelength); -- Validate initial end Valid_Initial; -- conditions. end CA11007_0.CA11007_1.CA11007_2; -- Grandchild package body Digital --=================================================================--with CA11007_0.CA11007_1.CA11007_2; -- with Grandchild package Digitalwith Report;procedure CA11007 is package Analog renames CA11007_0.CA11007_1; package Digital renames CA11007_0.CA11007_1.CA11007_2; Original_Digital_File, Converted_Digital_File : Digital.Digital_File_Type; Original_Analog_File : Analog.Analog_File_Type;begin -- This code demonstrates how private extensions could be utilized -- in child packages to allow for recording on different media. -- The processing contained in the procedures and functions is -- "dummy" processing, not intended to perform actual recording, -- conversion, or validation operations, but simply to demonstrate -- this type of structural decomposition as a possible solution to -- a user's design problem. Report.Test ("CA11007", "Check that the private part of a grandchild " & "library unit can utilize its grandparent " & "unit's private definition"); if not Digital.Valid_Initial (Original_Analog_File) then Report.Failed ("Incorrect initialization of Analog File"); end if; --- Digital.Convert (From => Original_Analog_File, -- Convert file to To => Converted_Digital_File); -- digital format. if not Digital.Valid_Conversion (To => Converted_Digital_File) then Report.Failed ("Incorrect conversion of analog file"); end if; --- Digital.Recording (Original_Digital_File); -- Create file in -- digital format. if not Digital.Validate (Original_Digital_File) then Report.Failed ("Incorrect recording of digital file"); end if; Report.Result;end CA11007;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -