Universität Ulm,
Fakultät für Mathematik und Wirtschaftswissenschaften,
SAI
WS 97/98 || Entwicklung objekt-orientierter Bibliotheken || Beispiele || Collections-10
DEFINITION Collections
DEFINITION Collections;
IMPORT Disciplines;
TYPE
Collection = POINTER TO CollectionRec;
CollectionRec = RECORD (Disciplines.ObjectRec) END;
(* Schnittstelle fuer Implementierungen *)
TYPE
Message = RECORD END;
AddProc = PROCEDURE (collection: Collection; object: Disciplines.Object);
FirstProc = PROCEDURE (collection: Collection);
NextProc = PROCEDURE (collection: Collection;
VAR object: Disciplines.Object) : BOOLEAN;
GetProc = PROCEDURE (collection: Collection;
index: INTEGER; VAR object: Disciplines.Object);
RemoveProc = PROCEDURE (collection: Collection;
object: Disciplines.Object);
HandlerProc = PROCEDURE (collection: Collection;
VAR message: Message);
Interface = POINTER TO InterfaceRec;
InterfaceRec =
RECORD
add: AddProc; (* required *)
first: FirstProc; (* required *)
next: NextProc; (* required *)
get: GetProc; (* optional *)
remove: RemoveProc; (* optional *)
handler: HandlerProc; (* optional *)
END;
CONST
get = 0; remove = 1; handler = 2;
TYPE
Capability = SHORTINT; (* get..handler *)
CapabilitySet = SET; (* OF Capability *)
PROCEDURE Init(collection: Collection; if: Interface; caps: CapabilitySet);
PROCEDURE Send(collection: Collection; VAR message: Message);
(* Schnittstelle fuer Klienten *)
PROCEDURE Capabilities(collection: Collection) : CapabilitySet;
PROCEDURE Add(collection: Collection; object: Disciplines.Object);
PROCEDURE First(collection: Collection);
PROCEDURE Next(collection: Collection;
VAR object: Disciplines.Object) : BOOLEAN;
PROCEDURE Get(collection: Collection;
index: INTEGER; VAR object: Disciplines.Object);
(* wird nicht von allen Implementierungen unterstuetzt *)
PROCEDURE Remove(collection: Collection; object: Disciplines.Object);
(* wird nicht von allen Implementierungen unterstuetzt *)
END Collections.
WS 97/98 || Entwicklung objekt-orientierter Bibliotheken || Beispiele || Collections-10
Andreas Borchert, 12. November 1997