Класс CmaStream переопределяет операторы потокового ввода/вывода, чтобы сократить код сохранения данных

###### Свойства и функции класса TmaStream

- constructor Create(const name:wideString;mode:cardinal)
- constructor Create(stream:ImaStream)
- constructor Create(cell:TmaCell)
- property Options:maStreamOptions
- procedure PushOptions(opt:maStreamOptions)
- procedure PopOptions
- procedure Open
- procedure Close
- procedure Flush

Чтение и запись в поток

- procedure newLine
- procedure newField
- procedure WriteLong(value:integer)
- procedure WriteDouble(value:double)
- procedure WriteStr(value: WideString)
- function ReadLong:Integer
- function ReadDouble:Double
- function ReadStr:WideString
- procedure WriteBlock (var ptr;length: integer)
- procedure ReadBlock(var ptr;length: integer)
- function Write(Value: TmaComponent): HResult
- function Read: ImaComponent
- function ReadCell: TmaCell
- function ReadMatrix: TmaMatrix
- function ReadList: TmaList
- function ReadSparseMatrix: TmaSparseMatrix
- procedure Read(var val: TmaCell)
- procedure Read(var val: TmaMatrix)
- procedure Read(var val: TmaList)
- procedure Read(var val: TmaSparseMatrix)

    constructor Create(const name:wideString;mode:cardinal)

Создает поток, связяный с файлом с именем name. При этом файл остается закрытым до вызова функции Open, но автоматически открывается перед каждой операцией ввода-вывода и закрывается после нее.

Параметры:

name имя открываемого файла
mode режим открытия и формат файла (см. файловые константы ).

    constructor Create(stream:ImaStream)

Присоединение класса к уже существующему интерфейсу.

    constructor Create(cell:TmaCell)

Присоединение к потоку, хранящемуся в ячейке cell. Если в ячейке нет потока, то объект не создается.

    property Options:maStreamOptions

Свойство позволяет получать и устанавливать опции ввода-вывода.

    procedure PushOptions(opt:maStreamOptions)

Функция сохраняет текущие опции ввода-вывода во внутреннем стеке и затем заменяет текущие опции на opt.

Параметры:

opt новые опции ввода-вывода

    procedure PopOptions

Функция восстанавливает предыдущие опции ввода-вывода.

    procedure Open

Открывает поток. После вызова Open поток не будет закрываться после каждой операции ввода-вывода до вызова Close.

    procedure Close

Закрывает поток.После этоого файл автоматически открывается перед каждой операцией ввода-вывода и закрывается после нее.

    procedure Flush

Сбрасывает файловые буфера. Имеет смысл только для открытого потока.

    procedure newLine

Функция записывает разделитель строк в поток. Что именно будет записано в поток, определяется опциями ввода-вывода. Если поток не текстовый, то вызовы игнорируются.

    procedure newField

Функция записывает в поток разделитель полей. Что именно будет записано в поток, определяется опциями ввода-вывода. Если поток не текстовый, то вызовы игнорируются.

    procedure WriteLong(value:integer)
    procedure WriteDouble(value:double)
    procedure WriteStr(value: WideString)

Процедуры выводят простое значение в текстовый поток. Формат вывода задается опциями потока. Если поток не открыт, то он открывается, и по завершении вывода закрывается.

Параметры:

value записываемое значение

    function  ReadLong:Integer
    function  ReadDouble:Double
    function  ReadStr:WideString

Функции считывают простое значение из текстового потока. Если поток не открыт, то он открывается, и по завершении ввода закрывается. Функция ReadStr выделяет память под строку сама.

    procedure WriteBlock (var ptr;length: integer)

Функция записывает блок данных заданной длины. Только для бинарных потоков. Если поток не открыт, то он открывается, и по завершении ввода/вывода закрывается.

Параметры:

ptr указатель на записываемые данные
length длина записываемых данных

    procedure ReadBlock(var ptr;length: integer)

Функция счикывает блок данных заданной длины. Только для бинарных потоков. Если поток не открыт, то он открывается, и по завершении ввода/вывода закрывается.

Параметры:

ptr указатель на считываемые данные
length длина считываемых данных

    function Write(Value: TmaComponent): HResult

Функция записи компонента любого типа. Если поток не открыт, то он открывается, и по завершении ввода/вывода закрывается.

Параметры:

comp указатель на компонент

Возвращаемое значение:

MA_NOERROR при отсутствии ошибок
MA_ERR_BAD_PARAM если comp==NULL
MA_ERR_IOPERM если запись в поток запрещена
MA_ERR_NOINTERFACE если компонент не имеет интерфейса ImaSupportsStreaming

    function Read: ImaComponent

Функции чтения компонента. Создается и возвращается компонент с CLSID, считанным из потока.
Если поток не открыт, то он открывается, и по завершении ввода/вывода закрывается.

Возвращаемое значение:

Указатель на считываемый компонент

    function ReadCell: TmaCell
    function ReadMatrix: TmaMatrix
    function ReadList: TmaList
    function ReadSparseMatrix: TmaSparseMatrix

Функции чтения компонентов из потока. При вызове функции очередной компонент считывается из потока и создается. Если очередной компонент в потоке имеет тип, не совпадающий с типом возвращаемого класса-оболочки, то считанный объект уничтожается и возвращается класс-оболочка с пустым указателем на интерфейс.

    procedure Read(var val: TmaCell)
    procedure Read(var val: TmaMatrix)
    procedure Read(var val: TmaList)
    procedure Read(var val: TmaSparseMatrix)

Функции чтения компонентов из потока. При вызове функции считывается из потока уже существующий компонент. При ошибке считывания возвращается класс-оболочка с пустым указателем на интерфейс.