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
|
-- File: Interface_IntList.cdl
-- Created: Fri May 12 17:48:33 1995
-- Author: Christian CAILLET
-- <cky@anion>
---Copyright: Matra Datavision 1995
class IntList from Interface
---Purpose : This class detains the data which describe a Graph. A Graph
-- has two lists, one for shared refs, one for sharing refs
-- (the reverses). Each list comprises, for each Entity of the
-- Model of the Graph, a list of Entities (shared or sharing).
-- In fact, entities are identified by their numbers in the Model
-- or Graph : this gives better performances.
--
-- A simple way to implement this is to instantiate a HArray1
-- with a HSequenceOfInteger : each Entity Number designates a
-- value, which is a Sequence (if it is null, it is considered as
-- empty : this is a little optimisation).
--
-- This class gives a more efficient way to implement this.
-- It has two lists (two arrays of integers), one to describe
-- list (empty, one value given immediately, or negated index in
-- the second list), one to store refs (pointed from the first
-- list). This is much more efficient than a list of sequences,
-- in terms of speed (especially for read) and of memory
--
-- An IntList can also be set to access data for a given entity
-- number, it then acts as a single sequence
--
-- Remark that if an IntList is created from another one, it can
-- be read, but if it is created without copying, it may not be
-- edited
uses HArray1OfInteger
is
Create returns IntList;
---Purpose :Creates empty IntList.
Create (nbe : Integer) returns IntList;
---Purpose : Creates an IntList for <nbe> entities
Create (other : IntList; copied : Boolean) returns IntList;
---Purpose : Creates an IntList from another one.
-- if <copied> is True, copies data
-- else, data are not copied, only the header object is
Initialize(me : in out;nbe : Integer);
---Purpose :Initialize IntList by number of entities.
Internals (me; nbrefs : out Integer; ents, refs : out mutable HArray1OfInteger);
---Purpose : Returns internal values, used for copying
NbEntities (me) returns Integer;
---Purpose : Returns count of entities to be aknowledged
SetNbEntities (me : in out; nbe : Integer);
---Purpose : Changes the count of entities (ignored if decreased)
SetNumber (me : in out; number : Integer);
---Purpose : Sets an entity number as current (for read and fill)
Number (me) returns Integer;
---Purpose : Returns the current entity number
List (me; number : Integer; copied : Boolean = Standard_False) returns IntList;
---Purpose : Returns an IntList, identical to <me> but set to a specified
-- entity Number
-- By default, not copied (in order to be read)
-- Specified <copied> to produce another list and edit it
SetRedefined (me : in out; mode : Boolean);
---Purpose : Sets current entity list to be redefined or not
-- This is used in a Graph for redefinition list : it can be
-- disable (no redefinition, i.e. list is cleared), or enabled
-- (starts as empty). The original list has not to be "redefined"
Reservate (me : in out; count : Integer);
---Purpose : Makes a reservation for <count> references to be later
-- attached to the current entity. If required, it increases
-- the size of array used to store refs. Remark that if count is
-- less than two, it does nothing (because immediate storing)
Add (me : in out; ref : Integer);
---Purpose : Adds a reference (as an integer value, an entity number) to
-- the current entity number. Zero is ignored
Length (me) returns Integer;
---Purpose : Returns the count of refs attached to current entity number
IsRedefined (me; num : Integer = 0) returns Boolean;
---Purpose : Returns True if the list for a number (default is taken as
-- current) is "redefined" (usefull for empty list)
Value (me; num : Integer) returns Integer;
---Purpose : Returns a reference number in the list for current number,
-- according to its rank
Remove (me : in out; num : Integer) returns Boolean;
---Purpose : Removes an item in the list for current number, given its rank
-- Returns True if done, False else
Clear (me : in out);
---Purpose : Clears all data, hence each entity number has an empty list
AdjustSize (me : in out; margin : Integer = 0);
---Purpose : Resizes lists to exact sizes. For list of refs, a positive
-- margin can be added.
fields
thenbe : Integer;
thenbr : Integer;
thenum : Integer; -- for current entity number :
thecount : Integer;
therank : Integer;
theents : HArray1OfInteger;
therefs : HArray1OfInteger;
end IntList;
|