language-Modula2-0.1: examples/Modula-2_Libraries/C.-Lins_Modula-2_Software_Component_Library/Vol1/BAGS/BAGCSBMI.DEF
DEFINITION MODULE BagCSBMI;
(*==============================================================
Version : 1.00 30 Apr 1989 C. Lins
Compiler : TopSpeed Modula-2
Component: Monolithic Structures - Bag
Character Sequential Bounded Managed Iterator
INTRODUCTION
This module supports the abstract data type bag for discrete
values of ASCII CHARs.
REVISION HISTORY
v1.00 30 Apr 1989 C. Lins
Initial implementation for TopSpeed Modula-2.
(C) Copyright 1989 Charles A. Lins
================================================================*)
FROM CharItems IMPORT
(*--Type*) Item, Continue;
FROM ErrorHandling IMPORT
(*--Proc*) HandlerProc;
FROM BagEnum IMPORT
(*--Type*) Exceptions;
(*-----------------------*)
TYPE Bag;
TYPE SizeRange = [1..256];
CONST NullBag = Bag(NIL);
(*---------------------------------*)
(*-- EXCEPTIONS --*)
CONST ModuleID = 1;
PROCEDURE BagError () : Exceptions (*-- out *);
PROCEDURE GetHandler ( ofError : Exceptions (*-- in *))
: HandlerProc (*-- out *);
PROCEDURE SetHandler ( ofError : Exceptions (*-- in *);
toHandler : HandlerProc (*-- in *));
(*---------------------------------*)
(*-- CONSTRUCTORS --*)
PROCEDURE Create () : Bag (*-- out *);
PROCEDURE Destroy (VAR theBag : Bag (*-- inout *));
PROCEDURE Clear (VAR theBag : Bag (*-- inout *));
PROCEDURE Assign ( theBag : Bag (*-- in *);
VAR toBag : Bag (*-- inout *));
PROCEDURE Include ( theItem : Item (*-- in *);
VAR inBag : Bag (*-- inout *));
PROCEDURE Exclude ( theItem : Item (*-- in *);
VAR fromBag : Bag (*-- inout *));
PROCEDURE Union ( left : Bag (*-- in *);
right : Bag (*-- in *);
VAR toBag : Bag (*-- inout *));
PROCEDURE Intersection ( left : Bag (*-- in *);
right : Bag (*-- in *);
VAR toBag : Bag (*-- inout *));
PROCEDURE Difference ( left : Bag (*-- in *);
right : Bag (*-- in *);
VAR toBag : Bag (*-- inout *));
PROCEDURE SymDifference ( left : Bag (*-- in *);
right : Bag (*-- in *);
VAR toBag : Bag (*-- inout *));
(*---------------------------------*)
(*-- SELECTORS --*)
PROCEDURE IsDefined ( theSet : Bag (*-- in *))
: BOOLEAN (*-- out *);
PROCEDURE IsEmpty ( theSet : Bag (*-- in *))
: BOOLEAN (*-- out *);
PROCEDURE IsEqual ( left : Bag (*-- in *);
right : Bag (*-- in *))
: BOOLEAN (*-- out *);
PROCEDURE NumMembers ( theBag : Bag (*-- in *))
: CARDINAL (*-- out *);
PROCEDURE UniqueMembers ( theBag : Bag (*-- in *))
: CARDINAL (*-- out *);
PROCEDURE IsAMember ( theItem : Item (*-- in *);
theBag : Bag (*-- in *))
: BOOLEAN (*-- out *);
PROCEDURE NumberOf ( theItem : Item (*-- in *);
theBag : Bag (*-- in *))
: CARDINAL (*-- out *);
PROCEDURE IsSubset ( left : Bag (*-- in *);
right : Bag (*-- in *))
: BOOLEAN (*-- out *);
PROCEDURE IsProperSubset( left : Bag (*-- in *);
right : Bag (*-- in *))
: BOOLEAN (*-- out *);
(*---------------------------------*)
(*-- ITERATORS --*)
TYPE LoopAccessProc = PROCEDURE (Item, CARDINAL) : Continue;
PROCEDURE LoopOver ( theSet : Bag (*-- in *);
process : LoopAccessProc (*-- in *));
TYPE AccessProc = PROCEDURE (Item, CARDINAL);
PROCEDURE Traverse ( theSet : Bag (*-- in *);
process : AccessProc (*-- in *));
END BagCSBMI.