DEADSOFTWARE

Добавлены строки в отладочную информацию класса (быстрохак)
[dsw-obn.git] / tools / Coco / Sets.obn
1 MODULE Sets;
3 IMPORT Texts;
5 CONST size* = 32;
8 PROCEDURE Clear*(VAR s: ARRAY OF SET);
9 VAR i: INTEGER;
10 BEGIN
11 i := 0; WHILE i < LEN(s) DO s[i] := {}; INC(i) END
12 END Clear;
15 PROCEDURE Fill*(VAR s: ARRAY OF SET);
16 VAR i: INTEGER;
17 BEGIN
18 i := 0; WHILE i < LEN(s) DO s[i] := {0 .. size-1}; INC(i) END
19 END Fill;
22 PROCEDURE Incl*(VAR s: ARRAY OF SET; x: INTEGER);
23 BEGIN INCL(s[x DIV size], x MOD size)
24 END Incl;
27 PROCEDURE Excl*(VAR s: ARRAY OF SET; x: INTEGER);
28 BEGIN EXCL(s[x DIV size], x MOD size)
29 END Excl;
32 PROCEDURE In*(VAR s: ARRAY OF SET; x: INTEGER): BOOLEAN;
33 BEGIN RETURN x MOD size IN s[x DIV size]
34 END In;
37 PROCEDURE Includes*(VAR s1, s2: ARRAY OF SET): BOOLEAN;
38 VAR i: INTEGER;
39 BEGIN
40 i := 0;
41 WHILE i < LEN(s1) DO
42 IF s1[i] + s2[i] # s1[i] THEN RETURN FALSE END;
43 INC(i)
44 END;
45 RETURN TRUE;
46 END Includes;
49 PROCEDURE Elements*(VAR s: ARRAY OF SET; VAR lastElem: INTEGER): INTEGER;
50 VAR i, n, max: INTEGER;
51 BEGIN
52 i := 0; n := 0; max := SHORT(LEN(s)) * size;
53 WHILE i < max DO
54 IF (i MOD size) IN s[i DIV size] THEN INC(n); lastElem := i END;
55 INC(i)
56 END;
57 RETURN n
58 END Elements;
61 PROCEDURE Empty*(VAR s: ARRAY OF SET): BOOLEAN;
62 VAR i: INTEGER;
63 BEGIN
64 i := 0;
65 WHILE i < LEN(s) DO
66 IF s[i] # {} THEN RETURN FALSE END;
67 INC(i)
68 END;
69 RETURN TRUE
70 END Empty;
73 PROCEDURE Equal*(VAR s1, s2: ARRAY OF SET): BOOLEAN;
74 VAR i: INTEGER;
75 BEGIN
76 i := 0;
77 WHILE i < LEN(s1) DO
78 IF s1[i] # s2[i] THEN RETURN FALSE END;
79 INC(i)
80 END;
81 RETURN TRUE
82 END Equal;
85 PROCEDURE Different*(VAR s1, s2: ARRAY OF SET): BOOLEAN;
86 VAR i: INTEGER;
87 BEGIN
88 i := 0;
89 WHILE i < LEN(s1) DO
90 IF s1[i] * s2[i] # {} THEN RETURN FALSE END;
91 INC(i)
92 END;
93 RETURN TRUE
94 END Different;
97 PROCEDURE Unite*(VAR s1, s2: ARRAY OF SET);
98 VAR i: INTEGER;
99 BEGIN
100 i := 0; WHILE i < LEN(s1) DO s1[i] := s1[i] + s2[i]; INC(i) END
101 END Unite;
104 PROCEDURE Differ*(VAR s1, s2: ARRAY OF SET);
105 VAR i: INTEGER;
106 BEGIN
107 i := 0; WHILE i < LEN(s1) DO s1[i] := s1[i] - s2[i]; INC(i) END
108 END Differ;
111 PROCEDURE Intersect*(VAR s1, s2, s3: ARRAY OF SET);
112 VAR i: INTEGER;
113 BEGIN
114 i := 0; WHILE i < LEN(s1) DO s3[i] := s1[i] * s2[i]; INC(i) END
115 END Intersect;
118 PROCEDURE Print*(VAR f: Texts.Writer; s: ARRAY OF SET; w, indent: INTEGER);
119 VAR col, i, max: INTEGER;
120 BEGIN
121 i := 0; col := indent; max := SHORT(LEN(s)) * size;
122 Texts.Write(f, "{");
123 WHILE i < max DO
124 IF In(s, i) THEN
125 IF col + 4 > w THEN
126 Texts.WriteLn(f);
127 col := 0; WHILE col < indent DO Texts.Write(f, " "); INC(col) END
128 END;
129 Texts.WriteInt(f, i, 3); Texts.Write(f, ",");
130 INC(col, 4)
131 END;
132 INC(i)
133 END;
134 Texts.Write(f, "}")
135 END Print;
138 END Sets.