Streaming transport interfaces: input
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Thu Oct 14 08:34:12 PDT 2010
Starting a new thread from Denis' question:
> Can we outline basic Stream interface now so that we could move on?
Here's the input transport layer. Transport has no concern for
formatting - it just moves stuff around.
interface TransportBase
{
/// True if stream has no more data.
@property bool empty();
/// True if the position property works
@property bool positionable();
/// Gives current position in stream
@property ulong position();
/// Moves stream to absolute position pos
@property void position(ulong pos);
}
interface InputBinaryTransport : TransportBase
{
/// Reads up to target.length bytes into target,
/// returns size of data read. If target.length < 1 throws.
size_t read(ubyte[] target);
/// Appends to target up until delimiter is found or end of stream.
/// The delimiter is included in the target. Returns number
/// of bytes read.
size_t appendDelim(ref ubyte[] target, in ubyte[] delimiter);
}
interface InputTextTransport : TransportBase
{
/// Returns the native character size: 1 for UTF-8, 2 for UTF-16,
/// 4 for UTF-32, 0 for nonstandard native encodings.
@property size_t nativeUTFWidth();
/// Reads complete UTF code points into target, without going
/// beyond target.length. Returns number of code units read.
/// If target.length < 4 throws.
size_t read(char[] target);
/// Appends to target up until delimiter is found or end of stream.
/// The delimiter is included in the target. Returns number of
/// code units read.
size_t appendDelim(ref char[] target, in char[] delimiter);
/// Reads complete UTF code points into target, without going
/// beyond target.length. Returns number of code units read.
/// If target.length < 2 throws.
size_t read(wchar[] target);
/// Appends to target up until delimiter is found or end of stream.
/// The delimiter is included in the target. Returns number of
/// code units read.
size_t appendDelim(ref wchar[] target, in wchar[] delimiter);
/// Reads complete UTF code points into target, without going
/// beyond target.length. Returns number of code units read.
/// If target.length < 1 throws.
size_t read(dchar[] target);
/// Appends to target up until delimiter is found or end of stream.
/// The delimiter is included in the target. Returns number of
/// code units read.
size_t appendDelim(ref dchar[] target, in dchar[] delimiter);
}
Please destroy.
Andrei
More information about the Digitalmars-d
mailing list