/*
Исходный код среды исполнения ПВТ-ОО.
Этот исходный код является частью проекта ПВТ-ОО.
Copyright © 2021 Малик Разработчик
Это свободная программа: вы можете перераспространять её и/или
изменять её на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
в каком она была опубликована Фондом свободного программного обеспечения;
либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
Эта программа распространяется в надежде, что она может быть полезна,
но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
общественной лицензии GNU.
Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
вместе с этой программой. Если это не так, см.
<http://www.gnu.org/licenses/>.
*/
package platform.independent.streamformat.text.plain;
import avt.io.*;
import avt.io.charset.*;
import avt.io.extension.*;
import platform.independent.streamformat.*;
import platform.independent.streamformat.text.*;
public class PlainCodec(Object, TextCodec)
{
private String fldText;
public () { }
public void loadFromDataStream(DataInputStream stream) throws IOException { loadFromDataStream(stream, (CharDecoder) null); }
public void loadFromDataStream(DataInputStream stream, CharDecoder decoder) throws IOException {
if(stream == null)
{
throw new NullPointerException("аргумент stream равен нулевой ссылке");
}
LimitedSizeExtension lse = (LimitedSizeExtension) stream.getExtension(LimitedSizeExtension.class);
if(lse == null)
{
throw new InvalidStreamException("аргумент stream не поддерживает расширение LimitedSizeExtension");
}
if(decoder == null) decoder = Charset.getDefault().newDecoder();
byte[] buffer = new byte[(int) Long.max(0L, Long.min(lse.available(), Int.MAX_VALUE))];
int length = stream.read(buffer);
fldText = length <= 0 ? "" : new String(decoder.decode(buffer, 0, length));
}
public void saveToDataStream(DataOutputStream stream) throws IOException { saveToDataStream(stream, (CharEncoder) null); }
public void saveToDataStream(DataOutputStream stream, CharEncoder encoder) throws IOException {
if(stream == null)
{
throw new NullPointerException("аргумент stream равен нулевой ссылке");
}
String text = fldText;
if(text == null)
{
throw new EmptyAdapterException("адаптер пуст");
}
if(encoder == null) encoder = Charset.getDefault().newEncoder();
stream.write(encoder.encode(text.toCharArray()));
}
public void setText(String text) throws InvalidDataFormatException, UnsupportedDataException { fldText = text; }
public void clear() { fldText = null; }
public boolean isEmpty() { return fldText == null; }
public String getText() { return fldText; }
}