-- part of ParserTools, (c) 2017 Felix Krause
-- released under the terms of the MIT license, see the file "copying.txt"
with Text.Pool;
package Text.Builder is
type Reference is new Ada.Finalization.Controlled with private;
procedure Init (Object : in out Reference; Pool : Text.Pool.Reference;
Initial_Size : Positive := 255);
function Create (Pool : Text.Pool.Reference;
Initial_Size : Positive := 255) return Reference;
function Initialized (Object : Reference) return Boolean;
procedure Append (Object : in out Reference; Value : String)
with Pre => Object.Initialized;
procedure Append (Object : in out Reference; Value : Character)
with Pre => Object.Initialized;
procedure Append (Object : in out Reference; Value : Text.Reference)
with Pre => Object.Initialized;
function Lock (Object : in out Reference) return Text.Reference;
function Length (Object : Reference) return Natural;
private
type Reference is new Ada.Finalization.Controlled with record
Pool : Text.Pool.Reference;
Buffer : UTF_8_String_Access;
Next : System.Storage_Elements.Storage_Offset := 1;
end record;
overriding procedure Adjust (Object : in out Reference);
overriding procedure Finalize (Object : in out Reference);
procedure Grow (Object : in out Reference;
Size : System.Storage_Elements.Storage_Offset);
end Text.Builder;