ACEXML
6.1.8
|
Provides a memory-mapped stream abstraction to simplify parsing of tokens. More...
#include <Mem_Map_Stream.h>
Public Member Functions | |
ACEXML_Mem_Map_Stream (void) | |
Default constructor. More... | |
virtual int | open (Connector *connector, const ACE_INET_Addr &) |
Initialize this object. More... | |
virtual | ~ACEXML_Mem_Map_Stream (void) |
Destructor. More... | |
ACE_SOCK_Stream & | stream (void) |
Returns the underlying <ACE_SOCK_Stream>. More... | |
virtual ssize_t | send_n (const void *buf, size_t size, ACE_Time_Value *tv=0) |
virtual int | get_char (void) |
virtual const char * | recv (size_t &len) |
virtual const char * | recv (void) const |
virtual size_t | recv_len (void) const |
virtual size_t | available (void) const |
virtual void | rewind (void) |
virtual int | peek_char (size_t offset) |
virtual const char * | peek_str (size_t offset, size_t size) |
virtual ACE_OFF_T | seek (ACE_OFF_T offset, int whence=SEEK_CUR) |
virtual int | eof (void) const |
Returns 1 if we're at the end of the HTTP stream, else 0. More... | |
Svc_Handler * | svc_handler (void) |
Returns the underlying service handler. More... | |
Private Member Functions | |
int | grow_file_and_remap (void) |
Private Attributes | |
Svc_Handler * | svc_handler_ |
ACE_Mem_Map | mem_map_ |
Memory-mapped file that we're iterating over. More... | |
char * | recv_pos_ |
Pointer to the address where the next <recv> method will start. More... | |
char * | get_pos_ |
char * | end_of_mapping_plus1_ |
Address at the end of the file mapping. More... | |
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:
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.
ACEXML_Mem_Map_Stream::ACEXML_Mem_Map_Stream | ( | void | ) |
Default constructor.
|
virtual |
Destructor.
|
virtual |
Returns the no. of bytes available in the stream.
|
virtual |
Returns 1 if we're at the end of the HTTP stream, else 0.
|
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.
|
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.
|
virtual |
Initialize this object.
|
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.
|
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.
|
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.
|
virtual |
Returns a pointer to array of characters starting at the <recv> position.
|
virtual |
Returns the length in bytes between the <get> position and the <recv> position.
|
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.
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.
|
virtual |
Send <size> bytes in <buf> to the connected peer. This is a completely unbuffered call.
ACE_SOCK_Stream & ACEXML_Mem_Map_Stream::stream | ( | void | ) |
Returns the underlying <ACE_SOCK_Stream>.
Svc_Handler * ACEXML_Mem_Map_Stream::svc_handler | ( | void | ) |
Returns the underlying service handler.
|
private |
Address at the end of the file mapping.
|
private |
Pointer to the address where the next <get_char> method will start.
|
private |
Memory-mapped file that we're iterating over.
|
private |
Pointer to the address where the next <recv> method will start.
|
private |
Connection to peer. The granularity is at the Svc_Handler level. The Svc_Handler has an SOCK_Stream.