24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
+
+
|
-- Formal types represent common objets for all the command, Shared_State --
-- begin read/write while Shared_Context is read-only. --
------------------------------------------------------------------------------
with Natools.S_Expressions.Lockable;
private with Ada.Containers.Indefinite_Ordered_Maps;
private with Natools.References;
private with Natools.S_Expressions.Atom_Refs;
private with Natools.Storage_Pools;
generic
type Shared_State (<>) is limited private;
type Shared_Context (<>) is limited private;
package Natools.S_Expressions.Interpreters is
pragma Preelaborate (Interpreters);
|
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
overriding procedure Execute
(Self : in Interpreter;
State : in out Shared_State;
Context : in Shared_Context;
Cmd : in out Lockable.Descriptor'Class);
-- Execute a single command with arguments
type Command_Description is private;
type Command_Array is array (Positive range <>) of Command_Description;
function Build (Commands : Command_Array) return Interpreter;
function Build (Commands : Command_Array; Fallback : String)
return Interpreter;
function Item (Name : String; Cmd : Command'Class)
return Command_Description;
private
type Exception_Command is new Command with null record;
package Command_Maps is new Ada.Containers.Indefinite_Ordered_Maps
(Atom, Command'Class, Less_Than);
type Interpreter is new Command with record
Commands : Command_Maps.Map;
Max_Length : Count := 0;
Fallback_Name : Atom_Refs.Reference;
end record;
package Command_Refs is new Natools.References
(Command'Class,
Storage_Pools.Access_In_Default_Pool'Storage_Pool,
Storage_Pools.Access_In_Default_Pool'Storage_Pool);
type Command_Description is record
Name : Atom_Refs.Immutable_Reference;
Cmd : Command_Refs.Immutable_Reference;
end record;
end Natools.S_Expressions.Interpreters;
|