Для одной задачки компьютерной алгебры делаю некую квази-файловую системку. Выясняется следующее.
Райдеры (Reader, Writer) модуля Stores (это, кстати, записи на стеке) подсоединяются к нужному файлу посредством метода .ConnectTo( файл ), а затем нацеливаются на нужное место в файле методом .SetPos( pos ).
На самом деле точнее было бы подсоединять их не к файлу, а к райдеру, типа:
Stores.Writer.BindTo( baton: Files.Writer ); (* baton = эстафетная палочка *)
Райдеры модуля Files помнят своё положение, и из-за этого очищается код: ансамбль процедурок обмениваются таким baton-ом без необходимости мусолить Pos, SetPos и передавать соответствующее целое.
Для себя я добавил в Stores простые процедуры
PROCEDURE BindReader (VAR rd: Reader; to: Files.Reader); PROCEDURE BindWriter (VAR wr: Writer; to: Files.Writer);
но чище было бы сделать их стандартным средством каркаса, привязав к Reader/Writer.
Это предложение по развитию каркаса.
PS Разумеется, я пробовал всякие варианты вроде того, чтобы роль эстафетной палочки играл указатель на Stores.Writer, размещённый на куче. Как-то обойтись можно -- но ценой грязи в коде. Объективная логика диктует вышеописанное решение.
|