Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

WvBufBase< unsigned char > Class Template Reference

#include <wvbuf.h>

Inherits WvBufBaseCommonImpl< unsigned char >.

Collaboration diagram for WvBufBase< unsigned char >:

[legend]
List of all members.

Detailed Description

template<>
class WvBufBase< unsigned char >

Specialization of WvBufBase for unsigned char type buffers intended for use with raw memory buffers.

Refines the interface to add support for untyped pointers. Adds some useful string operations.

Definition at line 22 of file wvbuf.h.

Public Member Functions

 WvBufBase (WvBufStore *store)
void putstr (WvStringParm str)
 Copies a WvString into the buffer, excluding the null-terminator.

void putstr (WVSTRING_FORMAT_DECL)
WvString getstr ()
 Returns the entire buffer as a null-terminated WvString.

WvString getstr (size_t len)
 Returns the first len characters in the buffer.

int getch ()
 Returns a single character from the buffer as an int.

void putch (int ch)
 Puts a single character into the buffer as an int.

int peekch (int offset=0)
 Peeks a single character from the buffer as an int.

size_t strchr (int ch)
 Returns the number of characters that would have to be read to find the first instance of the character.

size_t match (const void *bytelist, size_t numbytes)
 Returns the number of leading buffer elements that match any of those in the list.

size_t match (const char *chlist)
 Returns the number of leading buffer elements that match any of those in the list.

size_t notmatch (const void *bytelist, size_t numbytes)
 Returns the number of leading buffer elements that do not match any of those in the list.

size_t notmatch (const char *chlist)
 Returns the number of leading buffer elements that do not match any of those in the list.

void put (unsigned char value)
void put (const void *data, size_t count)
void move (void *data, size_t count)
void poke (void *data, int offset, size_t count)
WvBufStoregetstore ()
 Returns a pointer to the underlying storage class object.

bool isreadable () const
 Returns true if the buffer supports reading.

size_t used () const
 Returns the number of elements in the buffer currently available for reading.

const unsignedget (size_t count)
 Reads exactly the specified number of elements and returns a pointer to a storage location owned by the buffer.

unsigned get ()
 Reads the next element from the buffer.

void skip (size_t count)
 Skips exactly the specified number of elements.

size_t optgettable () const
 Returns the optimal maximum number of elements in the buffer currently available for reading without incurring significant overhead.

void unget (size_t count)
 Ungets exactly the specified number of elements by returning them to the buffer for subsequent reads.

size_t ungettable () const
 Returns the maximum number of elements that may be ungotten at this time.

const unsignedpeek (int offset, size_t count)
 Returns a const pointer into the buffer at the specified offset to the specified number of elements without actually adjusting the current get() index.

unsigned peek (int offset=0)
 Returns the element at the specified offset in the buffer.

size_t peekable (int offset)
size_t optpeekable (int offset)
void zap ()
 Clears the buffer.

void move (unsigned *buf, size_t count)
 Efficiently copies the specified number of elements from the buffer to the specified UNINITIALIZED storage location and removes the elements from the buffer.

void copy (unsigned *buf, int offset, size_t count)
 Efficiently copies the specified number of elements from the buffer to the specified UNINITIALIZED storage location but does not remove the elements from the buffer.

bool iswritable () const
 Returns true if the buffer supports writing.

size_t free () const
 Returns the number of elements that the buffer can currently accept for writing.

unsignedalloc (size_t count)
 Allocates exactly the specified number of elements and returns a pointer to an UNINITIALIZED storage location owned by the buffer.

size_t optallocable () const
 Returns the optimal maximum number of elements that the buffer can currently accept for writing without incurring significant overhead.

void unalloc (size_t count)
 Unallocates exactly the specified number of elements by removing them from the buffer and releasing their storage.

size_t unallocable () const
 Returns the maximum number of elements that may be unallocated at this time.

unsignedmutablepeek (int offset, size_t count)
 Returns a non-const pointer info the buffer at the specified offset to the specified number of elements without actually adjusting the current get() index.

void put (const unsigned *data, size_t count)
 Writes the specified number of elements from the specified storage location into the buffer at its tail.

void put (unsigned &value)
 Writes the element into the buffer at its tail.

