A.8.1 The Generic Package Sequential_IO
Static Semantics
The generic library
package Sequential_IO has the following declaration:
{
AI12-0302-1}
with Ada.IO_Exceptions;
generic
type Element_Type(<>)
is private;
package Ada.Sequential_IO
with Global => in out synchronized is
type File_Type
is limited private;
type File_Mode
is (In_File, Out_File, Append_File);
-- File management
procedure Create(File :
in out File_Type;
Mode :
in File_Mode := Out_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)
with Global => overriding in out File;
procedure Write (File :
in File_Type; Item :
in Element_Type)
with Global => overriding in out File;
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 := Out_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 := Out_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.Sequential_IO;
{
AI95-00360-01}
The type File_Type needs finalization
(see
7.6)
in every instantiation of Sequential_IO.
Incompatibilities With Ada 83
The new enumeration element
Append_File may introduce upward incompatibilities. It is possible that
a program based on the assumption that File_Mode'Last = Out_File will
be illegal (e.g., case statement choice coverage) or execute with a different
effect in Ada 95.
Incompatibilities With Ada 95
{
AI95-00360-01}
Amendment Correction: File_Type in an instance
of Sequential_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.Sequential_IO. Therefore,
a use clause conflict is possible; see the introduction of Annex
A for more on this topic. If
an instance of Ada.Sequential_IO is referenced in a use_clause,
and a procedure Flush is defined in some other package that is also referenced
in a use_clause,
the user-defined Flush may no longer be use-visible, resulting in errors.
This should be rare and is easily fixed if it does occur.
{
AI12-0021-1}
The Wide_File_Names and Wide_Wide_File_Names nested
packages are newly added to Ada.Sequential_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