8 PROCEDURE Clear
*(VAR s
: ARRAY OF SET);
11 i
:= 0; WHILE i
< LEN(s
) DO s
[i
] := {}; INC(i
) END
15 PROCEDURE Fill
*(VAR s
: ARRAY OF SET);
18 i
:= 0; WHILE i
< LEN(s
) DO s
[i
] := {0 .. size
-1}; INC(i
) END
22 PROCEDURE Incl
*(VAR s
: ARRAY OF SET; x
: INTEGER);
23 BEGIN INCL(s
[x
DIV size
], x
MOD size
)
27 PROCEDURE Excl
*(VAR s
: ARRAY OF SET; x
: INTEGER);
28 BEGIN EXCL(s
[x
DIV size
], x
MOD size
)
32 PROCEDURE In
*(VAR s
: ARRAY OF SET; x
: INTEGER): BOOLEAN;
33 BEGIN RETURN x
MOD size
IN s
[x
DIV size
]
37 PROCEDURE Includes
*(VAR s1
, s2
: ARRAY OF SET): BOOLEAN;
42 IF s1
[i
] + s2
[i
] # s1
[i
] THEN RETURN FALSE
END;
49 PROCEDURE Elements
*(VAR s
: ARRAY OF SET; VAR lastElem
: INTEGER): INTEGER;
50 VAR i
, n
, max
: INTEGER;
52 i
:= 0; n
:= 0; max
:= SHORT(LEN(s
)) * size
;
54 IF (i
MOD size
) IN s
[i
DIV size
] THEN INC(n
); lastElem
:= i
END;
61 PROCEDURE Empty
*(VAR s
: ARRAY OF SET): BOOLEAN;
66 IF s
[i
] # {} THEN RETURN FALSE
END;
73 PROCEDURE Equal
*(VAR s1
, s2
: ARRAY OF SET): BOOLEAN;
78 IF s1
[i
] # s2
[i
] THEN RETURN FALSE
END;
85 PROCEDURE Different
*(VAR s1
, s2
: ARRAY OF SET): BOOLEAN;
90 IF s1
[i
] * s2
[i
] # {} THEN RETURN FALSE
END;
97 PROCEDURE Unite
*(VAR s1
, s2
: ARRAY OF SET);
100 i
:= 0; WHILE i
< LEN(s1
) DO s1
[i
] := s1
[i
] + s2
[i
]; INC(i
) END
104 PROCEDURE Differ
*(VAR s1
, s2
: ARRAY OF SET);
107 i
:= 0; WHILE i
< LEN(s1
) DO s1
[i
] := s1
[i
] - s2
[i
]; INC(i
) END
111 PROCEDURE Intersect
*(VAR s1
, s2
, s3
: ARRAY OF SET);
114 i
:= 0; WHILE i
< LEN(s1
) DO s3
[i
] := s1
[i
] * s2
[i
]; INC(i
) END
118 PROCEDURE Print
*(VAR f
: Texts
.Writer
; s
: ARRAY OF SET; w
, indent
: INTEGER);
119 VAR col
, i
, max
: INTEGER;
121 i
:= 0; col
:= indent
; max
:= SHORT(LEN(s
)) * size
;
127 col
:= 0; WHILE col
< indent
DO Texts
.Write(f
, " "); INC(col
) END
129 Texts
.WriteInt(f
, i
, 3); Texts
.Write(f
, ",");