D Programming Language 2.0

Last update Sat May 19 02:03:01 2012

io.core

core module for new I/O

template DeviceElementType(Dev)
Retruns element type of device.

template isSource(Dev)
Returns true if Dev is a source. It must define the primitive pull.

pull operation provides synchronous but non-blocking input.

template isSink(Dev)
Returns true if Dev is a sink. It must define the primitive push.

push operation provides synchronous but non-blocking output.

template isBufferedSource(Dev)
Returns true if Dev is a buffered source. It must define the three primitives, fetch, available, and consume.

In definition, initial state of buffered source has 0 length available. It assumes that the buffer is not fetch-ed yet.

template isBufferedSink(Dev)
Returns true if Dev is a buffered sink. It must define the three primitives, flush, writable, and commit.

template isSeekable(Dev)
Check that Dev is seekable source or sink. Seekable device supports seek primitive.

template isDevice(Dev)
Device supports both primitives of source and sink.

interface Source(E);
Provides runtime source interface.

bool pull(ref E[] buf);

interface Sink(E);
Provides runtime sink interface.

bool push(ref const(E)[] buf);

interface BufferedSource(E): Source!(E);
Provides runtime buffered source interface.

bool fetch();
const const(E)[] available();
void consume(size_t n);

interface BufferedSink(E): Sink!(E);
Provides runtime buffered sink interface.

bool flush();
E[] writable();
bool commit(size_t n);

abstract interface Seekable;
Provides runtime seekable interface.

abstract @property bool seekable();
abstract ulong seek(long offset, SeekPos whence);

template Sourced(Dev)
@property auto sourced(Dev)(Dev device);
@property auto sourced(Dev)(Dev device);
Disable sink interface of device. If device has buffered interface, keep it.

template Sinked(Dev)
@property auto sinked(Dev)(Dev device);
@property auto sinked(Dev)(Dev device);
Disable source interface of device.

template Buffered(Dev)
@property auto buffered(Dev)(Dev device, size_t bufferSize = 4096);

template Coerced(E,Dev)
@property auto coerced(E, Dev)(Dev device);
Change device element type from ubyte to E. While device operation, remain bytes are cached.

template Ranged(Dev)
@property auto ranged(Dev)(Dev device);
Generate possible range interface from device.

If device is a buffered source, input range interface is available. If device is a sink, output range interface is available.

If original device element is Unicode character, supports decoding and encoding.