Files
alire-index-community/src/alire-gpr.ads
T
2018-03-07 00:40:33 +01:00

97 lines
3.1 KiB
Ada

with Alire.Utils;
package Alire.GPR with Preelaborate is
type Variable_Kinds is (Enumeration, Free_String, External);
-- Enumeration: Name + all possible values
-- Free_String: Name without value
-- External : Name=Value
type Variable (<>) is tagged private;
function Kind (V : Variable) return Variable_Kinds;
function Name (V : Variable) return String;
function Image (V : Variable) return String;
function Free_Variable (Name : String) return Variable;
subtype Value is String;
type Value_Vector is new Utils.String_Vector with null record;
function Enum_Variable (Name : String;
Values : Value_Vector'Class) return Variable;
-- Used to represent a Typed enum with its possible values: Name = Value1 | Value2 ...
function External_Value (Name : String;
Value : String) return Variable;
-- Used to represent a pair Name=Value
function Values (V : Variable) return Value_Vector'Class
with Pre => V.Kind = Enumeration;
function External_value (V : Variable) return String
with Pre => V.Kind = External;
function "or" (L, R : Value) return Value_Vector;
function "or" (L : Value_Vector; R : Value) return Value_Vector;
-- A collection of Var=Arg conform a scenario:
-- These are used to store -X command-line arguments
type Scenario is tagged private;
Empty_Scenario : constant Scenario;
procedure Add_Argument (S : in out Scenario; Var : String; Val : String);
function As_Command_Line (S : Scenario) return String;
-- -Xvar1=val -Xvar2=val ...
function Is_Empty (S : Scenario) return Boolean;
private
type Variable (Kind : Variable_Kinds; Name_Len : Positive) is tagged record
Name : String (1 .. Name_Len);
case Kind is
when Enumeration =>
Values : Value_Vector;
when External =>
Value : Value_Vector; -- Only one element
when Free_String =>
null;
end case;
end record;
function Kind (V : Variable) return Variable_Kinds is (V.Kind);
function Name (V : Variable) return String is (V.Name);
function Free_Variable (Name : String) return Variable is (Free_String, Name'Length, Name);
function Enum_Variable (Name : String;
Values : Value_Vector'Class) return Variable is
(Enumeration, Name'Length, Name, Value_Vector (Values));
function External_Value (Name : String;
Value : String) return Variable is
(External, Name'Length, Name, To_Vector (Value, 1));
function Values (V : Variable) return Value_Vector'Class is (V.Values);
function External_Value (V : Variable) return String is (V.Value.First_Element);
function "or" (L, R : Value) return Value_Vector is (L & R);
function "or" (L : Value_Vector; R : Value) return Value_Vector is (L & R);
type Scenario is new Utils.String_Vector with null record;
function Is_Empty (S : Scenario) return Boolean is (Utils.String_Vector (S).Is_Empty);
Empty_Scenario : constant Scenario := (Utils.String_Vectors.Empty_Vector with null record);
end Alire.GPR;