fdd2a00.a

来自「linux下编程用 编译软件」· A 代码 · 共 150 行

A
150
字号
-- FDD2A00.A----                             Grant of Unlimited Rights----     The Ada Conformity Assessment Authority (ACAA) holds unlimited--     rights in the software and documentation contained herein. Unlimited--     rights are the same as those granted by the U.S. Government for older--     parts of the Ada Conformity Assessment Test Suite, and are defined--     in DFAR 252.227-7013(a)(19). By making this public release, the ACAA--     intends to confer upon all recipients unlimited rights equal to those--     held by the ACAA. 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.------ FOUNDATION DESCRIPTION:--      This foundation provides the basis for testing user-defined stream--      attributes. It provides operations which count calls to stream--      attributes.---- CHANGE HISTORY:--    30 JUL 2001   PHL   Initial version.--     5 DEC 2001   RLB   Reformatted for ACATS.--with Ada.Streams;use Ada.Streams;package FDD2A00 is    type Kinds is (Read, Write, Input, Output);    type Counts is array (Kinds) of Natural;    type My_Stream (Size : Stream_Element_Count) is new Root_Stream_Type with        record            First : Stream_Element_Offset := 1;            Last : Stream_Element_Offset := 0;            Contents : Stream_Element_Array (1 .. Size);        end record;    procedure Clear (Stream : in out My_Stream);    procedure Read (Stream : in out My_Stream;                    Item : out Stream_Element_Array;                    Last : out Stream_Element_Offset);    procedure Write (Stream : in out My_Stream; Item : in Stream_Element_Array);    generic        type T (<>) is limited private;        with procedure Actual_Write                          (Stream : access Root_Stream_Type'Class; Item : T);        with function Actual_Input                         (Stream : access Root_Stream_Type'Class) return T;        with procedure Actual_Read (Stream : access Root_Stream_Type'Class;                                    Item : out T);        with procedure Actual_Output                          (Stream : access Root_Stream_Type'Class; Item : T);    package Counting_Stream_Ops is        procedure Write (Stream : access Root_Stream_Type'Class; Item : T);        function Input (Stream : access Root_Stream_Type'Class) return T;        procedure Read (Stream : access Root_Stream_Type'Class; Item : out T);        procedure Output (Stream : access Root_Stream_Type'Class; Item : T);        function Get_Counts return Counts;    end Counting_Stream_Ops;end FDD2A00;package body FDD2A00 is    procedure Clear (Stream : in out My_Stream) is    begin        Stream.First := 1;        Stream.Last := 0;    end Clear;    procedure Read (Stream : in out My_Stream;                    Item : out Stream_Element_Array;                    Last : out Stream_Element_Offset) is    begin        if Item'Length >= Stream.Last - Stream.First + 1 then            Item (Item'First .. Item'First + Stream.Last - Stream.First) :=               Stream.Contents (Stream.First .. Stream.Last);            Last := Item'First + Stream.Last - Stream.First;            Stream.First := Stream.Last + 1;        else            Item := Stream.Contents (Stream.First ..                                        Stream.First + Item'Length - 1);            Last := Item'Last;            Stream.First := Stream.First + Item'Length;        end if;    end Read;    procedure Write (Stream : in out My_Stream;                     Item : in Stream_Element_Array) is    begin        Stream.Contents (Stream.Last + 1 .. Stream.Last + Item'Length) := Item;        Stream.Last := Stream.Last + Item'Length;    end Write;    package body Counting_Stream_Ops is        Cnts : Counts := (others => 0);        procedure Write (Stream : access Root_Stream_Type'Class; Item : T) is        begin            Cnts (Write) := Cnts (Write) + 1;            Actual_Write (Stream, Item);        end Write;        function Input (Stream : access Root_Stream_Type'Class) return T is        begin            Cnts (Input) := Cnts (Input) + 1;            return Actual_Input (Stream);        end Input;        procedure Read (Stream : access Root_Stream_Type'Class; Item : out T) is        begin            Cnts (Read) := Cnts (Read) + 1;            Actual_Read (Stream, Item);        end Read;        procedure Output (Stream : access Root_Stream_Type'Class; Item : T) is        begin            Cnts (Output) := Cnts (Output) + 1;            Actual_Output (Stream, Item);        end Output;        function Get_Counts return Counts is        begin            return Cnts;        end Get_Counts;    end Counting_Stream_Ops;end FDD2A00;

⌨️ 快捷键说明

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