ACEXML_Mem_Map_Stream Class Reference
Provides a memory-mapped stream abstraction to simplify parsing of tokens.
More...
#include <ACEXML/common/Mem_Map_Stream.h>
Collaboration diagram for ACEXML_Mem_Map_Stream:
[legend]List of all members.
Detailed Description
Provides a memory-mapped stream abstraction to simplify parsing of tokens.
This class makes it possible to treat an connection as a stream of bytes, similar to the C library stdio streams. The contents of the connection are buffered incrementally in a memory-mapped file. This class maintains pointers to two positions in the stream:
1. The <recv> position, which keeps track of the beginning of a token that is in the stream.
2. The <get> position, which moves along character-by-character until the end of the token is reached.
Once a token has been located, it can be extracted from the stream by calling the <recv>. The length of the token, i.e., the <recv_len>, is the length in bytes between the <get> position and the <recv> position. Once the token has been extracted, the <recv> and <get> positions can be updated by the <seek> method.
Constructor & Destructor Documentation
ACEXML_Mem_Map_Stream::ACEXML_Mem_Map_Stream |
( |
void |
|
) |
|
|
Member Function Documentation
size_t ACEXML_Mem_Map_Stream::available |
( |
void |
|
) |
const [virtual] |
|
|
Returns the no. of bytes available in the stream. |
int ACEXML_Mem_Map_Stream::eof |
( |
void |
|
) |
const [virtual] |
|
|
Returns 1 if we're at the end of the HTTP stream, else 0.
|
int ACEXML_Mem_Map_Stream::get_char |
( |
void |
|
) |
[virtual] |
|
|
Return the next character in the stream and advance the <get> position. Returns EOF when the <get> position reaches the end of the HTTP stream. |
int ACEXML_Mem_Map_Stream::grow_file_and_remap |
( |
void |
|
) |
[private] |
|
|
Grow the file by reading another chunk from the HTTP socket and extend the mapping to cover this chunk. Returns -1 on failure or EOF, else 0. |
int ACEXML_Mem_Map_Stream::peek_char |
( |
size_t |
offset |
) |
[virtual] |
|
|
Returns the nth character <offset> from the <get> position in the stream without advancing the <get> position. Automatically extends the backing store if necessary. Returns EOF if <offset> is past the end of the stream. |
const char * ACEXML_Mem_Map_Stream::peek_str |
( |
size_t |
offset, |
|
|
size_t |
size |
|
) |
[virtual] |
|
|
Return a pointer to an array of <size> characters starting at <offset> characters from the <get> position in the stream without advancing the <get> position. Automatically extends the backing store if necessary. Returns 0 if <offset> or <offset + size> is past the end of the stream. |
const char * ACEXML_Mem_Map_Stream::recv |
( |
void |
|
) |
const [virtual] |
|
|
Returns a pointer to array of characters starting at the <recv> position. |
const char * ACEXML_Mem_Map_Stream::recv |
( |
size_t & |
len |
) |
[virtual] |
|
|
Returns a pointer to array of at most <len> characters starting at the <recv> position. If the <recv> position + <len> extends past the EOF then <len> is set to the number of characters between the <recv> position and the EOF and both the <get> and <recv> positions are advanced by <len>. Returns 0 if the <recv> position is at the EOF. |
size_t ACEXML_Mem_Map_Stream::recv_len |
( |
void |
|
) |
const [virtual] |
|
|
Returns the length in bytes between the <get> position and the <recv> position. |
void ACEXML_Mem_Map_Stream::rewind |
( |
void |
|
) |
[virtual] |
|
|
Resets the <get> and <recv> positions to the beginning of the stream. This works since all the data has been cached in the memory-mapped backing store. |
off_t ACEXML_Mem_Map_Stream::seek |
( |
off_t |
offset, |
|
|
int |
whence = SEEK_CUR |
|
) |
[virtual] |
|
|
Sets the <get> and <recv> positions as follows: o If <whence> is <seek_set>, the positions are set to <offset> bytes from the start of the stream. o If <whence> is <seek_cur>, the positions are set to the current <get> position plus <offset>. o If <whence> is <seek_end>, the positions are set to the size of the stream plus <offset>.
If offset is greater than EOF, both <get> and <recv> are set to EOF. Note special return value is returned to indicate this condition. |
ssize_t ACEXML_Mem_Map_Stream::send_n |
( |
const void * |
buf, |
|
|
size_t |
size, |
|
|
ACE_Time_Value * |
tv = 0 |
|
) |
[virtual] |
|
|
Send <size> bytes in <buf> to the connected peer. This is a completely unbuffered call. |
|
Returns the underlying <ace_sock_stream>.
|
Svc_Handler * ACEXML_Mem_Map_Stream::svc_handler |
( |
void |
|
) |
|
|
|
Returns the underlying service handler.
|
Member Data Documentation
|
Address at the end of the file mapping.
|
|
Pointer to the address where the next <get_char> method will start. |
|
Memory-mapped file that we're iterating over.
|
|
Pointer to the address where the next <recv> method will start.
|
|
Connection to peer. The granularity is at the Svc_Handler level. The Svc_Handler has an SOCK_Stream. |
The documentation for this class was generated from the following files:
Generated on Sun May 15 12:55:08 2005 for ACEXML by
1.3.9.1