packages feed

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.