{
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.