Лабораторная работа 4.
Разработка собственного класса потока.

Информация

В зависимости от поставленных задач программист может в своей работе использовать как уже существующие классы потоков, так и разрабатывать свои собственные, если возможности предопределенных классов-потоков в ОО-библиотеке не удовлетворяют заявленным требованиям. При этом в качестве хранилища данных могут выступать файлы и отдельные их части, внешние аппаратные устройства, структурированные области оперативной памяти, сетевые ресурсы и т.д.

Задание

В ЛР№3 была реализована ОО-библиотека для обработки списков различных типов. Задача заключается в создании класса-потока, способного хранить свой контент в любом списке из разработанной библиотеки. Для упрощения работы рекомендуется создать и применять для хранения данных в потоке новый тип узла TByteListNode:

...
type 
 TByteListNode=class(TBaseListNode)
  constructor Create(Value:Byte);
  ...
 end;

 TBaseListClass=class of TBaseList;

 TListStream=class(TStream)
  private
   FList:TBaseListClass;
  public
  constructor Create(TypeList:TBaseListClass);
   // создает поток на базе переданного типа списка
  function SaveToList(List:TBaseList):TBaseList; 
   // если переданный список=nil, то создается копия внутреннего списка, 
   // иначе результирующий список очищается и в него вставляются копии узлов внутреннео списка.
   // результат функции - заполненный список.
  procedure LoadFromList(List:TBaseList);
   // если переданный список содержит многобайтовые элементы, каждый из них должен быть преобразован 
   // при вставке в набор однобайтовых элементов TByteListNode
  ...
 end;

Провести комплексную проверку разработанного класса.