ACE  6.1.2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Private Member Functions | Private Attributes
ACE_Read_Buffer Class Reference

Efficiently reads an arbitrarily large buffer from an input stream up to and including a termination character. Also performs search/replace on single occurrences a character in the buffer using the principles of Integrated Layer Processing. More...

#include <Read_Buffer.h>

Collaboration diagram for ACE_Read_Buffer:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 ACE_Read_Buffer (FILE *fp, bool close_on_delete=false, ACE_Allocator *=0)
 Read from a FILE *.
 ACE_Read_Buffer (ACE_HANDLE handle, bool close_on_delete=false, ACE_Allocator *=0)
 Read from an open HANDLE.
 ~ACE_Read_Buffer (void)
 Closes the FILE *.
char * read (int terminator=EOF, int search= '\n', int replace= '\0')
size_t replaced (void) const
 Returns the number of characters replaced during a read.
size_t size (void) const
ACE_Allocatoralloc (void) const
 Returns a pointer to its allocator.
void dump (void) const
 Dump the state of the object.

Private Member Functions

void operator= (const ACE_Read_Buffer &)
 ACE_Read_Buffer (const ACE_Read_Buffer &)
char * rec_read (int term, int search, int replace)
 Recursive helper method that does the work...

Private Attributes

size_t size_
 The total number of characters in the buffer.
size_t occurrences_
 The total number of characters replaced.
FILE * stream_
 The stream we are reading from.
bool const close_on_delete_
ACE_Allocatorallocator_
 Pointer to the allocator.

Detailed Description

Efficiently reads an arbitrarily large buffer from an input stream up to and including a termination character. Also performs search/replace on single occurrences a character in the buffer using the principles of Integrated Layer Processing.

This implementation is optimized to do a single dynamic allocation and make only one copy of the data. It uses recursion and the run-time stack to accomplish this efficiently.


Constructor & Destructor Documentation

ACE_Read_Buffer::ACE_Read_Buffer ( FILE *  fp,
bool  close_on_delete = false,
ACE_Allocator alloc = 0 
)

Read from a FILE *.

ACE_Read_Buffer::ACE_Read_Buffer ( ACE_HANDLE  handle,
bool  close_on_delete = false,
ACE_Allocator alloc = 0 
)

Read from an open HANDLE.

Closes the FILE *.


Member Function Documentation

ACE_Allocator * ACE_Read_Buffer::alloc ( void  ) const
inline

Returns a pointer to its allocator.

void ACE_Read_Buffer::dump ( void  ) const

Dump the state of the object.

void ACE_Read_Buffer::operator= ( const ACE_Read_Buffer )
private
char * ACE_Read_Buffer::read ( int  terminator = EOF,
int  search = '\n',
int  replace = '\0' 
)

Returns a pointer dynamically allocated with ACE_Allocator::malloc() to data from the input stream up to (and including) the terminator. If search is >= 0 then all occurrences of the search value are substituted with the replace value. The last of the byte of data is a 0, so that strlen can be used on it. The caller is responsible for freeing the pointer returned from this method using the ACE_Allocator::free().

char * ACE_Read_Buffer::rec_read ( int  term,
int  search,
int  replace 
)
private

Recursive helper method that does the work...

size_t ACE_Read_Buffer::replaced ( void  ) const
inline

Returns the number of characters replaced during a read.

size_t ACE_Read_Buffer::size ( void  ) const
inline

Returns the size of the allocated buffer obtained during a read, not including the null terminator.


Member Data Documentation

Pointer to the allocator.

Keeps track of whether we should close the FILE in the destructor.

The total number of characters replaced.

size_t ACE_Read_Buffer::size_
private

The total number of characters in the buffer.

FILE* ACE_Read_Buffer::stream_
private

The stream we are reading from.


The documentation for this class was generated from the following files: