pascalx.io.extension.pas

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

{
    pascalx.io.extension — основные расширения классов ввода-вывода.

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

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

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

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

unit pascalx.io.extension;

    {$MODE DELPHI}

interface

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

    {$TYPEINFO ON}
    {$CALLING REGISTER}

    const UNIT_NAME = 'pascalx.io.extension';

    {%region} type
        LimitedSizeExtension = interface;
        MarkExtension        = interface;
        SeekExtension        = interface;
        StreamedExtension    = interface;
        TruncateExtension    = interface;

        SeekFrom = (
            sfBegin   = 0,
            sfCurrent = 1,
            sfEnd     = 2
        );

        LimitedSizeExtension = interface(Extension) ['{56B6E72A-4ACB-4A80-AC70-5CB7E685C400}']
            function available(): long;
        end;

        MarkExtension = interface(Extension) ['{56B6E72A-4ACB-4A80-AC70-5CB7E685C401}']
            procedure reset();
            procedure mark(transferLimit: int);
        end;

        SeekExtension = interface(LimitedSizeExtension) ['{56B6E72A-4ACB-4A80-AC70-5CB7E685C402}']
            function seek(offset: long; from: SeekFrom): long;
            function position(): long;
            function size(): long;
        end;

        StreamedExtension = interface(Extension) ['{56B6E72A-4ACB-4A80-AC70-5CB7E685C403}']
            function ready(): boolean;
        end;

        TruncateExtension = interface(Extension) ['{56B6E72A-4ACB-4A80-AC70-5CB7E685C404}']
            procedure truncate();
        end;
    {%endregion}

implementation

    {%region} initialization
        Lang.registerInterfaces([
            typeInfo(LimitedSizeExtension),
            typeInfo(MarkExtension),
            typeInfo(SeekExtension),
            typeInfo(StreamedExtension),
            typeInfo(TruncateExtension)
        ]);
    {%endregion}

end.