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
|
-- File: LibCtl_Library.cdl
-- Created: Fri Jan 29 15:48:51 1993
-- Author: Christian CAILLET
-- <cky@phobox>
---Copyright: Matra Datavision 1993
generic class Library from LibCtl
(TheObject as any;
TheModule as Transient;
TheProtocol as Transient) -- must comply with Protocol template
---Purpose : Manages a list of Execution Modules attached to Protocols
-- to perform a specific set of functionnalities.
--
-- Each instantiated class of Library has a global set a Modules.
-- These Modules are put in this set before working, for instance
-- by static construction (using method SetGlobal). One Module
-- is bound which each Protocol (considered as a class).
--
-- To work, a Library is created by taking the Modules which
-- comply with a Protocol (bound with its class and the classes
-- of its Resources), given as parameter of its creation.
--
-- Thus, any tool can use it to get the suitable Modules
---Warning : The order of the Modules in the Library has assumed to be
-- useless, and is not managed.
raises NoSuchObject
-- -- Nested class : Node of Module -- --
private class GlobalNode inherits Transient
---Purpose : Manages a (possibly static) Global List of Modules bound to
-- Protocols.
-- Remark that it requires independance from Memory Management
-- (because a Global List of Modules can be build through static
-- declarations, i.e. before any sequential execution)
-- Remark there will not be many many GlobalNodes created
is
Create returns mutable GlobalNode;
---Purpose : Creates an empty GlobalNode, with no Next
Add (me : mutable; amodule : TheModule; aprotocol : TheProtocol)
is static;
---Purpose : Adds a Module bound with a Protocol to the list : does
-- nothing if already in the list, THAT IS, Same Type (exact
-- match) and Same State (that is, IsEqual is not required)
-- Once added, stores its attached Protocol in correspondance
Module (me) returns any TheModule is static;
---Purpose : Returns the Module stored in a given GlobalNode
---C++ : return const &
Protocol (me) returns any TheProtocol is static;
---Purpose : Returns the attached Protocol stored in a given GlobalNode
---C++ : return const &
Next (me) returns any GlobalNode is static;
---Purpose : Returns the Next GlobalNode. If none is defined, returned
-- value is a Null Handle
---C++ : return const &
fields
themod : TheModule;
theprot : TheProtocol;
thenext : GlobalNode;
end GlobalNode;
private class Node inherits TShared
---Purpose : Manages a list of Modules for a Library (as an instance) :
-- Designates a GlobalNode (couple Module-Protocol)
is
Create returns mutable Node;
---Purpose : Creates an empty Node, with no Next
AddNode (me : mutable; anode : any GlobalNode) is static;
---Purpose : Adds a couple (Module,Protocol), that is, stores it into
-- itself if not yet done, else creates a Next Node to do it
Module (me) returns any TheModule is static;
---Purpose : Returns the Module designated by a precise Node
---C++ : return const &
Protocol (me) returns any TheProtocol is static;
---Purpose : Returns the Protocol designated by a precise Node
---C++ : return const &
Next (me) returns mutable Node is static;
---Purpose : Returns the Next Node. If none was defined, returned value
-- is a Null Handle
---C++ : return const &
fields
thenode : GlobalNode;
thenext : Node;
end Node;
is
SetGlobal (myclass; amodule : TheModule; aprotocol : TheProtocol);
---Purpose : Adds a couple (Module-Protocol) into the global definition set
-- for this class of Library.
Create (aprotocol : TheProtocol) returns Library;
---Purpose : Creates a Library which complies with a Protocol, that is :
-- Same class (criterium IsInstance)
-- This creation gets the Modules from the global set, those
-- which are bound to the given Protocol and its Resources
Create returns Library;
---Purpose : Creates an empty Library : it will later by filled by method
-- AddProtocol
AddProtocol (me : in out; aprotocol : Transient) is static;
---Purpose : Adds a couple (Module-Protocol) to the Library, given the
-- class of a Protocol. Takes Resources into account.
-- (if <aprotocol> is not of type TheProtocol, it is not added)
Clear (me : in out) is static;
---Purpose : Clears the list of Modules of a library (can be used to
-- redefine the order of Modules before action : Clear then
-- refill the Library by calls to AddProtocol)
SetComplete (me : in out);
---Purpose : Sets a library to be defined with the complete Global list
-- (all the couples Protocol/Modules recorded in it)
Select (me; obj : any TheObject; module : out any TheModule; CN : out Integer)
returns Boolean;
---Purpose : Selects a Module from the Library, given an Object.
-- Returns True if Select has succeeded, False else.
-- Also Returns (as arguments) the selected Module and the Case
-- Number determined by the associated Protocol.
-- If Select has failed, <module> is Null Handle and CN is zero.
-- (Select can work on any criterium, such as Object DynamicType)
Start (me : in out) is static;
---Purpose : Starts Iteration on the Modules (sets it on the first one)
More (me) returns Boolean is static;
---Purpose : Returns True if there are more Modules to iterate on
Next (me : in out) is static;
---Purpose : Iterates by getting the next Module in the list
-- If there is none, the exception will be raised by Value
Module (me) returns any TheModule
---Purpose : Returns the current Module in the Iteration
raises NoSuchObject is static;
-- Error if there is no current Module to iterate on
---C++ : return const &
Protocol (me) returns any TheProtocol
---Purpose : Returns the current Protocol in the Iteration
raises NoSuchObject is static;
-- Error if there is no current Protocol to iterate on
---C++ : return const &
fields
thelist : Node;
thecurr : Node; -- for iteration
-- there are also "class variables" which describe global set
end Library;
|