void poke (const unsigned *data, int offset, size_t count)
 Efficiently copies the specified number of elements from the specified storage location into the buffer at a particular offset.

void poke (unsigned &value, int offset)
 Writes the element into the buffer at the specified offset.

void merge (Buffer &inbuf, size_t count)
 Efficiently moves count bytes from the specified buffer into this one.

void merge (Buffer &inbuf)
 Efficiently merges the entire contents of a buffer into this one.


Protected Types

typedef unsigned Elem
typedef WvBufBase< unsignedBuffer

Protected Attributes

WvBufStorestore


Member Typedef Documentation

typedef WvBufBase<unsigned > WvBufBaseCommonImpl< unsigned >::Buffer [protected, inherited]
 

Definition at line 40 of file wvbufbase.h.

typedef unsigned WvBufBaseCommonImpl< unsigned >::Elem [protected, inherited]
 

Definition at line 39 of file wvbufbase.h.


Member Function Documentation

unsigned * WvBufBaseCommonImpl< unsigned >::alloc size_t  count  )  [inline, inherited]
 

Allocates exactly the specified number of elements and returns a pointer to an UNINITIALIZED storage location owned by the buffer.

The pointer is only valid until the next non-const buffer member is called. eg. alloc(size_t)

If count == 0, a NULL pointer may be returned.

It is an error for count to be greater than free().

For best results, call this function multiple times with count no greater than optallocable() each time.

After this operation, at least count elements may be unallocated.

"count" is the number of elements Returns: the element storage pointer

Definition at line 376 of file wvbufbase.h.

Referenced by WvXOREncoder::_encode(), WvTripleDESEncoder::_encode(), WvRSAEncoder::_encode(), WvRateAdjust::_encode(), WvBlowfishEncoder::_encode(), and WvStream::continue_read().

void WvBufBaseCommonImpl< unsigned >::copy unsigned buf,
int  offset,
size_t  count
[inline, inherited]
 

Efficiently copies the specified number of elements from the buffer to the specified UNINITIALIZED storage location but does not remove the elements from the buffer.

It is an error for count to be greater than peekable(offset).

For maximum efficiency, choose as large a count as possible.

The pointer buf may be NULL only if count == 0.

"buf" is the buffer that will receive the elements "offset" is the buffer offset "count" is the number of elements

Definition at line 327 of file wvbufbase.h.

size_t WvBufBaseCommonImpl< unsigned >::free  )  const [inline, inherited]
 

Returns the number of elements that the buffer can currently accept for writing.

Returns: the number of elements

Definition at line 350 of file wvbufbase.h.

Referenced by WvBackslashDecoder::_encode(), WvBackslashEncoder::_encode(), WvStream::continue_read(), and WvStream::read().

unsigned WvBufBaseCommonImpl< unsigned >::get  )  [inline, inherited]
 

Reads the next element from the buffer.

It is an error to invoke this method if used() == 0.

After this operation, at least 1 element may be ungotten.

Returns: the element

Definition at line 269 of file wvbufbase.h.

const unsigned * WvBufBaseCommonImpl< unsigned >::get size_t  count  )  [inline, inherited]
 

Reads exactly the specified number of elements and returns a pointer to a storage location owned by the buffer.

The pointer is only valid until the next non-const buffer member is called. eg. alloc(size_t)

If count == 0, a NULL pointer may be returned.

It is an error for count to be greater than used().

For maximum efficiency, call this function multiple times with count no greater than optgettable() each time.

After this operation, at least count elements may be ungotten.

Definition at line 113 of file wvbufbase.h.

Referenced by WvXOREncoder::_encode(), WvTripleDESEncoder::_encode(), WvRSAEncoder::_encode(), WvRateAdjust::_encode(), WvHMACDigest::_encode(), WvEVPMDDigest::_encode(), WvCounterModeEncoder::_encode(), WvBlowfishEncoder::_encode(), WvBackslashDecoder::_encode(), WvBackslashEncoder::_encode(), WvDiffieHellman::create_secret(), WvStream::write(), wv_deserialize_scalar(), and wvtcl_getword().

int WvBufBase< unsigned char >::getch  )  [inline]
 

