DEFINITION MODULE BagSUMN; (*============================================================== Version : 1.00 02 May 1989 C. Lins Compiler : TopSpeed Modula-2 Component: Monolithic Structures - Bag Sequential Unbounded Managed Non-Iterator INTRODUCTION This module provides the Bag ADT for generic Items. REVISION HISTORY v1.00 02 May 1989 C. Lins Initial implementation for TopSpeed Modula-2. (C) Copyright 1989 Charles A. Lins ================================================================*) FROM Items IMPORT (*--Type*) Item; FROM ErrorHandling IMPORT (*--Proc*) HandlerProc; FROM BagEnum IMPORT (*--Type*) Exceptions; FROM TypeManager IMPORT (*--Type*) TypeID; (*-----------------------*) TYPE Bag; CONST NullBag = Bag(NIL); (*---------------------------------*) (*-- EXCEPTIONS --*) CONST ModuleID = 8; PROCEDURE BagError () : Exceptions (*-- out *); PROCEDURE GetHandler ( ofError : Exceptions (*-- in *)) : HandlerProc (*-- out *); PROCEDURE SetHandler ( ofError : Exceptions (*-- in *); toHandler : HandlerProc (*-- in *)); (*---------------------------------*) (*-- CONSTRUCTORS --*) PROCEDURE Create ( theType : TypeID (*-- in *)) : 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 ( theBag : Bag (*-- in *)) : BOOLEAN (*-- out *); PROCEDURE IsEmpty ( theBag : Bag (*-- in *)) : BOOLEAN (*-- out *); PROCEDURE IsEqual ( left : Bag (*-- in *); right : Bag (*-- in *)) : BOOLEAN (*-- out *); PROCEDURE TypeOf ( theBag : Bag (*-- in *)) : TypeID (*-- 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 *); END BagSUMN.