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