Returns a single character from the buffer as an int.

The same constraints apply as for get(1).

Returns: the character

Definition at line 66 of file wvbuf.h.

References WvBufBaseCommonImpl< T >::get().

Referenced by WvWordWrapEncoder::_encode(), WvHexDecoder::_encode(), WvHexEncoder::_encode(), WvBase64Decoder::_encode(), WvBase64Encoder::_encode(), and getint_le().

WvBufStore* WvBufBaseCommonImpl< unsigned >::getstore  )  [inline, inherited]
 

Returns a pointer to the underlying storage class object.

Returns: the low-level storage class object pointer, non-null

Definition at line 69 of file wvbufbase.h.

WvString WvBufBase< unsigned char >::getstr size_t  len  ) 
 

Returns the first len characters in the buffer.

This is equivalent to doing a get(len), but returns it as a WvString instead of as an unsigned char *.

Definition at line 44 of file wvbuffer.cc.

References WvString::edit(), WvBufBaseCommonImpl< T >::move(), and WvFastString::setsize().

WvString WvBufBase< unsigned char >::getstr  ) 
 

Returns the entire buffer as a null-terminated WvString.

If the buffer contains null characters, they will seem to prematurely terminate the string.

After this operation, ungettable() >= length of the string.

Returns: the buffer contents as a string

Definition at line 26 of file wvbuffer.cc.

References WvString::edit(), WvBufBaseCommonImpl< T >::move(), WvFastString::setsize(), and WvBufBaseCommonImpl< T >::used().

bool WvBufBaseCommonImpl< unsigned >::isreadable  )  const [inline, inherited]
 

Returns true if the buffer supports reading.

Returns: true if reading is supported

Definition at line 81 of file wvbufbase.h.

bool WvBufBaseCommonImpl< unsigned >::iswritable  )  const [inline, inherited]
 

Returns true if the buffer supports writing.

Returns: true if writing is supported

Definition at line 339 of file wvbufbase.h.

size_t WvBufBase< unsigned char >::match const char *  chlist  )  [inline]
 

Returns the number of leading buffer elements that match any of those in the list.

"chlist" is a string of characters to search for Returns: the number of leading buffer elements that match

Definition at line 115 of file wvbuf.h.

size_t WvBufBase< unsigned char >::match const void *  bytelist,
size_t  numbytes
[inline]
 

Returns the number of leading buffer elements that match any of those in the list.

"bytelist" is the list bytes to search for "numbytes" is the number of bytes in the list Returns: the number of leading buffer elements that match

Definition at line 106 of file wvbuf.h.

void WvBufBaseCommonImpl< unsigned >::merge Buffer inbuf  )  [inline, inherited]
 

Efficiently merges the entire contents of a buffer into this one.

"inbuf" is the buffer from which to read

Definition at line 565 of file wvbufbase.h.

void WvBufBaseCommonImpl< unsigned >::merge Buffer inbuf,
size_t  count
[inline, inherited]
 

Efficiently moves count bytes from the specified buffer into this one.

In some cases, this may be a zero-copy operation.

It is an error for count to be greater than inbuf.used().

For maximum efficiency, choose as large a count as possible.

After this operation, an indeterminate number of elements may be ungotten from inbuf.

"inbuf" is the buffer from which to read "count" is the number of elements

Definition at line 555 of file wvbufbase.h.

Referenced by WvEncoderChain::_encode(), WvPassthroughEncoder::_encode(), WvEncoderChain::_finish(), WvDeserialize< WvBuf * >::go(), and WvStream::read().

void WvBufBaseCommonImpl< unsigned >::move unsigned buf,
size_t  count
[inline, inherited]
 

Efficiently copies the specified number of elements from the buffer to the specified UNINITIALIZED storage location and removes the elements from the buffer.

It is an error for count to be greater than used().

For maximum efficiency, choose as large a count as possible.

The pointer buf may be NULL only if count == 0.

After this operation, an indeterminate number of elements may be ungotten.

"buf" is the buffer that will receive the elements "count" is the number of elements

Definition at line 306 of file wvbufbase.h.

void WvBufBase< unsigned char >::move void *  data,
size_t  count
[inline]
 

