language-Modula2-0.1: examples/Modula-2_Libraries/andrea-m2/lib/generic/setofchar.mod
IMPLEMENTATION MODULE SetOfChar;
(* V1.1, John Andrea, Jun.22/93 -add Duplicate *)
(* V1.0, John Andrea, Apr.5/92 *)
(* This code may be freely used and distributed, it may not be sold *)
FROM Storage IMPORT ALLOCATE, DEALLOCATE;
IMPORT LargeSets;
(* Some compilers don't allow the direct *)
(* type CharSet = LargeSets.LargeSet *)
(* So build a second layer here *)
TYPE
CharSet = POINTER TO CharData;
CharData = RECORD
set :LargeSets.LargeSet;
END;
PROCEDURE Build( VAR a :CharSet );
BEGIN
NEW( a );
LargeSets.Build( a^.set, 0, 255 );
END Build;
PROCEDURE Destroy( VAR a :CharSet );
BEGIN
LargeSets.Destroy( a^.set );
DISPOSE( a );
END Destroy;
PROCEDURE Empty( a :CharSet );
BEGIN
LargeSets.Empty( a^.set );
END Empty;
PROCEDURE Fill( a :CharSet );
BEGIN
LargeSets.Fill( a^.set );
END Fill;
PROCEDURE Incl( a :CharSet; c :CHAR );
BEGIN
LargeSets.Incl( a^.set, ORD( c ) );
END Incl;
PROCEDURE Excl( a :CharSet; c :CHAR );
BEGIN
LargeSets.Excl( a^.set, ORD( c ) );
END Excl;
PROCEDURE In( a :CharSet; c :CHAR ) :BOOLEAN;
BEGIN
RETURN LargeSets.In( a^.set, ORD( c ) );
END In;
PROCEDURE Not( a :CharSet );
BEGIN
LargeSets.Not( a^.set );
END Not;
PROCEDURE Equal( a, b :CharSet ) :BOOLEAN;
BEGIN
RETURN LargeSets.Equal( a^.set, b^.set );
END Equal;
PROCEDURE Copy( a, b :CharSet );
BEGIN
LargeSets.Copy( a^.set, b^.set );
END Copy;
PROCEDURE Duplicate( a :CharSet; VAR b :CharSet );
BEGIN
Build( b );
Copy( a, b );
END Duplicate;
BEGIN
END SetOfChar.