XML:InputBuffer

Import List

    IO
    Msg
 
Class List
Buffer
Class Summary: Buffer [Detail]
  +--XML:InputBuffer.Buffer
Field Summary
chars-: CharArray

          Character data from input channel.
discardable: CharPos

          The client can define here how many bytes that have been read into the buffer will not be inspected again later, and can therefore be discarded by Buffer.NextBlock.
endOfBuffer-: CharPos

          Number of valid characters in chars.
errList-: MsgList

          Error messages are appended to this list.
offsetFromPos0-: CharPos

          Offset of `chars[0]' from the beginning of the input text.
Constructor Summary
New(ByteChannel, MsgList): Buffer

          Creates a new input buffer for reader reader and tries to read the first block of data from it.
Method Summary
Close()

          Closes the channel associated with buffer b.
EndOfBuffer(CharPos): BOOLEAN

          Returns TRUE iff character position cpos refers to the position after the last valid byte in the buffer.
NextBlock(): BOOLEAN

          Tries to read additional data from b's channel.
 
Type Summary
Char = CHAR

          Character type used to represent the input data.
CharArray = POINTER TO ARRAY OF Char

          Character array of arbitrary length.
CharPos = LONGINT

          Character position for a channel.
Constant Summary
markerEOB

          This is the character value that is used to mark the first invalid character after the buffer.
sizeOfBuffer

          

Class Detail: Buffer
Field Detail

chars

FIELD chars-: CharArray

Character data from input channel.


discardable

FIELD discardable: CharPos

The client can define here how many bytes that have been read into the buffer will not be inspected again later, and can therefore be discarded by Buffer.NextBlock. Possible values for this field are [0..endOfBuffer].


endOfBuffer

FIELD endOfBuffer-: CharPos

Number of valid characters in chars. All index values in the range [0..endOfBuffer-1] hold valid characters. The value of `chars[endOfBuffer]' is markerEOB.


errList

FIELD errList-: MsgList

Error messages are appended to this list.


offsetFromPos0

FIELD offsetFromPos0-: CharPos

Offset of `chars[0]' from the beginning of the input text.

Constructor Detail

New

PROCEDURE New(reader: ByteChannel; 
              errList: MsgList): Buffer
  RAISES Error;

Creates a new input buffer for reader reader and tries to read the first block of data from it. Returns an initialized input buffer with up to sizeOfBuffer characters of input.

Method Detail

Close

PROCEDURE (b: Buffer) Close()
  RAISES Error;

Closes the channel associated with buffer b. Afterwards, no further operations are permitted on b, except for reading the field Buffer.errList.


EndOfBuffer

PROCEDURE (b: Buffer) EndOfBuffer(cpos: CharPos): BOOLEAN

Returns TRUE iff character position cpos refers to the position after the last valid byte in the buffer.

Pre-condition: `0' <= cpos <= `b.endOfBuffer' and `b. chars[cpos] = markerEOB'


NextBlock

PROCEDURE (b: Buffer) NextBlock(): BOOLEAN
  RAISES Error;

Tries to read additional data from b's channel. If at least one byte could be read, result is TRUE. FALSE means that not a single byte was added to the buffer, either because the end of the file was reached, or because of a read error. In the latter case, an message is added to b's error list.

A call to this buffer may change the fields Buffer.chars, Buffer.offsetFromPos0, and Buffer.endOfBuffer. If part of the buffer is discarded, Buffer.discardable is set to zero.

 
Type Detail

Char

TYPE Char = CHAR

Character type used to represent the input data.


CharArray

TYPE CharArray = POINTER TO ARRAY OF Char

Character array of arbitrary length. This type is used for the character data of the input buffer.


CharPos

TYPE CharPos = LONGINT

Character position for a channel. The very first byte that would be read from the channel has position 0.

Constant Detail

markerEOB

CONST markerEOB 

This is the character value that is used to mark the first invalid character after the buffer. Use Buffer.EndOfBuffer to determine, whether the character position is indeed the end of the buffer.


sizeOfBuffer

CONST sizeOfBuffer