tango.io.device.Conduit

License:

BSD style: see license.txt

Version:

Mar 2004: Initial release

Author:

Kris
class Conduit : IConduit #
Conduit abstract base-class, implementing interface IConduit. Only the conduit-specific read(), write(), detach() and bufferSize() need to be implemented for a concrete conduit implementation. See File for an example.
Conduits provide virtualized access to external content, and represent things like files or Internet connections. Conduits expose a pair of streams, are modelled by tango.io.model.IConduit, and are implemented via classes such as File & SocketConduit.

Additional kinds of conduit are easy to construct: one either subclasses tango.io.device.Conduit, or implements tango.io.model.IConduit. A conduit typically reads and writes from/to a Buffer in large chunks, typically the entire buffer. Alternatively, one can invoke input.read(dst[]) and/or output.write(src[]) directly.

this() #
Test for asynchronous capability. This will be eligable for scheduling where (a) it is created within a fiber and (b) there is a scheduler attached to the fiber at the time this is invoked.
Note that fibers may schedule just one outstanding I/O request at a time
~this() #
Clean up when collected. See method detach()
char[] toString() [abstract] #
Return the name of this conduit
size_t bufferSize() [abstract] #
Return a preferred size for buffering conduit I/O
size_t read(void[] dst) [abstract] #
Read from conduit into a target array. The provided dst will be populated with content from the conduit.
Returns the number of bytes read, which may be less than requested in dst. Eof is returned whenever an end-of-flow condition arises.
size_t write(void [] src) [abstract] #
Write to conduit from a source array. The provided src content will be written to the conduit.
Returns the number of bytes written from src, which may be less than the quantity provided. Eof is returned when an end-of-flow condition arises.
void detach() [abstract] #
Disconnect this conduit. Note that this may be invoked both explicitly by the user, and implicitly by the GC. Be sure to manage multiple detachment requests correctly: set a flag, or sentinel value as necessary
void timeout(uint millisec) [final] #
Set the active timeout period for IO calls (in milliseconds)
uint timeout() [final] #
Get the active timeout period for IO calls (in milliseconds)
bool isAlive() #
Is the conduit alive? Default behaviour returns true
IConduit conduit() [final] #
Return the host. This is part of the Stream interface
IOStream flush() #
Emit buffered output or reset buffered input
void close() #
Close this conduit Both input and output are detached, and are no longer usable
InputStream input() [final] #
Return the input stream
OutputStream output() [final] #
Return the output stream
void error(char[] msg) [final] #
Throw an IOException, with the provided message
OutputStream copy(InputStream src, size_t max = -1) #
Transfer the content of another conduit to this one. Returns the dst OutputStream, or throws IOException on failure.
void[] load(size_t max = -1) #
Load the bits from a stream, and return them all in an array. The dst array can be provided as an option, which will be expanded as necessary to consume the input.
Returns an array representing the content, and throws IOException on error
long seek(long offset, Anchor anchor = Anchor.Begin) #
Seek on this stream. Source conduits that don't support seeking will throw an IOException
void[] load(InputStream src, size_t max = -1) [static] #
Load the bits from a stream, and return them all in an array. The dst array can be provided as an option, which will be expanded as necessary to consume input.
Returns an array representing the content, and throws IOException on error
size_t transfer(InputStream src, OutputStream dst, size_t max = -1) [static] #
Low-level data transfer, where max represents the maximum number of bytes to transfer.
Returns Eof on failure, number of bytes copied on success
class InputFilter : InputStream #
Base class for input stream filtering
this(InputStream source) #
Attach to the provided stream. The provided source stream should generally never be null, though some filters have a need to set this lazily
IConduit conduit() #
Return the hosting conduit
size_t read(void[] dst) #
Read from conduit into a target array. The provided dst will be populated with content from the conduit.
Returns the number of bytes read, which may be less than requested in dst. Eof is returned whenever an end-of-flow condition arises.
void[] load(size_t max = -1) #
Load the bits from a stream, and return them all in an array. The dst array can be provided as an option, which will be expanded as necessary to consume the input.
Returns an array representing the content, and throws IOException on error
IOStream flush() #
Clear any buffered content
long seek(long offset, Anchor anchor = Anchor.Begin) #
Seek on this stream. Target conduits that don't support seeking will throw an IOException
InputStream input() #
Return the upstream host of this filter
void close() #
Close the input
class OutputFilter : OutputStream #
Base class for output stream filtering. The provided sink stream should generally never be null, though some filters have a need to set this lazily
this(OutputStream sink) #
Attach to the provided stream
IConduit conduit() #
Return the hosting conduit
size_t write(void[] src) #
Write to conduit from a source array. The provided src content will be written to the conduit.
Returns the number of bytes written from src, which may be less than the quantity provided. Eof is returned when an end-of-flow condition arises.
OutputStream copy(InputStream src, size_t max = -1) #
Transfer the content of another conduit to this one. Returns a reference to this class, or throws IOException on failure.
IOStream flush() #
Emit/purge buffered content
long seek(long offset, Anchor anchor = Anchor.Begin) #
Seek on this stream. Target conduits that don't support seeking will throw an IOException
OutputStream output() #
Return the upstream host of this filter
void close() #
Close the output