Universität Ulm, Fakultät für Mathematik und Wirtschaftswissenschaften, SAI

WS 97/98 || Entwicklung objekt-orientierter Bibliotheken || Übungen || Iteratoren

DEFINITION Collections


DEFINITION Collections;

   IMPORT Disciplines, Iterators;

   TYPE
      Collection = POINTER TO CollectionRec;
      CollectionRec = RECORD (Disciplines.ObjectRec) END;

   CONST
      any = 0; sorted = 1; reverse = 2;		(* iteration modes *)

   (* Schnittstelle fuer Implementierungen *)

   TYPE
      Message = RECORD END;
      AddProc = PROCEDURE (collection: Collection; object: Disciplines.Object);
      GetIteratorProc = PROCEDURE (collection: Collection;
				   mode: Iterators.Mode;
				   VAR it: Iterators.Iterator);
      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 *)
	    getIterator: GetIteratorProc;	(* 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 GetIterator(collection: Collection; mode: Iterators.Mode;
			 VAR it: Iterators.Iterator);
      (* mode wird von manchen Implementierungen ignoriert *)

   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 || Übungen || Iteratoren

Andreas Borchert & Martin Hasch, 24. November 1997