OberonCore
https://forum.oberoncore.ru/

Stores
https://forum.oberoncore.ru/viewtopic.php?f=23&t=6865
Страница 1 из 1

Автор:  Иван Денисов [ Пятница, 16 Сентябрь, 2022 08:52 ]
Заголовок сообщения:  Stores

Особо не вникал в 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

Автор:  luowy [ Вторник, 20 Сентябрь, 2022 12:03 ]
Заголовок сообщения:  Re: Stores

Missing Type1.parent field in Externalize and Internalize functions...

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/