Contents Index Previous Next
13.13.1 The Package Streams
Static Semantics
1
The abstract type Root_Stream_Type is the root
type of the class of stream types. The types in this class represent
different kinds of streams. A new stream type is defined by extending
the root type (or some other stream type), overriding the Read and Write
operations, and optionally defining additional primitive subprograms,
according to the requirements of the particular kind of stream. The predefined
stream-oriented attributes like T'Read and T'Write make dispatching calls
on the Read and Write procedures of the Root_Stream_Type. (User-defined
T'Read and T'Write attributes can also make such calls, or can call the
Read and Write attributes of other types.)
2
package Ada.Streams is
pragma Pure(Streams){unpolluted}
;
3
type Root_Stream_Type is abstract tagged limited private;
4/1
{8652/0044}
type Stream_Element is mod implementation-defined;
type Stream_Element_Offset is range implementation-defined;
subtype Stream_Element_Count is
Stream_Element_Offset range 0..Stream_Element_Offset'Last;
type Stream_Element_Array is
array(Stream_Element_Offset range <>) of aliased Stream_Element;
5
procedure Read(
Stream : in out Root_Stream_Type;
Item : out Stream_Element_Array;
Last : out Stream_Element_Offset) is abstract;
6
procedure Write(
Stream : in out Root_Stream_Type;
Item : in Stream_Element_Array) is abstract;
7
private
... -- not specified by the language
end Ada.Streams;
8
The Read operation transfers Item'Length stream
elements from the specified stream to fill the array Item. The index
of the last stream element transferred is returned in Last. Last is less
than Item'Last only if the end of the stream is reached.
9
The Write operation appends Item to the specified
stream.
Implementation Permissions
9.1/1
{
8652/0044}
If Stream_Element'Size is not a multiple of System.Storage_Unit, then the
components of Stream_Element_Array need not be aliased.
9.a.1/1
Ramification: If the
Stream_Element'Size is less than the size of System.Storage_Unit, then
components of Stream_Element_Array need not be aliased. This is necessary
as the components of type Stream_Element size might not be addressable
on the target architechture.
10
Contents Index Previous Next Legal