A.8.4 The Generic Package Direct_IO
Static Semantics
The generic library
package Direct_IO has the following declaration:
{
AI12-0302-1}
with Ada.IO_Exceptions;
generic
type Element_Type
is private;
package Ada.Direct_IO
with Global =>
in out synchronized is
type File_Type
is limited private;
type File_Mode
is (In_File, Inout_File, Out_File);
type Count
is range 0 ..
implementation-defined;
subtype Positive_Count
is Count
range 1 .. Count'Last;
-- File management
procedure Create(File :
in out File_Type;
Mode :
in File_Mode := Inout_File;
Name :
in String := "";
Form :
in String := "");
procedure Open (File :
in out File_Type;
Mode :
in File_Mode;
Name :
in String;
Form :
in String := "");
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);
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;
function Is_Open(File :
in File_Type)
return Boolean;
-- Input and output operations
{
AI12-0302-1}
procedure Read (File :
in File_Type; Item :
out Element_Type;
From :
in Positive_Count)
with Global =>
overriding in out File;
procedure Read (File :
in File_Type; Item :
out Element_Type)
with Global =>
overriding in out File;
{
AI12-0302-1}
procedure Write(File :
in File_Type; Item :
in Element_Type;
To :
in Positive_Count)
with Global =>
overriding in out File;
procedure Write(File :
in File_Type; Item :
in Element_Type)
with Global =>
overriding in out File;
{
AI12-0302-1}
procedure Set_Index(File :
in File_Type; To :
in Positive_Count)
with Global =>
overriding in out File;
function Index(File :
in File_Type)
return Positive_Count;
function Size (File :
in File_Type)
return Count;
function End_Of_File(File :
in File_Type)
return Boolean;
-- Exceptions
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;
-- File management
procedure Create(File :
in out File_Type;
Mode :
in File_Mode := Inout_File;
Name :
in Wide_String := "";
Form :
in Wide_String := "");
procedure Open (File :
in out File_Type;
Mode :
in File_Mode;
Name :
in Wide_String;
Form :
in Wide_String := "");
function Name (File :
in File_Type)
return Wide_String;
function Form (File :
in File_Type)
return Wide_String;
end Wide_File_Names;
-- File management
procedure Create(File :
in out File_Type;
Mode :
in File_Mode := Inout_File;
Name :
in Wide_Wide_String := "";
Form :
in Wide_Wide_String := "");
procedure Open (File :
in out File_Type;
Mode :
in File_Mode;
Name :
in Wide_Wide_String;
Form :
in Wide_Wide_String := "");
function Name (File :
in File_Type)
return Wide_Wide_String;
function Form (File :
in File_Type)
return Wide_Wide_String;
end Wide_Wide_File_Names;
private
... -- not specified by the language
end Ada.Direct_IO;
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.
{
AI95-00360-01}
The type File_Type needs finalization
(see
7.6)
in every instantiation of Direct_IO.
Incompatibilities With Ada 95
{
AI95-00360-01}
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.
Incompatibilities With Ada 2012
{
AI12-0130-1}
{
AI05-0005-1}
Corrigendum: The Flush procedure is newly
added to Ada.Direct_IO. Therefore, a use clause conflict is possible;
see the introduction of
Annex A for more on this
topic.
{
AI12-0021-1}
The Wide_File_Names and Wide_Wide_File_Names nested packages are newly
added to Ada.Direct_IO. Therefore, a use clause conflict is possible;
see the introduction of
Annex A for more on this
topic.
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe