with Libadalang.Analysis; use Libadalang.Analysis;
with Libadalang.Common; use Libadalang.Common;
with String_Vectors; use String_Vectors;
private with Ada.Strings.Unbounded;
package Generators is
-- For now: single placeholder - so single Name
-- package String_Vector_Vectors is new Ada.Containers.Indefinite_Vectors
-- (Index_Type => Positive,
-- Element_Type => String_Vectors.Vector);
type Generator is private;
function Generate_Pattern (G : Generator) return Analysis_Unit;
function Generate_Instance (G : Generator) return Analysis_Unit;
function Get_Name (G : Generator) return String;
function Get_Values (G : Generator) return String_Vectors.Vector;
type String_Generator is not null access function
(Strings : String_Vectors.Vector) return String;
function Make_Generator
(Name : String; Values : String_Vectors.Vector; Rule : Grammar_Rule;
SG : String_Generator) return Generator;
private
use Ada.Strings.Unbounded;
type Generator is record
Name : Unbounded_String;
Values : String_Vectors.Vector;
-- TODO: is a copy needed to make it immutable from the outside?
Rule : Grammar_Rule;
SG : String_Generator;
end record;
function Make_Generator
(Name : String; Values : String_Vectors.Vector; Rule : Grammar_Rule;
SG : String_Generator) return Generator is
((To_Unbounded_String (Name), Values, Rule, SG));
function Get_Name (G : Generator) return String is (To_String (G.Name));
function Get_Values (G : Generator) return String_Vectors.Vector is
(G.Values);
end Generators;