UNIT OLISTE;

(* ******************************************************************** *)
(*                                                                      *)
(* K L A S S E   : COListe                                              *)
(* -------------------------------------------------------------------- *)
(* Version       : 1.0                                                  *)
(*                                                                      *)
(* Autor         : S. Spolwig, OSZ-Handel I, 10997 Berlin               *)
(*                                                                      *)
(* Dateiname     : soliste.pas                                          *)
(*                                                                      *)
(* Aufgabe       : Allgemeine statische Objektliste  zur Verwaltung     *)
(*                 beliebiger Objekte.                                  *)
(*                 Zum Bewegen in der Liste ist intern eine Listenmarke *)
(*                 mitgefuehrt, die die jeweils aktuelle Listenposition *)
(*                 bezeichnet. Alle Operationen werden auf der aktuellen*)
(*                 Position ausgefuehrt.                                *)
(*                 Vor dem ersten Listenzugriff MUSS die Prozedur Init  *)
(*                 aufgerufen werden mit der Uebergabe der Datengroesse:*)
(*                 Init (sizeof(DatenElementTyp))                       *)
(*                 (SOLISTE entspricht SLISTEN in Turbo-Pascal.)        *)
(*                                                                      *)
(* Compiler      : MSDOS - Turbo-Pascal 7.0                             *)
(* Aenderung     : V. 1.0  - 20-AUG-97                                  *)
(*                    1.1  - 26-MAR-98    CsOliste, MAXLISTE=5000       *)
(*                                        Remove mit NIL                *)
(*                           24-MAY-98    fuer Olib in COListe umbenannt*)
(* ******************************************************************** *)

INTERFACE
(* ========================== Export ================================== *)

const
   MAXLISTE = 5000;

type
   TElement = pointer;

   COListe  = object
                 Liste       : array [1..MAXLISTE + 1] of TElement;
                 LiLaenge,                 (* Anzahl der belegten Elemente *)
                 AktuellePos : word;
                 Datasize    : Word;

                 constructor Init (dsize: word);
                 procedure First; virtual;
                 procedure Next ; virtual;
                 procedure previous; virtual;
                 procedure Last ; virtual;

                 procedure GetData (var data); virtual;
                 procedure PutData (var data); virtual;

                 procedure AddNewElement; virtual;
                 procedure Append  (var data); virtual;
                 procedure Remove;             virtual;
                 function  Len : integer ;     virtual;
                 function  EoList : boolean;   virtual;
                 function  IsEmpty : boolean;  virtual;

                 procedure Load  (dateiname : string); virtual;
                 procedure Store (dateiname : string); virtual;
              end;

(*  ----------------- B e s c h r e i b u n g -------------------------

Oberklasse     : -
Bezugsklassen  : KFSTREAM
benutzte Module: -

Methoden
--------

Init (dsize:word)

   Auftrag : Liste mit der Elementgroesse initialisieren; leere L. erzeugen
   vorher  : -
   nachher : Lilaenge ist Null.


First

   Auftrag : Listenmarke an den Anfang der Liste setzen
   vorher  : Die Liste ist initialisiert und nicht leer.
   nachher : Aktuelle Position ist 1


Next

   Auftrag : Die Listenmarke auf das naechste Element setzen
   vorher  : Die Liste ist nicht leer
   nachher : Die Marke steht auf der neuen aktuellen Position
             Wenn die Liste leer ist, geschieht nichts


Previous

   Auftrag : Die Listenmarke um eins zuruecksetzen
   vorher  : Die Liste ist nicht leer.
   nachher : Die Marke steht auf der neuen aktuellen Position.
           Wenn die aktuelle Position 1 war, geschieht nichts


Last

   Auftrag : Listenmarke auf das Ende der Liste setzen
   vorher  : Die Liste ist nicht leer.
   nachher : Letztes vorhandenes Element ist aktuelle Position


GetData (var data);

   Auftrag : Zugriff auf das aktuelle Element zum Lesen
   vorher  : Die Liste ist nicht leer.
   nachher : -


PutData (var data);

   Auftrag : Zugriff auf das aktuelle Element zum Schreiben
   vorher  : Die Liste ist nicht leer oder AddNewElement ist ausgefuehrt.
   nachher : Data ist an aktuelles Element uebergeben


AddNewElement

   Auftrag : Neues LEERES Element zur Aufnahme der Daten erzeugen und
             an der aktuellen Position in die Liste einfuegen
   vorher  : -
   nachher : Neues Element ist in der Liste


Append (var data);

   Auftrag : Neues Element an Ende der Liste erzeugen und data uebergeben.
             Wenn die Liste leer war ist das neue El. das erste.
   vorher  : Die Liste ist initialisiert
   nachher : Listenlaenge ist um eins erhoeht. Ist MAXLISTE erreicht,
             geschieht nichts.

Remove

   Auftrag: Das aktuelle Element loeschen
   vorher : Die Liste ist nicht leer.
   nachher: Das aktuelle Element ist aus der Liste entfernt. Die Listen-
            laenge ist um eins vermindert.


EoList

   Anfrage: Pruefen, ob das Ende der Liste erreicht ist.
   vorher : Die Liste ist initialisiert.
   nachher: True, wenn Ende der Liste erreicht ist. Die Listenmarke
            steht hinter dem letzten belegten Element.


IsEmpty

   Anfrage: ob Liste leer ist
   vorher : Die Liste ist initialisiert.
   nachher: True, wenn die Liste leer ist.


Len : integer;

   Anfrage: gibt Listenlaenge zur ck
   vorher : Liste ist initialisiert
   nachher: -


Load (dateiname : string);

   Auftrag: Liste aus externer Datei laden
   vorher : Die Liste ist initialisiert.
   nachher: Die Liste ist in den Arbeitsspeicher geladen


Store (dateiname : string);

   Auftrag: Liste in externe Datei speichern
   vorher : -
   nachher: Die Liste ist gespeichert. Ist die Liste leer, wird eine
            Datei der Laenge Null angelegt.

----------------------------------------------------------------------- *)

Zurück zur Startseite