Definition at line 144 of file wvbuf.h.

References WvBufBaseCommonImpl< T >::move().

unsigned * WvBufBaseCommonImpl< unsigned >::mutablepeek int  offset,
size_t  count
[inline, inherited]
 

Returns a non-const pointer info the buffer at the specified offset to the specified number of elements without actually adjusting the current get() index.

Other than the fact that the returned storage is mutable, operates identically to peek(int, size_t).

"offset" is the buffer offset "count" is the number of elements Returns: the element storage pointer

Definition at line 458 of file wvbufbase.h.

Referenced by WvCounterModeEncoder::_encode().

size_t WvBufBase< unsigned char >::notmatch const char *  chlist  )  [inline]
 

Returns the number of leading buffer elements that do not match any of those in the list.

"chlist" is a string of characters to search for Returns: the number of leading buffer elements that don't match

Definition at line 134 of file wvbuf.h.

size_t WvBufBase< unsigned char >::notmatch const void *  bytelist,
size_t  numbytes
[inline]
 

Returns the number of leading buffer elements that do not match any of those in the list.

"bytelist" is the list bytes to search for "numbytes" is the number of bytes in the list Returns: the number of leading buffer elements that don't match

Definition at line 125 of file wvbuf.h.

size_t WvBufBaseCommonImpl< unsigned >::optallocable  )  const [inline, inherited]
 

Returns the optimal maximum number of elements that the buffer can currently accept for writing without incurring significant overhead.

Invariants:

Returns: the number of elements

Definition at line 394 of file wvbufbase.h.

size_t WvBufBaseCommonImpl< unsigned >::optgettable  )  const [inline, inherited]
 

Returns the optimal maximum number of elements in the buffer currently available for reading without incurring significant overhead.

Invariants:

Returns: the number of elements

Definition at line 151 of file wvbufbase.h.

Referenced by WvXOREncoder::_encode(), WvHMACDigest::_encode(), WvEVPMDDigest::_encode(), WvCounterModeEncoder::_encode(), WvBackslashDecoder::_encode(), and WvBackslashEncoder::_encode().

size_t WvBufBaseCommonImpl< unsigned >::optpeekable int  offset  )  [inline, inherited]
 

Definition at line 233 of file wvbufbase.h.

Referenced by WvCounterModeEncoder::_encode().

unsigned WvBufBaseCommonImpl< unsigned >::peek int  offset = 0  )  [inline, inherited]
 

Returns the element at the specified offset in the buffer.

It is an error to invoke this method if used() == 0.

"offset" is the offset, default 0 Returns: the element

Definition at line 283 of file wvbufbase.h.

const unsigned * WvBufBaseCommonImpl< unsigned >::peek int  offset,
size_t  count
[inline, inherited]
 

Returns a const pointer into the buffer at the specified offset to the specified number of elements without actually adjusting the current get() index.

The pointer is only valid until the next non-const buffer member is called. eg. alloc(size_t)

If count == 0, a NULL pointer may be returned.

If offset is greater than zero, then elements will be returned beginning with the with the offset'th element that would be returned by get(size_t).

If offset equals zero, then elements will be returned beginning with the next one available for get(size_t).

If offset is less than zero, then elements will be returned beginning with the first one that would be returned on a get(size_t) following an unget(-offset).

It is an error for count to be greater than peekable(offset).

For maximum efficiency, call this function multiple times with count no greater than that returned by optpeekable(size_t) at incremental offsets.

"offset" is the buffer offset "count" is the number of elements Returns: the element storage pointer

Definition at line 222 of file wvbufbase.h.

Referenced by WvOakleyAuth::create_secret(), and WvDiffieHellman::create_secret().

size_t WvBufBaseCommonImpl< unsigned >::peekable int  offset  )  [inline, inherited]
 

Definition at line 228 of file wvbufbase.h.

int WvBufBase< unsigned char >::peekch int  offset = 0  )  [inline]
 

Peeks a single character from the buffer as an int.

The same constraints apply as for peek(offset, 1).

"offset" is the offset Returns: the character

Definition at line 87 of file wvbuf.h.

References WvBufBaseCommonImpl< T >::peek().

