24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
+
|
-- The intended usage is efficient caching of S-expressions in memory. For --
-- more flexible in-memory S-expression objects, --
-- see Natools.S_Expressions.Holders. --
------------------------------------------------------------------------------
with System.Storage_Pools;
with Natools.S_Expressions.Lockable;
with Natools.S_Expressions.Printers;
private with Ada.Finalization;
private with Ada.Unchecked_Deallocation;
private with Natools.References;
generic
|
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
-
+
+
+
+
+
+
+
+
+
|
(Output : in out Reference; Data : in Atom);
overriding procedure Close_List (Output : in out Reference);
function Duplicate (Cache : Reference) return Reference;
-- Create a new copy of the S-expression held in Cache and return it
type Cursor is new Descriptor with private;
type Cursor is new Lockable.Descriptor with private;
overriding function Current_Event (Object : in Cursor) return Events.Event;
overriding function Current_Atom (Object : in Cursor) return Atom;
overriding function Current_Level (Object : in Cursor) return Natural;
overriding procedure Query_Atom
(Object : in Cursor;
Process : not null access procedure (Data : in Atom));
overriding procedure Read_Atom
(Object : in Cursor;
Data : out Atom;
Length : out Count);
overriding procedure Next
(Object : in out Cursor;
Event : out Events.Event);
overriding procedure Lock
(Object : in out Cursor;
State : out Lockable.Lock_State);
overriding procedure Unlock
(Object : in out Cursor;
State : in out Lockable.Lock_State;
Finish : in Boolean := True);
function First (Cache : Reference'Class) return Cursor;
-- Create a new Cursor pointing at the beginning of Cache
private
type Atom_Access is access Atom;
for Atom_Access'Storage_Pool use Atom_Pool;
|
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
-
+
+
+
+
+
|
type Reference is new Printers.Printer with record
Exp : Trees.Reference;
end record;
type Cursor is new Descriptor with record
type Cursor is new Lockable.Descriptor with record
Exp : Trees.Reference := Trees.Null_Reference;
Position : Node_Access := null;
Opening : Boolean := False;
Stack : Lockable.Lock_Stack;
Locked : Boolean := False;
end record;
function Absolute_Level (Object : Cursor) return Natural;
end Natools.S_Expressions.Generic_Caches;
|