|
BDE 4.14.0 Production release
|
#include <bdlde_utf8checkinginstreambufwrapper.h>
Public Types | |
| enum | { k_SEEK_FAIL = +1 } |
Public Member Functions | |
| BSLMF_NESTED_TRAIT_DECLARATION (Utf8CheckingInStreamBufWrapper, bslma::UsesBslmaAllocator) | |
| Utf8CheckingInStreamBufWrapper () | |
| Utf8CheckingInStreamBufWrapper (bslma::Allocator *basicAllocator) | |
| Utf8CheckingInStreamBufWrapper (bsl::streambuf *streamBuf, bslma::Allocator *basicAllocator=0) | |
| ~Utf8CheckingInStreamBufWrapper () BSLS_KEYWORD_OVERRIDE | |
| Destroy this object. | |
| void | reset (bsl::streambuf *streamBuf) |
| int | errorStatus () const |
| bool | isValid () const |
Static Public Member Functions | |
| static const char * | toAscii (int errorStatus) |
Protected Member Functions | |
| int_type | overflow (int_type=traits_type::eof()) BSLS_KEYWORD_OVERRIDE |
| bsl::streamsize | showmanyc () BSLS_KEYWORD_OVERRIDE |
| int_type | underflow () BSLS_KEYWORD_OVERRIDE |
| void | imbue (const bsl::locale &locale) BSLS_KEYWORD_OVERRIDE |
| int_type | pbackfail (int_type c=traits_type::eof()) BSLS_KEYWORD_OVERRIDE |
| pos_type | seekoff (off_type offset, bsl::ios_base::seekdir whence, bsl::ios_base::openmode mode) BSLS_KEYWORD_OVERRIDE |
| pos_type | seekpos (pos_type offset, bsl::ios_base::openmode mode) BSLS_KEYWORD_OVERRIDE |
| bsl::streamsize | xsgetn (char *buffer, bsl::streamsize numBytes) BSLS_KEYWORD_OVERRIDE |
| bsl::streamsize | xsputn (const char *, bsl::streamsize) BSLS_KEYWORD_OVERRIDE |
This class inherits from bsl::streambuf, and holds and wraps another streambuf. It forwards input through the held streambuf, and checks for invalid UTF-8. The wrapping object does not support ouput, only input. If the held streambuf supports seeking, seeks are supported, though not forward seeks, and pubseekoff(0, bsl::ios_base::cur) is supported whether the wrapped streambuf supports seeking or not.
| bdlde::Utf8CheckingInStreamBufWrapper::Utf8CheckingInStreamBufWrapper | ( | ) |
|
explicit |
Create a Utf8StreamBufInputWrapper object having no associated streambuf. Optionally specify a basicAllocator used to supply memory. If basicAllocator is 0 or not specified, the currently installed default allocator is used.
|
explicit |
Create a Utf8StreamBufInputWrapper associated with the specified streamBuf. Optionally specify a basicAllocator used to supply memory. If basicAllocator is 0, the currently installed default allocator is used.
| bdlde::Utf8CheckingInStreamBufWrapper::~Utf8CheckingInStreamBufWrapper | ( | ) |
| bdlde::Utf8CheckingInStreamBufWrapper::BSLMF_NESTED_TRAIT_DECLARATION | ( | Utf8CheckingInStreamBufWrapper | , |
| bslma::UsesBslmaAllocator | |||
| ) |
|
inline |
Return the current error mode of this object. This will be either 0 (no errors or end of data), k_SEEK_FAIL, which is positive, or a value from Utf8Util::ErrorStatus, which are all negative.
|
protected |
If sb is the name of the streambuf held by this object, set sb to the specified locale as though sb.pubimbue(locale) had been called. If this object does not hold a streambuf, this method has no effect. Note that this function is forwarded to by the public method pubimbue in the base class.
|
inline |
Return true if this wrapper currently holds a streambuf and is not in a failed seek state.
|
protected |
Unconditionally return traits_type::eof(). The optionally specified argument is ignored.
|
protected |
Back up input one byte. Return the byte at the new position, or eof with the state of this object unchanged on failure. If the optionally specified c is not eof, substitute c for the previous byte and return that value. If c is eof, do not substitute it for the previous byte and return the byte was there, or if the previous byte is unknown, fail. If values of c that are not eof are specified, this function will succeed for at least 8 successive calls, possibly many more times. The behavior is undefined unless c is either eof or a value representable as a char_type . Note that this is forwarded to with a char_type passed to c by the public method sputbackc in the base class, and called with eof passed to c by the public method sungetc in the base class.
| void bdlde::Utf8CheckingInStreamBufWrapper::reset | ( | bsl::streambuf * | streamBuf | ) |
Associate this object with the specified streamBuf, releasing any previously held streambuf.
|
protected |
Move the position associated with this object according to the specified offset and whence:
whence is bsl::ios_base::beg, set the position to offset bytes from the beginning.whence is bsl::ios_base::cur, advance the position by offset bytes (note that offset is signed).whence == bsl::ios_base::end is unsupported and a seek fail will result.A seek can fail if
streambuf,whence is not bsl::ios_base::beg or bsl::ios_base::cur,streambuf is necessary and that streambuf does not support seeking,which will put the object into a failed seek state. When the object is in a failed seek state, errorStatus() will equal k_SEEK_FAIL and the object will no longer have a valid position, meaning that input and relative seeks will fail, until the object is made to recover by either calling reset or an absolute seek to position 0.
If a seek is performed on the held streambuf, the specified mode will be propagated to it. The behavior is undefined unless bsl::ios_base::in is set in mode. Note that this function is forwarded to by the public method pubseekoff in the base class.
seekoff(0, bsl::ios_base::cur, mode) is permissible whether the held streambuf is seekable or not and will never result in a seek on the held streambuf, returning the position in terms of the held streambuf if that streambuf is seekable and returning the position relative to when the held streambuf was bound to this object otherwise.
Some non-zero seeks will be performed without a seek on the held streambuf, but there is no simple way for the client to predict when this will be the case.
|
protected |
Set the position of this object to the specified absolute offset. If a seek on the held streambuf occurs, the specified mode is passed to it. This function delegates to seekoff(offset, bsl::ios_base::beg, mode), see that function for further detail. The behavior is undefined unless bsl::ios_base::in is set in mode. Note that this function is forwarded to by the public method pubseekpos in the base class.
|
protected |
Return the number of bytes that are guaranteed that can be read before underflow returns eof. If the object is not in a valid state, -1 will be returned. Note that often, the actual number of bytes that can be read will be much greater than the value returned by this function.
|
static |
Return a description of the specified errorStatus. Note that errorStatus is either:
k_SEEK_FAILUtf8Util::ErrorStatus, which are all negative, in the case of invalid UTF-8.NO_ERROR will be returned. Note that this includes the case where end of file has been reached without any error occurring.errorStatus is an invalid value, "(* unrecognized value *)" will be returned.
|
protected |
Replenish the input buffer with data obtained from the held streambuf, and return the next byte of input (or eof if no input is available). This function assumes that either the input buffer is empty or that the end of it has been reached. If this object is not in a valid state, eof will be returned.
|
protected |
Read up to the specified numBytes characters from this object to the specified buffer and return the number of characters successfully read. A return value of 0 means that either a UTF-8 error or end of file has been encountered (errorStatus must be called to distinguish between the two), but a non-zero return value less than numBytes will usually be returned when neither end of file nor a UTF-8 error has been encountered. The behavior is undefined unless 4 <= numBytes. Note that this function is forwarded to by the public method sgetn in the base class.
|
protected |
Output function, not supported in this input-only implementation; stubbed out, arguments ignored, returns 0. Note that this function is forwarded to by sputn in the base class.