c3a0009.a
来自「linux下编程用 编译软件」· A 代码 · 共 220 行
A
220 行
-- C3A0009.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 subprogram references may be passed as parameters using -- access-to-subprogram types. Check that the passed subprograms may -- be invoked from within the called subprogram.---- TEST DESCRIPTION:-- Declare an access to procedure type in a package specification. -- Declare a root tagged type with the access to procedure type as a -- component. Declare three primitive procedures for the type that -- can be referred to by the access to procedure type. Use the access -- to procedure type to initialize the component of a record.---- Extend the root type with a private extension in the same package-- specification. Declare two new primitive subprograms for the extension-- (in addition to its three inherited subprograms).---- In the main program, declare an operation for the root tagged type -- which can be passed as an access value to change the initial value-- of the component. Call the inherited operations indirectly by -- de-referencing the access value to set value in the extension.-- Call the primitive function to modify the extension by passing -- the access value designating the primitive procedure as a parameter.------ CHANGE HISTORY:-- 06 Dec 94 SAIC ACVC 2.0----!package C3A0009_0 is -- Push_Buttons type Button is tagged private; -- Type accesses to procedures Push and Default_Response type Button_Response_Ptr is access procedure (B : in out Button); procedure Push (B : in out Button); -- to be inherited procedure Set_Response (B : in out Button; -- to be inherited R : in Button_Response_Ptr); procedure Default_Response (B : in out Button); -- to be inherited type Alert_Button is new Button with private; -- private extension of -- root tagged type -- Inherits procedure Push from Button -- Inherits procedure Set_Response from Button -- Inherits procedure Default_Response from Button procedure Replace_Action( B: in out Alert_Button ); -- type accesses to procedure Default_Action type Button_Action_Ptr is access procedure; -- The following function is needed to set value in the -- extension's private component. function Alert (B : in Alert_Button) return Button_Action_Ptr;private type Button is tagged -- root tagged type record Response : Button_Response_Ptr := Default_Response'Access; end record; procedure Default_Action; type Alert_Button is new Button with record Action : Button_Action_Ptr := Default_Action'Access; end record;end C3A0009_0;-----------------------------------------------------------------------------with TCTouch;package body C3A0009_0 is procedure Push (B : in out Button) is begin TCTouch.Touch( 'P' ); --------------------------------------------- P -- Invoking subprogram designated by access value B.Response (B); end Push; procedure Set_Response (B : in out Button; R : in Button_Response_Ptr) is begin TCTouch.Touch( 'S' ); --------------------------------------------- S -- Set procedure value in record B.Response := R; end Set_Response; procedure Default_Response (B : in out Button) is begin TCTouch.Touch( 'D' ); --------------------------------------------- D end Default_Response; procedure Default_Action is begin TCTouch.Touch( 'd' ); --------------------------------------------- d end Default_Action; procedure Replacement_Action is begin TCTouch.Touch( 'r' ); --------------------------------------------- r end Replacement_Action; procedure Replace_Action( B: in out Alert_Button ) is begin TCTouch.Touch( 'R' ); --------------------------------------------- R B.Action := Replacement_Action'Access; end Replace_Action; function Alert (B : in Alert_Button) return Button_Action_Ptr is begin TCTouch.Touch( 'A' ); --------------------------------------------- A return (B.Action); end Alert;end C3A0009_0;-----------------------------------------------------------------------------with C3A0009_0;package C3A0009_1 is -- Emergency_Items package Push_Buttons renames C3A0009_0; procedure Emergency (B : in out Push_Buttons.Button);end C3A0009_1;with TCTouch;package body C3A0009_1 is -- Emergency_Items procedure Emergency (B : in out Push_Buttons.Button) is begin TCTouch.Touch( 'E' ); ------------------------------------------- E end Emergency;end C3A0009_1;-----------------------------------------------------------------------------with Report;with C3A0009_0, C3A0009_1; with TCTouch;procedure C3A0009 is package Push_Buttons renames C3A0009_0; package Emergency_Items renames C3A0009_1; Black_Button : Push_Buttons.Alert_Button; Alert_Ptr : Push_Buttons.Button_Action_Ptr;begin Report.Test ("C3A0009", "Check that subprogram references may be passed " & "as parameters using access-to-subprogram types. " & "Check that the passed subprograms may be " & "invoked from within the called subprogram"); Push_Buttons.Push( Black_Button ); Push_Buttons.Alert( Black_Button ).all; TCTouch.Validate( "PDAd", "Default operation set" ); -- Call inherited operations Set_Response and Push to set -- Emergency value in the extension. Push_Buttons.Set_Response (Black_Button, Emergency_Items.Emergency'Access); Push_Buttons.Push( Black_Button ); Push_Buttons.Alert( Black_Button ).all; TCTouch.Validate( "SPEAd", "Altered Response set" ); -- Call primitive operation to set action value in the extension. Push_Buttons.Replace_Action( Black_Button ); Push_Buttons.Push( Black_Button ); Push_Buttons.Alert( Black_Button ).all; TCTouch.Validate( "RPEAr", "Altered Action set" ); Report.Result;end C3A0009;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?