blob: 3c6ad3a015e10fb14286d1f0a7a4f1177aa493aa [file] [log] [blame]
------------------------------------------------------------------------------
-- --
-- GNAT RUN-TIME COMPONENTS --
-- --
-- ADA.STRINGS.TEXT_BUFFERS.UNBOUNDED --
-- --
-- S p e c --
-- --
-- This specification is derived from the Ada Reference Manual for use with --
-- GNAT. In accordance with the copyright of that document, you can freely --
-- copy and modify this specification, provided that if you redistribute a --
-- modified version, any changes that you have made are clearly indicated. --
-- --
------------------------------------------------------------------------------
with Ada.Finalization;
package Ada.Strings.Text_Buffers.Unbounded with
Preelaborate
-- , Nonblocking
-- , Global => null
is
type Buffer_Type is new Root_Buffer_Type with private;
function Get (Buffer : in out Buffer_Type) return String with
Post'Class => Get'Result'First = 1 and then Current_Indent (Buffer) = 0;
function Wide_Get (Buffer : in out Buffer_Type) return Wide_String with
Post'Class => Wide_Get'Result'First = 1
and then Current_Indent (Buffer) = 0;
function Wide_Wide_Get
(Buffer : in out Buffer_Type) return Wide_Wide_String with
Post'Class => Wide_Wide_Get'Result'First = 1
and then Current_Indent (Buffer) = 0;
function Get_UTF_8
(Buffer : in out Buffer_Type) return UTF_Encoding.UTF_8_String with
Post'Class => Get_UTF_8'Result'First = 1
and then Current_Indent (Buffer) = 0;
function Wide_Get_UTF_16
(Buffer : in out Buffer_Type) return UTF_Encoding.UTF_16_Wide_String with
Post'Class => Wide_Get_UTF_16'Result'First = 1
and then Current_Indent (Buffer) = 0;
private
procedure Put_UTF_8_Implementation
(Buffer : in out Root_Buffer_Type'Class;
Item : UTF_Encoding.UTF_8_String)
with Pre => Buffer in Buffer_Type'Class;
package Mapping is new Output_Mapping (Put_UTF_8_Implementation);
type Chunk;
type Chunk_Access is access all Chunk;
type Chunk (Length : Positive) is record
Next : Chunk_Access := null;
Chars : UTF_Encoding.UTF_8_String (1 .. Length);
end record;
type Managed_Chunk_List is new Ada.Finalization.Limited_Controlled with
record
First_Chunk : aliased Chunk (64);
-- First chunk in list is not created by an allocator; it is
-- large enough to suffice for many common images.
Current_Chunk : Chunk_Access;
-- Chunk we are currrently writing to.
-- Initialized to Managed_Chunk_List.First'Access.
end record;
overriding procedure Initialize (List : in out Managed_Chunk_List);
-- List.Current_Chunk := List.First_Chunk'Unchecked_Access;
overriding procedure Finalize (List : in out Managed_Chunk_List);
-- Free any allocated chunks.
type Buffer_Type is new Mapping.Buffer_Type with record
List : Managed_Chunk_List;
Last_Used : Natural := 0;
-- Index of last used char in List.Current_Chunk.all; 0 if none used.
end record;
end Ada.Strings.Text_Buffers.Unbounded;