void WvBufBaseCommonImpl< unsigned >::poke unsigned value,
int  offset
[inline, inherited]
 

Writes the element into the buffer at the specified offset.

It is an error to invoke this method if free() == 0.

After this operation, at least 1 element may be unallocated.

"value" is the element "offset" is the buffer offset

Definition at line 532 of file wvbufbase.h.

void WvBufBaseCommonImpl< unsigned >::poke const unsigned data,
int  offset,
size_t  count
[inline, inherited]
 

Efficiently copies the specified number of elements from the specified storage location into the buffer at a particular offset.

If offset <= used() and offset + count > used(), the remaining data is simply tacked onto the end of the buffer with put().

It is an error for count to be greater than free() - offset.

"data" is the buffer that contains the elements "count" is the number of elements "offset" is the buffer offset, default 0

Definition at line 501 of file wvbufbase.h.

void WvBufBase< unsigned char >::poke void *  data,
int  offset,
size_t  count
[inline]
 

Definition at line 147 of file wvbuf.h.

References WvBufBaseCommonImpl< T >::poke().

void WvBufBaseCommonImpl< unsigned >::put unsigned value  )  [inline, inherited]
 

Writes the element into the buffer at its tail.

It is an error to invoke this method if free() == 0.

After this operation, at least 1 element may be unallocated.

"valid" is the element

Definition at line 516 of file wvbufbase.h.

void WvBufBaseCommonImpl< unsigned >::put const unsigned data,
size_t  count
[inline, inherited]
 

Writes the specified number of elements from the specified storage location into the buffer at its tail.

It is an error for count to be greater than free().

For maximum efficiency, choose as large a count as possible.

The pointer buf may be NULL only if count == 0.

After this operation, at least count elements may be unallocated.

"data" is the buffer that contains the elements "count" is the number of elements

Definition at line 480 of file wvbufbase.h.

void WvBufBase< unsigned char >::put const void *  data,
size_t  count
[inline]
 

Definition at line 141 of file wvbuf.h.

References WvBufBaseCommonImpl< T >::put().

void WvBufBase< unsigned char >::put unsigned char  value  )  [inline]
 

Definition at line 139 of file wvbuf.h.

References WvBufBaseCommonImpl< T >::put().

Referenced by WvBackslashEncoder::_encode(), WvHMACDigest::_finish(), WvEVPMDDigest::_finish(), _wv_serialize(), WvDiffieHellman::create_secret(), WvOakleyAuth::get_other_public_key(), WvDiffieHellman::get_public_value(), and wv_serialize_scalar().

void WvBufBase< unsigned char >::putch int  ch  )  [inline]
 

Puts a single character into the buffer as an int.

The same constraints apply as for alloc(1).

"ch" is the character

Definition at line 76 of file wvbuf.h.

References WvBufBaseCommonImpl< T >::put().

Referenced by WvWordWrapEncoder::_encode(), WvHexDecoder::_encode(), WvHexEncoder::_encode(), WvBase64Decoder::_encode(), WvBase64Encoder::_encode(), WvBackslashEncoder::_encode(), WvBase64Encoder::_finish(), and putint_le().

void WvBufBase< unsigned char >::putstr WVSTRING_FORMAT_DECL   )  [inline]
 

Definition at line 34 of file wvbuf.h.

References WVSTRING_FORMAT_CALL.

void WvBufBase< unsigned char >::putstr WvStringParm  str  ) 
 

Copies a WvString into the buffer, excluding the null-terminator.

"str" is the string

Definition at line 20 of file wvbuffer.cc.

References WvFastString::cstr(), WvFastString::len(), WvBufBaseCommonImpl< T >::put(), and WvStringParm.

Referenced by _wv_serialize().

void WvBufBaseCommonImpl< unsigned >::skip size_t  count  )  [inline, inherited]
 

Skips exactly the specified number of elements.

This is equivalent to invoking get(size_t) with the count and discarding the result, but may be faster for certain types of buffers. As with get(size_t), the call may be followed up by an unget(size_t).

"count" is the number of elements

Definition at line 133 of file wvbufbase.h.

size_t WvBufBase< unsigned char >::strchr int  ch  ) 
 

Returns the number of characters that would have to be read to find the first instance of the character.

