8#ifndef INCLUDED_BSLX_TESTINSTREAM
9#define INCLUDED_BSLX_TESTINSTREAM
379#include <bslscm_version.h>
390#include <bsl_cstddef.h>
391#include <bsl_iosfwd.h>
392#include <bsl_string.h>
393#include <bsl_vector.h>
416 const char *d_buffer;
418 bsl::size_t d_numBytes;
427 bsl::size_t d_cursor;
477 bsl::size_t numExpectedBytes);
484 void throwExceptionIfInputLimitExhausted(
const TypeCode::Enum& code);
556 void reset(
const char *buffer, bsl::size_t numBytes);
568 void seek(bsl::size_t offset);
1138 operator const void *()
const;
1141 bsl::size_t
cursor()
const;
1146 const char *
data()
const;
1170 bsl::size_t
length()
const;
1184template <
class TYPE>
1193#ifdef BDE_BUILD_TARGET_EXC
1203class TestInStream_ProxyBase {
1206 virtual ~TestInStream_ProxyBase()
1211 virtual void setInputLimit(
int limit)
const = 0;
1220template <
class BSLX_STREAM_TYPE>
1221class TestInStream_Proxy:
public TestInStream_ProxyBase {
1224 BSLX_STREAM_TYPE *d_stream_p;
1229 TestInStream_Proxy(BSLX_STREAM_TYPE *stream)
1230 : d_stream_p(stream)
1241 d_stream_p->setInputLimit(limit);
1247template <
class BSLX_STREAM_TYPE>
1249TestInStream_Proxy<BSLX_STREAM_TYPE>
1250TestInStream_getProxy(BSLX_STREAM_TYPE *stream)
1252 return TestInStream_Proxy<BSLX_STREAM_TYPE>(stream);
1257#ifndef BSLX_TESTINSTREAM_EXCEPTION_TEST_BEGIN
1258#define BSLX_TESTINSTREAM_EXCEPTION_TEST_BEGIN(BSLX_TESTINSTREAM) \
1260 const bslx::TestInStream_ProxyBase& testInStream = \
1261 bslx::TestInStream_getProxy(&BSLX_TESTINSTREAM); \
1263 static int firstTime = 1; \
1264 if (veryVerbose && firstTime) bsl::cout << \
1265 "### BSLX EXCEPTION TEST -- (ENABLED) --" << '\n'; \
1268 if (veryVeryVerbose) bsl::cout << \
1269 "### Begin BSLX exception test." << '\n'; \
1270 int bslxExceptionCounter = 0; \
1271 static int bslxExceptionLimit = 100; \
1272 testInStream.setInputLimit(bslxExceptionCounter); \
1279#ifndef BSLX_TESTINSTREAM_EXCEPTION_TEST_BEGIN
1280#define BSLX_TESTINSTREAM_EXCEPTION_TEST_BEGIN(testInStream) \
1282 static int firstTime = 1; \
1283 if (verbose && firstTime) { \
1284 bsl::cout << "### BSLX EXCEPTION TEST -- (NOT ENABLED) --" << '\n'; \
1296#ifdef BDE_BUILD_TARGET_EXC
1298#ifndef BSLX_TESTINSTREAM_EXCEPTION_TEST_END
1299#define BSLX_TESTINSTREAM_EXCEPTION_TEST_END \
1300 } catch (bslx::TestInStreamException& e) { \
1301 if ((veryVerbose && bslxExceptionLimit) || veryVeryVerbose) \
1303 --bslxExceptionLimit; \
1304 bsl::cout << "(" << bslxExceptionCounter << ')'; \
1305 if (veryVeryVerbose) { \
1306 bsl::cout << " BSLX EXCEPTION: " \
1307 << "input limit = " \
1308 << bslxExceptionCounter \
1310 << "last data type = " \
1313 else if (0 == bslxExceptionLimit) { \
1314 bsl::cout << " [ Note: 'bslxExceptionLimit' reached. ]"; \
1316 bsl::cout << '\n'; \
1318 testInStream.setInputLimit(++bslxExceptionCounter); \
1321 testInStream.setInputLimit(-1); \
1324 if (veryVeryVerbose) { \
1325 bsl::cout << "### End BSLX exception test." << '\n'; \
1332#ifndef BSLX_TESTINSTREAM_EXCEPTION_TEST_END
1333#define BSLX_TESTINSTREAM_EXCEPTION_TEST_END
1350void TestInStream::throwExceptionIfInputLimitExhausted(
1353#ifdef BDE_BUILD_TARGET_EXC
1354 if (0 <= d_inputLimit) {
1356 if (0 > d_inputLimit) {
1357 throw TestInStreamException(code);
1369 d_validFlag =
false;
1385 d_numBytes = numBytes;
1393 d_buffer = srcData.
data();
1394 d_numBytes = srcData.
length();
1411 d_inputLimit = limit;
1417 d_quietFlag = flagValue;
1422TestInStream::operator
const void *()
const
1424 return isValid() ? this : 0;
1436 return d_numBytes ? d_buffer : 0;
1442 return d_inputLimit;
1469template <
class TYPE>
Definition bslstl_string.h:1252
Definition bslstl_stringref.h:374
const CHAR_TYPE * data() const
Definition bslstl_stringref.h:962
size_type length() const
Definition bslstl_stringref.h:984
Definition bslx_testinstream.h:413
TestInStream(const bslstl::StringRef &srcData)
Create a test input stream containing the specified srcData.
TestInStream & getUint64(bsls::Types::Uint64 &variable)
void reset()
Definition bslx_testinstream.h:1373
TestInStream & getArrayFloat64(double *variables, int numVariables)
TestInStream & getInt56(bsls::Types::Int64 &variable)
TestInStream & getInt24(int &variable)
TestInStream & getArrayUint8(unsigned char *variables, int numVariables)
TestInStream & getArrayFloat32(float *variables, int numVariables)
friend bsl::ostream & operator<<(bsl::ostream &, const TestInStream &)
TestInStream & getLength(int &variable)
TestInStream & getArrayUint32(unsigned int *variables, int numVariables)
TestInStream & getArrayInt8(signed char *variables, int numVariables)
TestInStream & getString(bsl::string &variable)
bool isQuiet() const
Return true if this stream's quiet mode is ON, and false otherwise.
Definition bslx_testinstream.h:1452
TestInStream & getFloat32(float &variable)
TestInStream & getArrayUint40(bsls::Types::Uint64 *variables, int numVariables)
TestInStream & getInt64(bsls::Types::Int64 &variable)
TestInStream & getUint16(unsigned short &variable)
TestInStream & getArrayUint8(char *variables, int numVariables)
void invalidate()
Definition bslx_testinstream.h:1367
bool isEmpty() const
Definition bslx_testinstream.h:1446
TestInStream(const char *buffer, bsl::size_t numBytes)
TestInStream & getArrayUint64(bsls::Types::Uint64 *variables, int numVariables)
TestInStream & getInt40(bsls::Types::Int64 &variable)
bsl::size_t length() const
Return the total number of bytes stored in the external memory buffer.
Definition bslx_testinstream.h:1464
TestInStream & getInt48(bsls::Types::Int64 &variable)
TestInStream & getUint32(unsigned int &variable)
TestInStream & getArrayUint48(bsls::Types::Uint64 *variables, int numVariables)
TestInStream & getArrayUint56(bsls::Types::Uint64 *variables, int numVariables)
int inputLimit() const
Definition bslx_testinstream.h:1440
~TestInStream()
Destroy this test input stream.
TestInStream & getUint40(bsls::Types::Uint64 &variable)
TestInStream & getInt32(int &variable)
TestInStream & getVersion(int &variable)
TestInStream & getArrayInt16(short *variables, int numVariables)
TestInStream & getArrayInt56(bsls::Types::Int64 *variables, int numVariables)
TestInStream & getArrayInt32(int *variables, int numVariables)
TestInStream & getArrayInt48(bsls::Types::Int64 *variables, int numVariables)
TestInStream & getArrayInt8(char *variables, int numVariables)
TestInStream & getArrayInt40(bsls::Types::Int64 *variables, int numVariables)
TestInStream & getUint8(unsigned char &variable)
TestInStream & getArrayInt64(bsls::Types::Int64 *variables, int numVariables)
void seek(bsl::size_t offset)
Definition bslx_testinstream.h:1400
void setInputLimit(int limit)
Definition bslx_testinstream.h:1409
TestInStream & getArrayInt24(int *variables, int numVariables)
bool isValid() const
Definition bslx_testinstream.h:1458
const char * data() const
Definition bslx_testinstream.h:1434
TestInStream & getArrayUint16(unsigned short *variables, int numVariables)
bsl::size_t cursor() const
Return the index of the next byte to be extracted from this stream.
Definition bslx_testinstream.h:1428
TestInStream & getUint8(char &variable)
TestInStream & getUint56(bsls::Types::Uint64 &variable)
TestInStream & getInt16(short &variable)
TestInStream & getArrayUint24(unsigned int *variables, int numVariables)
TestInStream & getInt8(char &variable)
TestInStream & getUint48(bsls::Types::Uint64 &variable)
TestInStream & getFloat64(double &variable)
void setQuiet(bool flagValue)
Definition bslx_testinstream.h:1415
TestInStream & getUint24(unsigned int &variable)
TestInStream & getInt8(signed char &variable)
#define BSLS_ASSERT_SAFE(X)
Definition bsls_assert.h:1917
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
#define BSLS_KEYWORD_OVERRIDE
Definition bsls_keyword.h:695
STREAM & bdexStreamIn(STREAM &stream, VALUE_TYPE &variable)
Definition bslx_instreamfunctions.h:1263
Definition bslx_byteinstream.h:377
bsl::ostream & operator<<(bsl::ostream &stream, const ByteInStream &object)
ByteInStream & operator>>(ByteInStream &stream, TYPE &value)
Definition bslx_byteinstream.h:2047
unsigned long long Uint64
Definition bsls_types.h:139
long long Int64
Definition bsls_types.h:134
Enum
Definition bslx_typecode.h:158