Dieses Beispiel ist gegenüber einem früheren Beispiel mit der Eigenschaft der Persistenz versehen worden:
Statt
Services.CreateType(type, "Collections.Collection", "");wird nun
PersistentObjects.RegisterType(type, "Collections.Collection", "PersistentDisciplines.Object", NIL);im Initialisierungsteil des Moduls aufgerufen.
Services.CreateType(type, "LinearLists.List", "Collections.Collection");nun ein Schnittstellen-Record PersistentObjects übergeben:
PROCEDURE Init; VAR persif: PersistentObjects.Interface; BEGIN NEW(if); if.add := Add; if.first := First; if.next := Next; if.get := Get; if.remove := Remove; objectDiscID := Disciplines.Unique(); NEW(persif); persif.create := CreateList; persif.read := ReadList; persif.write := WriteList; persif.createAndRead := NIL; PersistentObjects.RegisterType(type, "LinearLists.List", "Collections.Collection", persif); END Init;
Services.Init(list, type);nun
PersistentObjects.Init(list, type);aufgerufen.
Expression = Integer | List | "$" Integer | Op2 Expression Expression | "write" FileName Expression | "read" FileName . List = "(" [ Expression { "," Expression } ] ")" . Op2 = "add" | (* Collections.Add *) "get" | (* Collections.Get *) "remove" . (* Collections.Remove *) FileName = '"' {AnyCharExceptQuote} '"' .