"ch" is the character Returns: the number of bytes, or zero if the character is not in the buffer

Definition at line 55 of file wvbuffer.cc.

References WvBufBaseCommonImpl< T >::optpeekable(), WvBufBaseCommonImpl< T >::peek(), and WvBufBaseCommonImpl< T >::used().

void WvBufBaseCommonImpl< unsigned >::unalloc size_t  count  )  [inline, inherited]
 

Unallocates exactly the specified number of elements by removing them from the buffer and releasing their storage.

This operation may always be safely performed with count less than or equal to that specified in the last alloc(size_t) or put(const T*, size_t) if no non-const buffer members have been called since then.

If count == 0, nothing happens.

It is an error for count to be greater than unallocable().

"count" is the number of elements

Definition at line 418 of file wvbufbase.h.

Referenced by WvRSAEncoder::_encode(), WvRateAdjust::_encode(), WvCounterModeEncoder::_encode(), and WvStream::continue_read().

size_t WvBufBaseCommonImpl< unsigned >::unallocable  )  const [inline, inherited]
 

Returns the maximum number of elements that may be unallocated at this time.

For all practical purposes, this number will always be at least as large as the amount currently in use. It is provided primarily for symmetry, but also to handle cases where buffer reading (hence used()) is not supported by the implementation.

Invariants:

Returns: the number of elements

Definition at line 440 of file wvbufbase.h.

void WvBufBaseCommonImpl< unsigned >::unget size_t  count  )  [inline, inherited]
 

Ungets exactly the specified number of elements by returning them to the buffer for subsequent reads.

This operation may always be safely performed with count less than or equal to that specified in the last get(size_t) if no non-const buffer members have been called since then.

If count == 0, nothing happens.

It is an error for count to be greater than ungettable().

"count" is the number of elements

Definition at line 174 of file wvbufbase.h.

Referenced by WvGzipEncoder::_encode(), WvBackslashDecoder::_encode(), WvBackslashEncoder::_encode(), WvStream::write(), and wvtcl_getword().

size_t WvBufBaseCommonImpl< unsigned >::ungettable  )  const [inline, inherited]
 

Returns the maximum number of elements that may be ungotten at this time.

Returns: the number of elements

Definition at line 185 of file wvbufbase.h.

size_t WvBufBaseCommonImpl< unsigned >::used  )  const [inline, inherited]
 

Returns the number of elements in the buffer currently available for reading.

This function could also be called gettable().

Definition at line 92 of file wvbufbase.h.

Referenced by WvWordWrapEncoder::_encode(), WvTripleDESEncoder::_encode(), WvRSAEncoder::_encode(), WvRateAdjust::_encode(), WvHexDecoder::_encode(), WvHexEncoder::_encode(), WvGzipEncoder::_encode(), WvPassthroughEncoder::_encode(), WvCounterModeEncoder::_encode(), WvBlowfishEncoder::_encode(), WvBase64Decoder::_encode(), WvBase64Encoder::_encode(), WvBackslashDecoder::_encode(), WvEncoderChain::_finish(), _wv_serialize(), WvGdbmList< T >::Link::data(), WvEncoder::encode(), WvStream::write(), wv_deserialize_scalar(), and wvtcl_getword().

WvBufBase< unsigned char >::WvBufBase WvBufStore store  )  [inline, explicit]
 

Definition at line 26 of file wvbuf.h.

void WvBufBaseCommonImpl< unsigned >::zap  )  [inline, inherited]
 

Clears the buffer.

For many types of buffers, calling zap() will increased the amount of free space available for writing (see below) by an amount greater than used(). Hence it is wise to zap() a buffer just before writing to it to maximize free space.

After this operation, used() == 0, and often ungettable() == 0.

Definition at line 254 of file wvbufbase.h.

Referenced by WvRSAEncoder::_encode(), and WvNullEncoder::_encode().


Member Data Documentation

WvBufStore* WvBufBaseCommonImpl< unsigned >::store [protected, inherited]
 

Definition at line 42 of file wvbufbase.h.


The documentation for this class was generated from the following files:
Generated on Sat Feb 21 21:05:59 2004 for WvStreams by doxygen 1.3.5