language-Modula2-0.1: examples/Modula-2_Libraries/C.-Lins_Modula-2_Software_Component_Library/Vol4/maps/mapsumi.def
(*
12.1 Unbounded Map Interface
*)
DEFINITION MODULE MapSUMI;
(*====================================================================
Version : 2.0 16 Sep 1990 C. Lins
Compiler : Generic pc Modula-2
Component: Monolithic Structures - Map (Opaque version)
Sequential Unbounded Managed Iterator
INTRODUCTION
This module provides operations for the unbounded map abstract
data type.
REVISION HISTORY
8/26/89 CL Initial version
v2.00 16 Sep 1990 C. Lins
Created generic pc version
(C) Copyright 1990 Charles A. Lins
=====================================================================*)
FROM Items IMPORT
(*--Type*) Item;
FROM MapTypes IMPORT
(*--Type*) Exceptions;
FROM ErrorHandling IMPORT
(*--Type*) HandlerProc;
FROM TypeManager IMPORT
(*--Type*) TypeID;
(*-----------------------*)
(*
12.1.1 Type Declarations
*)
TYPE Domain = Item;
TYPE Range = Item;
TYPE Map;
VAR NullMap : Map;
(*
12.1.2 Exceptions
*)
CONST ModuleID = 15;
PROCEDURE MapError () : Exceptions (*--out *);
PROCEDURE GetHandler ( theError : Exceptions (*--in *))
: HandlerProc (*--out *);
PROCEDURE SetHandler ( theError : Exceptions (*--in *);
theHandler : HandlerProc (*--in *));
(*
12.1.3 Constructors
*)
PROCEDURE Create ( theDomain : TypeID (*--in *);
theRange : TypeID (*--in *))
: Map (*--out *);
PROCEDURE Destroy (VAR theMap : Map (*--inout*));
PROCEDURE Clear ( theMap : Map (*--inout*));
PROCEDURE Assign ( theMap : Map (*--in *);
VAR toMap : Map (*--inout *));
PROCEDURE Bind ( theMap : Map (*--inout*);
theItemIn : Domain (*--in *);
toItemIn : Range (*--in *));
PROCEDURE Unbind ( theMap : Map (*--inout*);
theItemIn : Domain (*--in *));
(*
12.1.4 Selectors
*)
PROCEDURE IsDefined ( theMap : Map (*--in *))
: BOOLEAN (*--out *);
PROCEDURE IsEmpty ( theMap : Map (*--in *))
: BOOLEAN (*--out *);
PROCEDURE IsEqual ( left : Map (*--in *);
right : Map (*--in *))
: BOOLEAN (*--out *);
PROCEDURE ExtentOf ( theMap : Map (*--in *))
: CARDINAL (*--out *);
PROCEDURE DomainOf ( theMap : Map (*--in *))
: TypeID (*--out *);
PROCEDURE RangeOf ( theMap : Map (*--in *))
: TypeID (*--out *);
PROCEDURE IsBound ( theMap : Map (*--in *);
theItem : Domain (*--in *))
: BOOLEAN (*--out *);
PROCEDURE BoundTo ( theMap : Map (*--in *);
theItem : Domain (*--in *))
: Range (*--out *);
PROCEDURE IsBoundTo ( theMap : Map (*--in *);
theItem : Domain (*--in *);
VAR toItem : Range (*--out *))
: BOOLEAN (*--out *);
(*
12.1.5 Iterators
*)
TYPE LoopAccessProc = PROCEDURE (Domain, Range) : BOOLEAN;
TYPE LoopChangeProc = PROCEDURE (Domain, VAR Range) : BOOLEAN;
PROCEDURE LoopOver ( theMap : Map (*--in *);
theProcess: LoopAccessProc (*--in *));
PROCEDURE LoopChange ( theMap : Map (*--in *);
theProcess: LoopChangeProc (*--in *));
TYPE AccessProc = PROCEDURE (Domain, Range);
TYPE ChangeProc = PROCEDURE (Domain, VAR Range);
PROCEDURE Traverse ( theMap : Map (*--in *);
theProcess: AccessProc (*--in *));
PROCEDURE TravChange ( theMap : Map (*--in *);
theProcess: ChangeProc (*--in *));
END MapSUMI.