欢迎来到虫虫下载站 | 资源下载 资源专辑 关于我们
虫虫下载站

c392005.a

linux下编程用 编译软件
A
字号:
-- C392005.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, for an implicitly declared dispatching operation that is--      overridden, the body executed is the body for the overriding--      subprogram, even if the overriding occurs in a private part.----      Check for the case where the overriding operations are declared in a--      public child unit of the package declaring the parent type, and the--      descendant type is a private extension.----      Check for both dispatching and nondispatching calls.------ TEST DESCRIPTION:--      Consider:----      package Parent is--         type Root is tagged ...--         procedure Vis_Op (P: Root);--      private--         procedure Pri_Op (P: Root);--      end Parent;----      package Parent.Child is--         type Derived is new Root with private;--         -- Implicit Vis_Op (P: Derived) declared here.----         procedure Pri_Op (P: Derived);                  -- (A)--         ...--      private--         type Derived is new Root with record...--         -- Implicit Pri_Op (P: Derived) declared here.--         procedure Vis_Op (P: Derived);                  -- (B)--         ...--      end Parent.Child;----      Type Derived inherits both Vis_Op and Pri_Op from the ancestor type--      Root. Note, however, that Vis_Op is implicitly declared in the visible--      part, whereas Pri_Op is implicitly declared in the private part--      (inherited subprograms for a private extension are implicitly declared--      after the private_extension_declaration if the corresponding--      declaration from the ancestor is visible at that place; otherwise the--      inherited subprogram is not declared for the private extension,--      although it might be for the full type).----      Even though Root's version of Pri_Op hasn't been implicitly declared--      for Derived at the time Derived's version of Pri_Op has been--      explicitly declared, the explicit Pri_Op still overrides the implicit--      version. --      Also, even though the explicit Vis_Op for Derived is declared in the--      private part it still overrides the implicit version declared in the--      visible part. Calls with tag Derived will execute (A) and (B).------ CHANGE HISTORY:--      06 Dec 94   SAIC    ACVC 2.0--      26 Nov 96   SAIC    Improved for ACVC 2.1----!package C392005_0 is   type Remote_Camera is tagged private;   type Depth_Of_Field is range 5 .. 100;     type Shutter_Speed  is (One, Two_Fifty, Four_Hundred, Thousand);   type Aperture       is (Eight, Sixteen, Thirty_Two);        -- ...Other declarations.   procedure Focus (Cam   : in out Remote_Camera;                    Depth : in     Depth_Of_Field);   procedure Self_Test (C: in out Remote_Camera'Class);   -- ...Other operations.   function TC_Get_Depth (C: Remote_Camera) return Depth_Of_Field;   function TC_Get_Speed (C: Remote_Camera) return Shutter_Speed;private   type Remote_Camera is tagged record      DOF    : Depth_Of_Field := 10;      Shutter: Shutter_Speed  := One;      FStop  : Aperture       := Eight;   end record;   procedure Set_Shutter_Speed (C     : in out Remote_Camera;                                Speed : in     Shutter_Speed);   -- For the basic remote camera, shutter speed might be set as a function of   -- focus perhaps, thus it is declared as a private operation (usable   -- only internally within the abstraction).   function Set_Aperture (C : Remote_Camera) return Aperture;                               end C392005_0;     --==================================================================--package body C392005_0 is   procedure Focus (Cam   : in out Remote_Camera;                    Depth : in     Depth_Of_Field) is   begin      -- Artificial for testing purposes.      Cam.DOF := 46;   end Focus;   -----------------------------------------------------------   procedure Set_Shutter_Speed (C     : in out Remote_Camera;                                Speed : in     Shutter_Speed) is   begin      -- Artificial for testing purposes.      C.Shutter := Thousand;   end Set_Shutter_Speed;   -----------------------------------------------------------   function Set_Aperture (C : Remote_Camera) return Aperture is   begin      -- Artificial for testing purposes.      return Thirty_Two;   end Set_Aperture;   -----------------------------------------------------------   procedure Self_Test (C: in out Remote_Camera'Class) is      TC_Dummy_Depth : constant Depth_Of_Field := 23;      TC_Dummy_Speed : constant Shutter_Speed  := Four_Hundred;   begin      -- Test focus at various depths:      Focus(C, TC_Dummy_Depth);      -- ...Additional calls to Focus.      -- Test various shutter speeds:      Set_Shutter_Speed(C, TC_Dummy_Speed);      -- ...Additional calls to Set_Shutter_Speed.   end Self_Test;   -----------------------------------------------------------   function TC_Get_Depth (C: Remote_Camera) return Depth_Of_Field is   begin      return C.DOF;   end TC_Get_Depth;   -----------------------------------------------------------   function TC_Get_Speed (C: Remote_Camera) return Shutter_Speed is   begin      return C.Shutter;   end TC_Get_Speed;end C392005_0;     --==================================================================--package C392005_0.C392005_1 is   type Auto_Speed is new Remote_Camera with private;   -- procedure Focus (C     : in out Auto_Speed;      -- Implicitly declared   --                  Depth : in     Depth_Of_Field)  -- here.   -- For the improved remote camera, shutter speed can be set manually,   -- so it is declared as a public operation.   -- The order of declarations for Set_Aperture and Set_Shutter_Speed are   -- reversed from the original declarations to trap potential compiler   -- problems related to subprogram ordering.   function Set_Aperture (C : Auto_Speed) return Aperture;    -- Overrides                                                              -- inherited op.   procedure Set_Shutter_Speed (C     : in out Auto_Speed;    -- Overrides                                Speed : in     Shutter_Speed);-- inherited op.   -- Set_Shutter_Speed and Set_Aperture override the operations inherited   -- from the parent, even though the inherited operations are not implicitly   -- declared until the private part below.   type New_Camera is private;   function TC_Get_Aper (C: New_Camera) return Aperture;   -- ...Other operations.private   type Film_Speed is (One_Hundred, Two_Hundred, Four_Hundred);   type Auto_Speed is new Remote_Camera with record      ASA : Film_Speed;   end record;   -- procedure Set_Shutter_Speed (C     : in out Auto_Speed;    -- Implicitly   --                              Speed : in     Shutter_Speed) -- declared                                                                 -- here.   -- function Set_Aperture (C : Auto_Speed) return Aperture;    -- Implicitly                                                                 -- declared.   procedure Focus (C     : in out Auto_Speed;                -- Overrides                    Depth : in     Depth_Of_Field);           -- inherited op.   -- For the improved remote camera, perhaps the focusing algorithm is   -- different, so the original Focus operation is overridden here.   Auto_Camera : Auto_Speed;   type New_Camera is record      Aper : Aperture := Set_Aperture (Auto_Camera);  -- Calls the overridden,   end record;                                        -- not the inherited op.end C392005_0.C392005_1;     --==================================================================--package body C392005_0.C392005_1 is   procedure Focus (C     : in out Auto_Speed;                    Depth : in     Depth_Of_Field) is   begin      -- Artificial for testing purposes.      C.DOF := 57;   end Focus;   ---------------------------------------------------------------   procedure Set_Shutter_Speed (C     : in out Auto_Speed;                                Speed : in     Shutter_Speed) is   begin      -- Artificial for testing purposes.      C.Shutter := Two_Fifty;   end Set_Shutter_Speed;   -----------------------------------------------------------   function Set_Aperture (C : Auto_Speed) return Aperture is   begin      -- Artificial for testing purposes.      return Sixteen;   end Set_Aperture;   -----------------------------------------------------------   function TC_Get_Aper (C: New_Camera) return Aperture is   begin      return C.Aper;   end TC_Get_Aper;end C392005_0.C392005_1;     --==================================================================--with C392005_0.C392005_1;with Report;procedure C392005 is   Basic_Camera : C392005_0.Remote_Camera;   Auto_Camera1 : C392005_0.C392005_1.Auto_Speed;   Auto_Camera2 : C392005_0.C392005_1.Auto_Speed;   Auto_Depth   : C392005_0.Depth_Of_Field := 67;   New_Camera1  : C392005_0.C392005_1.New_Camera;   TC_Expected_Basic_Depth : constant C392005_0.Depth_Of_Field := 46;   TC_Expected_Auto_Depth  : constant C392005_0.Depth_Of_Field := 57;   TC_Expected_Basic_Speed : constant C392005_0.Shutter_Speed                             := C392005_0.Thousand;   TC_Expected_Auto_Speed  : constant C392005_0.Shutter_Speed                             := C392005_0.Two_Fifty;   TC_Expected_New_Aper    : constant C392005_0.Aperture                            := C392005_0.Sixteen;   use type C392005_0.Depth_Of_Field;   use type C392005_0.Shutter_Speed;   use type C392005_0.Aperture;begin   Report.Test ("C392005", "Dispatching for overridden primitive "        &                "subprograms: private extension declared in child unit, " &                "parent is tagged private whose full view is tagged record");-- Call the class-wide operation for Remote_Camera'Class, which itself makes-- dispatching calls to Focus and Set_Shutter_Speed:   -- For an object of type Remote_Camera, the dispatching calls should   -- dispatch to the bodies declared for the root type:        C392005_0.Self_Test(Basic_Camera);   if C392005_0.TC_Get_Depth (Basic_Camera) /= TC_Expected_Basic_Depth      or else C392005_0.TC_Get_Speed (Basic_Camera) /= TC_Expected_Basic_Speed   then      Report.Failed ("Calls dispatched incorrectly for root type");   end if;   -- For an object of type Auto_Speed, the dispatching calls should   -- dispatch to the bodies declared for the derived type:        C392005_0.Self_Test(Auto_Camera1);   if C392005_0.C392005_1.TC_Get_Depth(Auto_Camera1) /= TC_Expected_Auto_Depth      or      C392005_0.C392005_1.TC_Get_Speed(Auto_Camera1) /= TC_Expected_Auto_Speed   then      Report.Failed ("Calls dispatched incorrectly for derived type");   end if;   -- For an object of type Auto_Speed, a non-dispatching call to Focus should   -- execute the body declared for the derived type (even through it is    -- declared in the private part).   C392005_0.C392005_1.Focus (Auto_Camera2, Auto_Depth);   if C392005_0.C392005_1.TC_Get_Depth(Auto_Camera2) /= TC_Expected_Auto_Depth   then      Report.Failed ("Non-dispatching call to privately overriding " &                     "subprogram executed the wrong body");   end if;   -- For an object of type New_Camera, the initialization using Set_Ap    -- should execute the overridden body, not the inherited one.   if C392005_0.C392005_1.TC_Get_Aper (New_Camera1) /= TC_Expected_New_Aper     then      Report.Failed ("Non-dispatching call to visible overriding " &                     "subprogram executed the wrong body");   end if;   Report.Result;end C392005;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -