platform.independent.streamformat.pas

Переключить прокрутку окна
Загрузить этот исходный код

{
    platform.independent.streamformat — основной модуль для разработки классов
    чтения и записи различных файловых форматов.

    Copyright © 2021, 2026 Малик Разработчик

    Это свободная программа: вы можете перераспространять её и/или изменять
    её на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
    в каком она была опубликована Фондом свободного программного обеспечения;
    либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.

    Эта программа распространяется в надежде, что она будет полезной,
    но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
    или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
    общественной лицензии GNU.

    Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
    вместе с этой программой. Если это не так, см.
    <https://www.gnu.org/licenses/>.
}

unit platform.independent.streamformat;

    {$MODE DELPHI}

interface

    {%region} uses
        pascalx.lang,
        pascalx.io,
        pascalx.io.charset;
    {%endregion}

    {$TYPEINFO ON}
    {$CALLING REGISTER}

    const UNIT_NAME = 'platform.independent.streamformat';

    {%region} type
        DataHolder               = interface;
        MutableDataHolder        = interface;
        InputAdapter             = interface;
        OutputAdapter            = interface;
        StreamAdapter            = interface;
        DataDecoder              = interface;
        DataEncoder              = interface;
        DataCodec                = interface;
        CharsetInputAdapter      = interface;
        CharsetOutputAdapter     = interface;
        CharsetStreamAdapter     = interface;
        EmptyAdapterException    = class;
        InvalidStreamException   = class;
        UnsupportedDataException = class;

        DataHolder = interface(RawInterface) ['{4C60A45E-1969-4F88-9759-D7EF633CF3C0}']
            function isEmpty(): boolean;
        end;

        MutableDataHolder = interface(DataHolder) ['{4C60A45E-1969-4F88-9759-D7EF633CF3C1}']
            procedure clear();
        end;

        InputAdapter = interface(RawInterface) ['{4C60A45E-1969-4F88-9759-D7EF633CF3C2}']
            procedure loadFromInputStream(stream: ByteReader);
        end;

        OutputAdapter = interface(RawInterface) ['{4C60A45E-1969-4F88-9759-D7EF633CF3C3}']
            procedure saveToOutputStream(stream: ByteWriter);
        end;

        StreamAdapter = interface(RawInterface) ['{4C60A45E-1969-4F88-9759-D7EF633CF3C6}']
            procedure loadFromInputStream(stream: ByteReader);
            procedure saveToOutputStream(stream: ByteWriter);
        end;

        DataDecoder = interface(MutableDataHolder) ['{4C60A45E-1969-4F88-9759-D7EF633CF3C4}']
            procedure loadFromInputStream(stream: ByteReader);
        end;

        DataEncoder = interface(MutableDataHolder) ['{4C60A45E-1969-4F88-9759-D7EF633CF3C5}']
            procedure saveToOutputStream(stream: ByteWriter);
        end;

        DataCodec = interface(MutableDataHolder) ['{4C60A45E-1969-4F88-9759-D7EF633CF3C7}']
            procedure loadFromInputStream(stream: ByteReader);
            procedure saveToOutputStream(stream: ByteWriter);
        end;

        CharsetInputAdapter = interface(InputAdapter) ['{4C60A45E-1969-4F88-9759-D7EF633CF3C8}']
            procedure loadFromInputStream(stream: ByteReader; decoder: CharDecoder); overload;
        end;

        CharsetOutputAdapter = interface(OutputAdapter) ['{4C60A45E-1969-4F88-9759-D7EF633CF3C9}']
            procedure saveToOutputStream(stream: ByteWriter; encoder: CharEncoder); overload;
        end;

        CharsetStreamAdapter = interface(StreamAdapter) ['{4C60A45E-1969-4F88-9759-D7EF633CF3CA}']
            procedure loadFromInputStream(stream: ByteReader; decoder: CharDecoder); overload;
            procedure saveToOutputStream(stream: ByteWriter; encoder: CharEncoder); overload;
        end;

        EmptyAdapterException = class(IOException);

        InvalidStreamException = class(IOException);

        UnsupportedDataException = class(IOException);
    {%endregion}

implementation

    {$R *.res}

    {%region} initialization
        Lang.registerInterfaces([
            typeInfo(DataHolder),
            typeInfo(MutableDataHolder),
            typeInfo(InputAdapter),
            typeInfo(OutputAdapter),
            typeInfo(StreamAdapter),
            typeInfo(DataDecoder),
            typeInfo(DataEncoder),
            typeInfo(DataCodec),
            typeInfo(CharsetInputAdapter),
            typeInfo(CharsetOutputAdapter),
            typeInfo(CharsetStreamAdapter)
        ]);
    {%endregion}

end.