OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 02:57

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Stores
СообщениеДобавлено: Пятница, 16 Сентябрь, 2022 08:52 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Особо не вникал в 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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Stores
СообщениеДобавлено: Вторник, 20 Сентябрь, 2022 12:03 

Зарегистрирован: Суббота, 04 Май, 2019 10:21
Сообщения: 29
Missing Type1.parent field in Externalize and Internalize functions...


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB