Особо не вникал в Stores.Store, а тут решил проверить, восстановит ли модуль ссылку, как это обещано в документации. Написал вот такой тестовый пример. Но ссылка не восстанавливается. Вопрос к знатокам фреймворка. Что я делаю не так?
Код:
MODULE TestStores;
IMPORT Files, Stores, Log := StdLog;
TYPE
Type1 = POINTER TO RECORD (Stores.Store)
a: INTEGER;
parent: Type2;
END;
Type2 = POINTER TO RECORD (Stores.Store)
b: Type1;
END;
VAR
object: Type2;
PROCEDURE (s: Type1) Externalize (VAR wr: Stores.Writer);
BEGIN
wr.WriteInt(s.a)
END Externalize;
PROCEDURE (s: Type1) Internalize (VAR rd: Stores.Reader);
BEGIN
rd.ReadInt(s.a)
END Internalize;
PROCEDURE (s: Type2) Externalize (VAR wr: Stores.Writer);
BEGIN
wr.WriteStore(s.b)
END Externalize;
PROCEDURE (s: Type2) Internalize (VAR rd: Stores.Reader);
VAR tmp: Stores.Store;
BEGIN
rd.ReadStore(tmp);
WITH tmp: Type1 DO
s.b := tmp
END;
END Internalize;
PROCEDURE Init*;
VAR t1: Type1; t2: Type2;
BEGIN
NEW(t1);
t1.a := 1024;
NEW(t2);
t2.b := t1;
t1.parent := t2;
Stores.InitDomain(t2);
Stores.Join(t1, t2);
object := t2;
END Init;
PROCEDURE Save*;
VAR file: Files.File; wr: Stores.Writer; res_:INTEGER;
BEGIN
file:=Files.dir.New(Files.dir.This(""), Files.dontAsk);
wr.ConnectTo(file);
wr.WriteStore(object);
file.Register("test.bin", Files.docType, Files.dontAsk, res_);
END Save;
PROCEDURE Load*;
VAR file: Files.File; loc:Files.Locator; rd: Stores.Reader; res_:INTEGER; s: Stores.Store;
BEGIN
file := Files.dir.Old(Files.dir.This(""), "test.bin", Files.dontAsk);
rd.ConnectTo(file);
rd.ReadStore(s);
WITH s: Type2 DO
object := s;
Log.Int(object.b.parent.b.a); Log.Ln;
ELSE END;
END Load;
END TestStores.
TestStores.Init
TestStores.Save
TestStores.Load