adayaml_0.3.0_ab19e387/Parser_Tools/src/interface/text-pool.ads

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
--  part of ParserTools, (c) 2017 Felix Krause
--  released under the terms of the MIT license, see the file "copying.txt"

package Text.Pool is
   type Reference is new Ada.Finalization.Controlled with private;

   Default_Size : constant Pool_Offset;

   --  must be called once before the string pool can be used. if called again,
   --  the string pool re-initializes itself with new memory, and the old memory
   --  lives on only in References that have already been generated. the
   --  old memory is reclaimed once all string references to it vanish.
   procedure Create (P : in out Reference'Class;
                     Initial_Size : Pool_Offset := Default_Size);

   --  constructor that calls Create with the given Size parameter
   function With_Capacity (Size : Pool_Offset) return Reference;

   --  create a new string from the given data. the string will be allocated
   --  within the pool.
   function From_String (P : Reference'Class; Data : String)
                         return Text.Reference;

   function With_Length (P : Reference'Class; Length : Positive)
                         return Text.Reference;

   --  for debugging
   function Current_Chunk_As_String (P : Reference) return String;
private
   type Reference is new Ada.Finalization.Controlled with record
      Data : Pool_Data_Access;
   end record with Type_Invariant =>
     (Reference.Data = null or else Reference.Data.Pos mod Header_Size = 1);

   overriding procedure Adjust (Object : in out Reference);
   overriding procedure Finalize (Object : in out Reference);

   Default_Size : constant Pool_Offset := 8192;
end Text.Pool;