home *** CD-ROM | disk | FTP | other *** search
Modula Definition | 1988-10-03 | 6.4 KB | 122 lines |
- DEFINITION MODULE DynArrayHandler;
-
- (*-------------------------------------------------------------------*
- * Dieses Modul umfa₧t die Verwaltung dynamischer Arrays mit *
- * beliebigen Typen bis zu einer Elementgrö₧e von <MaxElementSize>. *
- * Die Typenkompatibilität wird über die Grö₧e der übergebenen *
- * Variablen kontrolliert. Typenkonvertierungen sind mit Variablen *
- * unterschiedlichen Typs bei gleicher Grö₧e möglich. *
- * Die Grö₧e des Arrays wird über den grö₧ten Index, der beim *
- * Schreiben von Elementen verwendet wurde, bestimmen. *
- * Lesender Zugriff auf Indizes oberhalb des grö₧ten, zum Schreiben *
- * verwendeten Index, wird mit einer Fehlermeldung quittiert. *
- *-------------------------------------------------------------------*
- * Copyright 1987: Dipl.-Inform. Frank F. Wachtmeister *
- *-------------------------------------------------------------------*)
-
- FROM Streams IMPORT Stream;
- FROM SYSTEM IMPORT BYTE;
-
- CONST
- MaxElementSize = 256;
-
-
- TYPE
- DynArray; (* Opaque Type *)
-
-
- (*-------------------------------------------------------------------*
- * DefDynArray definiert und initialisiert ein dynamisches Array vom *
- * Typ init. Die Variable init wird hier auch als Initialisierung von*
- * nicht explizit definierten Array-Elementen verwendet. *
- * So haben bei: *
- * *
- * DefDynArray (dyn, init); *
- * Put (dyn, 50, a); *
- * *
- * die Elemente von mit dem Index von 0 bis 49 den Wert von init; *
- * das Element mit Index 50 hat den Wert von a. *
- *-------------------------------------------------------------------*)
-
- PROCEDURE DefDynArray (VAR dyn: DynArray; init: ARRAY OF BYTE);
-
-
- (*-------------------------------------------------------------------*
- * DeleteDynArray löscht ein dynamisches Array und gibt den *
- * benötigten Speicherplatz wieder frei. *
- *-------------------------------------------------------------------*)
-
- PROCEDURE DeleteDynArray (VAR dyn: DynArray);
-
-
- (*-------------------------------------------------------------------*
- * Get liest aus dem dynamischen Array dyn das Element mit dem *
- * Index ind und speichert es in der übergebenen Variablen elem. *
- * Ist die Grö₧e der übergebenen Variablen ungleich der Grö₧e der *
- * Array-Elemente, kommt Fehlermeldung 107. *
- * Ist der Index ind grö₧er als die Indizes bisher geschriebenener *
- * Elemente, kommt Fehlermeldung Nr. 108. *
- * Fehlermeldung Nr. 109: Array Address Error sollte eigentlich nicht*
- * kommen und lä₧t auf einen "wildernden Pointer" schlie₧en, der *
- * hoffentlich nicht zu diesem Modul gehört. *
- *-------------------------------------------------------------------*)
-
- PROCEDURE Get (VAR dyn: DynArray; ind: CARDINAL; VAR elem: ARRAY OF BYTE);
-
-
- (*-------------------------------------------------------------------*
- * Put speichert die Variable elem im dynamischen Array dyn unter *
- * dem Index ind ab. *
- * Ist die Grö₧e der übergebenen Variablen ungleich der Grö₧e der *
- * Array-Elemente, kommt Fehlermeldung 107. *
- * Ist der Index ind grö₧er als die Indizes bisher geschriebenener *
- * Elemente, wird das Array entsprechend erweitert. *
- * Für diesen Fall gilt: *
- * Alle Elemente vom ehemals letzten Element bis zum neuen Element *
- * werden mit dem Wert des an DefDynarray übergebenen Initiali- *
- * sierungswertes besetzt. *
- *-------------------------------------------------------------------*)
- PROCEDURE Put (VAR dyn: DynArray; ind: CARDINAL; VAR elem: ARRAY OF BYTE);
-
-
- (*-------------------------------------------------------------------*
- * LastIndex gibt den letzten, zum Lesen erlaubten Index des *
- * dynamischen Arrays dyn zurück. *
- *-------------------------------------------------------------------*)
- PROCEDURE LastIndex (VAR dyn: DynArray): CARDINAL;
-
-
- (*-------------------------------------------------------------------*
- * ElementSize gibt die Grö₧e eines einzelnen Array-Elementes in *
- * Byte zurück. *
- *-------------------------------------------------------------------*)
- PROCEDURE ElementSize (VAR dyn: DynArray): CARDINAL;
-
-
- (*-------------------------------------------------------------------*
- * LoadDynArray lädt aus dem Stream <in> die Elemente des Arrays. *
- * Die Variable <init> wird hier auch als Initialisierung von nicht *
- * explizit definierten Array-Elementen verwendet. *
- * Siehe auch DefDynArray. *
- * Der Stream <in> mu₧ für READ geöffnet sein und entsprechendes *
- * Format besitzen: *
- * Byte 0..1: Grö₧e eines Array-Elements *
- * Byte 2..3: Anzahl der Elemente *
- * Byte 4..n: Array-Elemente *
- *-------------------------------------------------------------------*)
- PROCEDURE LoadDynArray (VAR in: Stream;
- VAR dyn: DynArray; elem: ARRAY OF BYTE);
-
- (*-------------------------------------------------------------------*
- * SaveDynArray speichert ein dynamisches Array in den Stream <out>. *
- * Der Stream <out> mu₧ für READWRITE geöffnet sein. *
- * Die Variable <elem> dient zum Typ-Check und kann einen beliebigen*
- * Wert enthalten. *
- * Das Array kann mit LoadDynArray wieder geladen werden. *
- * NICHT VERGESSEN: Stream <out> nach Aufruf SCHLIESSEN !! *
- *-------------------------------------------------------------------*)
- PROCEDURE SaveDynArray (VAR out: Stream;
- VAR dyn: DynArray; elem: ARRAY OF BYTE);
- END DynArrayHandler.
-
-