Next: , Previous: A.8.3, Up: A.8


A.8.4 The Generic Package Direct_IO

Static Semantics

1
The generic library package Direct_IO has the following declaration:

2

     with Ada.IO_Exceptions;
     generic
        type Element_Type is private;
     package Ada.Direct_IO is

3

        type File_Type is limited private;

4

        type File_Mode is (In_File, Inout_File, Out_File);
        type Count     is range .. implementation−defined;
        subtype Positive_Count is Count range .. Count'Last;

5

        −− File management

6

        procedure Create(File in out File_Type;
                         Mode in File_Mode := Inout_File;
                         Name in String := "";
                         Form in String := "");

7

        procedure Open  (File in out File_Type;
                         Mode in File_Mode;
                         Name in String;
                         Form in String := "");

8

        procedure Close (File in out File_Type);
        procedure Delete(File in out File_Type);
        procedure Reset (File in out File_Type; Mode in File_Mode);
        procedure Reset (File in out File_Type);

9

        function Mode   (File in File_Type) return File_Mode;
        function Name   (File in File_Type) return String;
        function Form   (File in File_Type) return String;

10

        function Is_Open(File in File_Type) return Boolean;

11

        −− Input and output operations

12

        procedure Read (File in File_Type; Item out Element_Type;
                                             From in Positive_Count);
        procedure Read (File in File_Type; Item out Element_Type);

13

        procedure Write(File in File_Type; Item in  Element_Type;
                                             To   in Positive_Count);
        procedure Write(File in File_Type; Item in Element_Type);

14

        procedure Set_Index(File in File_Type; To in Positive_Count);

15

        function Index(File in File_Type) return Positive_Count;
        function Size (File in File_Type) return Count;

16

        function End_Of_File(File in File_Type) return Boolean;

17

        −− Exceptions

18

        Status_Error exception renames IO_Exceptions.Status_Error;
        Mode_Error   exception renames IO_Exceptions.Mode_Error;
        Name_Error   exception renames IO_Exceptions.Name_Error;
        Use_Error    exception renames IO_Exceptions.Use_Error;
        Device_Error exception renames IO_Exceptions.Device_Error;
        End_Error    exception renames IO_Exceptions.End_Error;
        Data_Error   exception renames IO_Exceptions.Data_Error;

19

     private
        ... −− not specified by the language
     end Ada.Direct_IO;

19.a

Reason: The Element_Type formal of Direct_IO does not have an unknown_discriminant_part (unlike Sequential_IO) so that the implementation can make use of the ability to declare uninitialized variables of the type.

20/2
{00360AI95−00360−01} The type File_Type needs finalization (see 7.6) in every instantiation of Direct_IO.

20.a.1/2

This paragraph was deleted.{8652/00978652/0097} {00115AI95−00115−01} {00344AI95−00344−01}
Incompatibilities With Ada 95

20.a/2

{00360AI95−00360−01} {incompatibilities with Ada 95} Amendment Correction: File_Type in an instance of Direct_IO is defined to need finalization. If the restriction No_Nested_Finalization (see D.7) applies to the partition, and File_Type does not have a controlled part, it will not be allowed in local objects in Ada 2005 whereas it would be allowed in original Ada 95. Such code is not portable, as another Ada compiler may have a controlled part in File_Type, and thus would be illegal.