Reference

ACE_Read_Buffer(3)

Efficiently reads an artibrarily 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.

NAME

ACE_Read_Buffer - Efficiently reads an artibrarily 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.

SYNOPSIS

#include <ace/Read_Buffer.h>
class ACE_Read_Buffer
{
  public:
    ACE_Read_Buffer (
        FILE *fp,
        int close_on_delete = 0,
        ACE_Allocator * = 0
        );
    ACE_Read_Buffer (
        ACE_HANDLE handle,
        int close_on_delete = 0,
        ACE_Allocator * = 0
        );
    ~ACE_Read_Buffer (void);
    char *read (
        int terminator = EOF,
        int search = '0,
        int replace = ' '
        );
    size_t replaced (void) const;
    size_t size (void) const;
    ACE_Allocator *alloc (void) const;
    void dump (void) const;
  private:
    char *rec_read (int term, int search, int replace);
    size_t size_;
    size_t occurrences_;
    FILE *stream_;
    int close_on_delete_;
    ACE_Allocator *allocator_;
    inline ACE_UNIMPLEMENTED_FUNC (
        void operator= (const ACE_Read_Buffer &)
        );
};

DESCRIPTION

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.

Initialization and termination methods.

ACE_Read_Buffer (
    FILE *fp,
    int close_on_delete = 0,
    ACE_Allocator * = 0
    );

Read from a FILE *.

ACE_Read_Buffer (
    ACE_HANDLE handle,
    int close_on_delete = 0,
    ACE_Allocator * = 0
    );

Read from an open HANDLE.

~ACE_Read_Buffer (void);

Closes the FILE *.

char *read (
    int terminator = EOF,
    int search = '0,
    int replace = ' '
    );

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.

size_t replaced (void) const;

Returns the number of characters replaced during a read.

size_t size (void) const;

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

ACE_Allocator *alloc (void) const;

Returns a pointer to its allocator.

void dump (void) const;

Dump the state of the object.

Disallow copying and assignment...

inline ACE_UNIMPLEMENTED_FUNC (
    void operator= (const ACE_Read_Buffer &)
    );

AUTHOR

Doug Schmidt and Seth Widoff

LIBRARY

ace