blob: 525b23dc042af92a5360c86413cbee7205df0f95 (
plain)
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
40
41
42
43
44
45
46
47
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
|
-- File: TCollection_SList.cdl
-- Created: Fri Feb 26 13:38:35 1993
-- Author: Remi LEQUETTE
-- <rle@phylox>
---Copyright: Matra Datavision 1993
generic class SList from TCollection (Item as any)
---Purpose: An SList is a LISP like list of Items.
-- An SList is :
-- . Empty.
-- . Or it has a Value and a Tail which is an other SList.
--
-- The Tail of an empty list is an empty list.
-- SList are shared. It means that they can be
-- modified through other lists.
-- SList may be used as Iterators. They have Next,
-- More, and value methods. To iterate on the content
-- of the list S just do.
--
-- SList Iterator;
-- for (Iterator = S; Iterator.More(); Iterator.Next())
-- X = Iterator.Value();
--
-- Memory usage is automatically managed for SLists
-- (using reference counts).
---Example:
-- If S1 and S2 are SLists :
-- if S1.Value() is X.
--
-- And the following is done :
-- S2 = S1;
-- S2.SetValue(Y);
--
-- S1.Value() becomes also Y. So SList must be used
-- with care. Mainly the SetValue() method is
-- dangerous.
raises
NoSuchObject from Standard
class SListNode from TCollection
inherits TShared from MMgt
is
Create(I : Item; aTail : SList from TCollection) returns mutable SListNode from TCollection;
---C++:inline
Count(me) returns Integer;
---C++:inline
---C++: return &
Tail(me) returns SList from TCollection;
---C++:inline
---C++: return &
Value(me) returns Item;
---C++:inline
---C++: return &
fields
myTail : SList from TCollection;
myValue : Item;
end;
is
Create returns SList from TCollection;
---Purpose: Creates an empty List.
Create(anItem : Item; aTail : SList from TCollection)
returns SList from TCollection;
---Purpose: Creates a List with <anItem> as value and <aTail> as tail.
Create(Other : SList from TCollection)
returns SList from TCollection;
---Purpose: Creates a list from an other one. The lists are shared.
Assign(me : in out; Other : SList from TCollection)
returns SList from TCollection
---Level: Public
---Purpose: Sets a list from an other one. The lists are
-- shared. The list itself is returned.
---C++: alias operator =
---C++: return &
is static;
IsEmpty(me) returns Boolean
---Level: Public
---C++: inline
is static;
Clear(me : in out)
---Level: Public
---Purpose: Sets the list to be empty.
---C++: alias ~
is static;
Value(me) returns any Item
---Level: Public
---Purpose: Returns the current value of the list. An error is
-- raised if the list is empty.
---C++: return const &
raises
NoSuchObject from Standard
is static;
ChangeValue(me : in out) returns any Item
---Level: Public
---Purpose: Returns the current value of the list. An error is
-- raised if the list is empty. This value may be
-- modified. A method modifying the value can be
-- called. The value will be modified in the list.
---Example: AList.ChangeValue().Modify()
---C++: return &
raises
NoSuchObject from Standard
is static;
SetValue(me : in out; anItem : Item)
---Level: Public
---Purpose: Changes the current value in the list. An error is
-- raised if the list is empty.
raises
NoSuchObject from Standard
is static;
Tail(me) returns SList from TCollection
---Level: Public
---Purpose: Returns the current tail of the list. On an empty
-- list the tail is the list itself.
---C++: return const &
is static;
ChangeTail(me : in out) returns SList from TCollection
---Level: Public
---Purpose: Returns the current tail of the list. This tail
-- may be modified. A method modifying the tail can
-- be called. The tail will be modified in the list.
---Example: AList.ChangeTail().Modify()
---C++: return &
is static;
SetTail(me : in out; aList : SList from TCollection)
---Level: Public
---Purpose: Changes the current tail in the list. On an empty
-- list SetTail is Assign.
is static;
Construct(me : in out; anItem : Item)
---Level: Public
---Purpose: Replaces the list by a list with <anItem> as Value
-- and the list <me> as tail.
---C++: inline
is static;
Constructed(me; anItem : Item) returns SList from TCollection
---Level: Public
---Purpose: Returns a new list with <anItem> as Value an the
-- list <me> as tail.
---C++: inline
is static;
ToTail(me : in out)
---Level: Public
---Purpose: Replaces the list <me> by its tail.
---C++: inline
is static;
Initialize(me : in out; aList : SList from TCollection)
---Level: Public
---Purpose: Sets the iterator to iterate on the content of
-- <aList>. This is Assign().
---C++: inline
is static;
More(me) returns Boolean
---Level: Public
---Purpose: Returns True if the iterator has a current value.
-- This is !IsEmpty()
---C++: inline
is static;
Next(me : in out)
---Level: Public
---Purpose: Moves the iterator to the next object in the list.
-- If the iterator is empty it will stay empty. This is ToTail()
---C++: inline
is static;
fields
myNode : SListNode from TCollection;
end SList;
|