8#ifndef INCLUDED_BALBER_BERUTIL
9#define INCLUDED_BALBER_BERUTIL
149#include <balscm_version.h>
178#include <bsl_streambuf.h>
179#include <bsl_string.h>
180#include <bsl_string_view.h>
181#include <bsl_vector.h>
204#ifndef BDE_OMIT_INTERNAL_DEPRECATED
218 int *accumNumBytesConsumed);
226 bsl::streambuf *streamBuf,
230 int *accumNumBytesConsumed);
238 static int getLength(bsl::streambuf *streamBuf,
240 int *accumNumBytesConsumed);
250 template <
typename TYPE>
252 bsl::streambuf *streamBuf,
265 template <
typename TYPE>
267 bsl::streambuf *streamBuf,
269 int *accumNumBytesConsumed,
296 static int putLength(bsl::streambuf *streamBuf,
int length);
304 template <
typename TYPE>
305 static int putValue(bsl::streambuf *streamBuf,
357 static int peekChar(
char *value, bsl::streambuf *streamBuf);
372 bsl::streambuf *streamBuf,
379 static int putChars(bsl::streambuf *streamBuf,
404 k_TAG_CLASS_MASK = 0xC0,
405 k_TAG_TYPE_MASK = 0x20,
406 k_TAG_NUMBER_MASK = 0x1F,
412 k_MAX_TAG_NUMBER_IN_ONE_OCTET = 30,
420 k_NUM_VALUE_BITS_IN_TAG_OCTET = 7,
427 k_MAX_TAG_NUMBER_OCTETS =
429 k_NUM_VALUE_BITS_IN_TAG_OCTET +
435 k_CHAR_MSB_MASK = 0x80,
438 k_SEVEN_BITS_MASK = 0x7F
454 int *accumNumBytesConsumed,
455 bsl::streambuf *streamBuf);
493 template <
class INTEGRAL_TYPE>
523 k_INDEFINITE_LENGTH = -1,
527 k_INDEFINITE_LENGTH_OCTET = 0x80,
533 k_LONG_FORM_LENGTH_FLAG_MASK = 0x80,
539 k_LONG_FORM_LENGTH_VALUE_MASK = 0x7F
556 int *accumNumBytesConsumed,
557 bsl::streambuf *streamBuf);
564 bsl::streambuf *streamBuf);
572 static int putLength(bsl::streambuf *streamBuf,
int length);
618 bsl::streambuf *streamBuf,
628 static int putBoolValue(bsl::streambuf *streamBuf,
bool value);
684 template <
class INTEGRAL_TYPE>
693 bsl::streambuf *streamBuf,
706 template <
class INTEGRAL_TYPE>
708 bsl::streambuf *streamBuf,
720 bsl::streambuf *streamBuf);
730 template <
class INTEGRAL_TYPE>
756 template <
class INTEGRAL_TYPE>
804 bsl::streambuf *streamBuf,
817 bsl::streambuf *streamBuf,
830 bsl::streambuf *streamBuf,
842 static int putCharValue(bsl::streambuf *streamBuf,
char value);
862 unsigned char value);
899 k_MAX_MULTI_WIDTH_ENCODING_SIZE = 8,
901 k_BINARY_NEGATIVE_NUMBER_ID = 0xC0,
902 k_BINARY_POSITIVE_NUMBER_ID = 0x80,
904 k_REAL_BINARY_ENCODING = 0x80,
906 k_DOUBLE_EXPONENT_SHIFT = 52,
907 k_DOUBLE_OUTPUT_LENGTH = 10,
908 k_DOUBLE_EXPONENT_MASK_FOR_TWO_BYTES = 0x7FF,
909 k_DOUBLE_NUM_EXPONENT_BITS = 11,
910 k_DOUBLE_NUM_MANTISSA_BITS = 52,
911 k_DOUBLE_NUM_EXPONENT_BYTES = 2,
912 k_DOUBLE_NUM_MANTISSA_BYTES = 7,
913 k_DOUBLE_BIAS = 1023,
915 k_POSITIVE_ZERO_LEN = 0,
916 k_NEGATIVE_ZERO_LEN = 1,
918 k_POSITIVE_INFINITY_ID = 0x40,
919 k_NEGATIVE_INFINITY_ID = 0x41,
921 k_NEGATIVE_ZERO_ID = 0x43,
923 k_DOUBLE_INFINITY_EXPONENT_ID = 0x7FF,
924 k_INFINITY_MANTISSA_ID = 0,
926 k_REAL_SIGN_MASK = 0x40,
927 k_REAL_BASE_MASK = 0x20,
928 k_REAL_SCALE_FACTOR_MASK = 0x0C,
929 k_REAL_EXPONENT_LENGTH_MASK = 0x03,
931 k_BER_RESERVED_BASE = 3,
932 k_REAL_BASE_SHIFT = 4,
933 k_REAL_SCALE_FACTOR_SHIFT = 2,
935 k_REAL_MULTIPLE_EXPONENT_OCTETS = 4
953 static void assembleDouble(
double *value,
964 static void normalizeMantissaAndAdjustExp(
long long *mantissa,
971 static void parseDouble(
int *exponent,
991 bsl::streambuf *streamBuf,
1004 bsl::streambuf *streamBuf,
1020 bsl::streambuf *streamBuf,
1103 static int putChars(bsl::streambuf *streamBuf,
char value,
int numChars);
1123 bsl::streambuf *streamBuf,
1195 template <
class TYPE>
1196 static int getValue(TYPE *value, bsl::streambuf *streamBuf,
int length);
1209 template <
class TYPE>
1210 static int putValue(bsl::streambuf *streamBuf,
1228 bsl::streambuf *streamBuf,
1240 bsl::streambuf *streamBuf,
1252 bsl::streambuf *streamBuf,
1264 bsl::streambuf *streamBuf,
1276 bsl::streambuf *streamBuf,
1288 bsl::streambuf *streamBuf,
1396 bsl::streambuf *streamBuf);
1404 bsl::streambuf *streamBuf);
1566 int d_timezoneOffsetInMinutes;
1677 static bool isReserved(
unsigned char firstByte);
1714 unsigned char firstByte);
1743 unsigned char headerByte0,
1744 unsigned char headerByte1);
1764 unsigned char headerByte0,
1765 unsigned char headerByte1);
1771 bsl::streambuf *streamBuf);
1778 bsl::streambuf *streamBuf,
1779 int timezoneOffsetInMinutes);
1954 k_MAX_COMPACT_BINARY_DATE_LENGTH = 3,
1958 k_MIN_COMPACT_BINARY_DATETZ_LENGTH =
1959 k_MAX_COMPACT_BINARY_DATE_LENGTH + 1,
1964 k_MAX_COMPACT_BINARY_DATETZ_LENGTH = 5
1981 unsigned char firstByte);
1991 static int getIso8601DateValue(
bdlt::Date *value,
1992 bsl::streambuf *streamBuf,
2003 static int getCompactBinaryDateValue(
bdlt::Date *value,
2004 bsl::streambuf *streamBuf,
2015 const BerEncoderOptions *options);
2024 static int putIso8601DateValue(bsl::streambuf *streamBuf,
2026 const BerEncoderOptions *options);
2035 static int putCompactBinaryDateValue(bsl::streambuf *streamBuf,
2037 const BerEncoderOptions *options);
2048 unsigned char firstByte);
2060 bsl::streambuf *streamBuf,
2071 static int getCompactBinaryDateValue(
bdlt::DateTz *value,
2072 bsl::streambuf *streamBuf,
2083 static int getCompactBinaryDateTzValue(
bdlt::DateTz *value,
2084 bsl::streambuf *streamBuf,
2095 const BerEncoderOptions *options);
2104 static int putIso8601DateTzValue(bsl::streambuf *streamBuf,
2106 const BerEncoderOptions *options);
2117 static int putCompactBinaryDateValue(bsl::streambuf *streamBuf,
2119 const BerEncoderOptions *options);
2128 static int putCompactBinaryDateTzValue(bsl::streambuf *streamBuf,
2130 const BerEncoderOptions *options);
2139 static int detectDateOrDateTzEncoding(
2142 unsigned char firstByte);
2153 bsl::streambuf *streamBuf,
2165 bsl::streambuf *streamBuf,
2176 static int getCompactBinaryDateValue(
DateOrDateTz *value,
2177 bsl::streambuf *streamBuf,
2189 static int getCompactBinaryDateTzValue(
DateOrDateTz *value,
2190 bsl::streambuf *streamBuf,
2232 bsl::streambuf *streamBuf,
2264 bsl::streambuf *streamBuf,
2296 bsl::streambuf *streamBuf,
2487 k_EXTENDED_BINARY_TIME_LENGTH =
2493 k_EXTENDED_BINARY_TIMETZ_LENGTH =
2508 k_MIN_COMPACT_BINARY_TIME_LENGTH = 1,
2512 k_MAX_COMPACT_BINARY_TIME_LENGTH = 4,
2516 k_MIN_COMPACT_BINARY_TIMETZ_LENGTH =
2517 k_MAX_COMPACT_BINARY_TIME_LENGTH + 1,
2522 k_MAX_COMPACT_BINARY_TIMETZ_LENGTH = 6
2539 unsigned char firstByte);
2549 static int getIso8601TimeValue(
bdlt::Time *value,
2550 bsl::streambuf *streamBuf,
2561 static int getCompactBinaryTimeValue(
bdlt::Time *value,
2562 bsl::streambuf *streamBuf,
2573 static int getExtendedBinaryTimeValue(
bdlt::Time *value,
2574 bsl::streambuf *streamBuf,
2594 static int putIso8601TimeValue(bsl::streambuf *streamBuf,
2605 static int putCompactBinaryTimeValue(bsl::streambuf *streamBuf,
2616 static int putExtendedBinaryTimeValue(bsl::streambuf *streamBuf,
2629 unsigned char firstByte);
2641 bsl::streambuf *streamBuf,
2652 static int getCompactBinaryTimeValue(
bdlt::TimeTz *value,
2653 bsl::streambuf *streamBuf,
2665 static int getCompactBinaryTimeTzValue(
bdlt::TimeTz *value,
2666 bsl::streambuf *streamBuf,
2678 static int getExtendedBinaryTimeTzValue(
bdlt::TimeTz *value,
2679 bsl::streambuf *streamBuf,
2699 static int putIso8601TimeTzValue(bsl::streambuf *streamBuf,
2712 static int putCompactBinaryTimeValue(bsl::streambuf *streamBuf,
2723 static int putCompactBinaryTimeTzValue(bsl::streambuf *streamBuf,
2734 static int putExtendedBinaryTimeTzValue(bsl::streambuf *streamBuf,
2745 static int detectTimeOrTimeTzEncoding(
2748 unsigned char firstByte);
2759 bsl::streambuf *streamBuf,
2772 bsl::streambuf *streamBuf,
2783 static int getCompactBinaryTimeValue(
TimeOrTimeTz *value,
2784 bsl::streambuf *streamBuf,
2796 static int getCompactBinaryTimeTzValue(
TimeOrTimeTz *value,
2797 bsl::streambuf *streamBuf,
2808 static int getExtendedBinaryTimeValue(
TimeOrTimeTz *value,
2809 bsl::streambuf *streamBuf,
2821 static int getExtendedBinaryTimeTzValue(
TimeOrTimeTz *value,
2822 bsl::streambuf *streamBuf,
2833 int *millisecondsSinceMidnight,
2846 int millisecondsSinceMidnight);
2867 bsl::streambuf *streamBuf,
2899 bsl::streambuf *streamBuf,
2931 bsl::streambuf *streamBuf,
3133 k_EXTENDED_BINARY_SERIAL_DATE_LENGTH = 3,
3135 k_EXTENDED_BINARY_DATETIME_LENGTH =
3137 k_EXTENDED_BINARY_SERIAL_DATE_LENGTH +
3142 k_EXTENDED_BINARY_DATETIMETZ_LENGTH =
3144 k_EXTENDED_BINARY_SERIAL_DATE_LENGTH +
3154 k_MAX_ISO8601_DATETIMETZ_LENGTH =
3160 k_MAX_COMPACT_BINARY_DATETIME_LENGTH = 6,
3165 k_MIN_COMPACT_BINARY_DATETIMETZ_LENGTH =
3166 k_MAX_COMPACT_BINARY_DATETIME_LENGTH + 1,
3171 k_MAX_COMPACT_BINARY_DATETIMETZ_LENGTH = 9
3188 static void datetimeToMillisecondsSinceEpoch(
3202 static int millisecondsSinceEpochToDatetime(
3215 unsigned char firstByte);
3226 bsl::streambuf *streamBuf,
3238 bsl::streambuf *streamBuf,
3250 static int getCompactBinaryDatetimeTzValue(
bdlt::Datetime *value,
3251 bsl::streambuf *streamBuf,
3264 bsl::streambuf *streamBuf,
3294 static int putIso8601DatetimeValue(bsl::streambuf *streamBuf,
3307 static int putCompactBinaryDatetimeValue(
3308 bsl::streambuf *streamBuf,
3321 static int putCompactBinaryDatetimeValue(
3322 bsl::streambuf *streamBuf,
3336 static int putCompactBinaryDatetimeTzValue(
3337 bsl::streambuf *streamBuf,
3350 static int putExtendedBinaryDatetimeValue(
3351 bsl::streambuf *streamBuf,
3362 static int detectDatetimeTzEncoding(
3365 unsigned char firstByte);
3377 bsl::streambuf *streamBuf,
3389 bsl::streambuf *streamBuf,
3402 bsl::streambuf *streamBuf,
3415 bsl::streambuf *streamBuf,
3437 static int putIso8601DatetimeTzValue(bsl::streambuf *streamBuf,
3454 static int putCompactBinaryDatetimeTzValue(
3455 bsl::streambuf *streamBuf,
3456 int timezoneOffsetInMinutes,
3458 int serialDatetimeLength,
3469 static int putExtendedBinaryDatetimeTzValue(
3470 bsl::streambuf *streamBuf,
3481 static int detectDatetimeOrDatetimeTzEncoding(
3484 unsigned char firstByte);
3496 bsl::streambuf *streamBuf,
3509 bsl::streambuf *streamBuf,
3522 bsl::streambuf *streamBuf,
3535 bsl::streambuf *streamBuf,
3547 bsl::streambuf *streamBuf,
3559 static int getExtendedBinaryDatetimeTzValue(
3561 bsl::streambuf *streamBuf,
3580 bsl::streambuf *streamBuf,
3612 bsl::streambuf *streamBuf,
3646 bsl::streambuf *streamBuf,
3728 template <
typename TYPE>
3731 bsl::streambuf *streamBuf,
3736 bsl::streambuf *streamBuf,
3741 bsl::streambuf *streamBuf,
3745 unsigned char *value,
3746 bsl::streambuf *streamBuf,
3751 bsl::streambuf *streamBuf,
3756 bsl::streambuf *streamBuf,
3761 bsl::streambuf *streamBuf,
3766 bsl::streambuf *streamBuf,
3771 bsl::streambuf *streamBuf,
3776 bsl::streambuf *streamBuf,
3781 bsl::streambuf *streamBuf,
3786 bsl::streambuf *streamBuf,
3791 bsl::streambuf *streamBuf,
3796 bsl::streambuf *streamBuf,
3801 bsl::streambuf *streamBuf,
3806 bsl::streambuf *streamBuf,
3811 bsl::streambuf *streamBuf,
3816 bsl::streambuf *streamBuf,
3884 template <
typename TYPE>
3885 static int putValue(bsl::streambuf *streamBuf,
3888 static int putValue(bsl::streambuf *streamBuf,
3891 static int putValue(bsl::streambuf *streamBuf,
3894 static int putValue(bsl::streambuf *streamBuf,
3895 unsigned char value,
3897 static int putValue(bsl::streambuf *streamBuf,
3900 static int putValue(bsl::streambuf *streamBuf,
3903 static int putValue(bsl::streambuf *streamBuf,
3906 static int putValue(bsl::streambuf *streamBuf,
3909 static int putValue(bsl::streambuf *streamBuf,
3912 static int putValue(bsl::streambuf *streamBuf,
3915 static int putValue(bsl::streambuf *streamBuf,
3918 static int putValue(bsl::streambuf *streamBuf,
3921 static int putValue(bsl::streambuf *streamBuf,
3924 static int putValue(bsl::streambuf *streamBuf,
3927 static int putValue(bsl::streambuf *streamBuf,
3930 static int putValue(bsl::streambuf *streamBuf,
3933 static int putValue(bsl::streambuf *streamBuf,
3974 int *accumNumBytesConsumed)
3983 int *accumNumBytesConsumed)
3986 result, accumNumBytesConsumed, streamBuf);
3989template <
class TYPE>
3997 value, streamBuf, length, options);
4000template <
typename TYPE>
4004 int *accumNumBytesConsumed,
4009 &length, accumNumBytesConsumed, streamBuf)) {
4017 *accumNumBytesConsumed += length;
4039template <
typename TYPE>
4056 const bsl::streambuf::int_type
byte = streamBuf->sgetc();
4057 if (bsl::streambuf::traits_type::eof() ==
byte) {
4061 *value = bsl::streambuf::traits_type::to_char_type(
byte);
4067 bsl::streambuf *streamBuf,
4070 const bsl::streamsize numCharsRead =
4071 streamBuf->sgetn(buffer,
static_cast<bsl::streamsize
>(bufferLength));
4073 if (numCharsRead !=
static_cast<bsl::streamsize
>(bufferLength)) {
4085 const bsl::streamsize numCharsWritten =
4086 streamBuf->sputn(buffer,
static_cast<bsl::streamsize
>(bufferLength));
4088 if (numCharsWritten != bufferLength) {
4100template <
typename TYPE>
4105 enum { k_BDEM_SUCCESS = 0, k_BDEM_FAILURE = -1 };
4108 return k_BDEM_FAILURE;
4111 static const bool isUnsigned = (TYPE(-1) > TYPE(0));
4113 if (isUnsigned && (
unsigned)length ==
sizeof(TYPE) + 1) {
4114 static const TYPE SGN_BIT =
static_cast<TYPE
>(
4115 static_cast<TYPE
>(1)
4121 if (!(value & SGN_BIT)) {
4122 return k_BDEM_FAILURE;
4125 if (0 != streamBuf->sputc(0)) {
4126 return k_BDEM_FAILURE;
4132 if (
static_cast<unsigned>(length) >
sizeof(TYPE)) {
4133 return k_BDEM_FAILURE;
4136#if BSLS_PLATFORM_IS_BIG_ENDIAN
4137 return length == streamBuf->sputn(
4138 static_cast<char *
>(
static_cast<void *
>(&value)) +
4139 sizeof(TYPE) - length,
4145 char *dst =
static_cast<char *
>(
static_cast<void *
>(&value)) + length;
4146 for (; length > 0; --length) {
4147 unsigned char c = *--dst;
4148 if (c != streamBuf->sputc(c)) {
4149 return k_BDEM_FAILURE;
4153 return k_BDEM_SUCCESS;
4166 bsl::streambuf *streamBuf,
4173 int intValue = streamBuf->sbumpc();
4174 if (bsl::streambuf::traits_type::eof() == intValue) {
4178 *value = 0 != intValue;
4199 BSLS_ASSERT(0 == *
static_cast<char *
>(
static_cast<void *
>(&value)) ||
4200 1 == *
static_cast<char *
>(
static_cast<void *
>(&value)));
4202 typedef bsl::streambuf::char_type char_type;
4208 if (
static_cast<int>(value) !=
4209 streamBuf->sputc(
static_cast<char_type
>(value ? 1 : 0))) {
4221template <
typename TYPE>
4224 int numBytes =
sizeof(TYPE);
4233 static const TYPE NEG_MASK =
static_cast<TYPE
>(
4234 static_cast<TYPE
>(0xff80)
4239 else if (value > 0) {
4240 static const TYPE SGN_BIT =
static_cast<TYPE
>(
4241 static_cast<TYPE
>(1)
4243 if (value & SGN_BIT) {
4250 return static_cast<int>(
sizeof(TYPE) + 1);
4256 static const TYPE POS_MASK = TYPE(~NEG_MASK);
4257 while ((value & POS_MASK) == value) {
4258 value =
static_cast<TYPE
>(value << 8);
4266 while ((value | NEG_MASK) == value) {
4267 value =
static_cast<TYPE
>(
4268 static_cast<unsigned long long>(value) << 8);
4280template <
typename TYPE>
4282 bsl::streambuf *streamBuf,
4285 enum { k_SUCCESS = 0, k_FAILURE = -1 };
4287 enum { k_SIGN_BIT_MASK = 0x80 };
4289 static const bool isUnsigned = (TYPE(-1) > TYPE(0));
4291 if (isUnsigned &&
static_cast<unsigned>(length) ==
sizeof(TYPE) + 1) {
4297 if (0 != streamBuf->sbumpc()) {
4306 if (
static_cast<unsigned>(length) >
sizeof(TYPE)) {
4312 *value =
static_cast<TYPE
>(streamBuf->sgetc() & k_SIGN_BIT_MASK ? -1 : 0);
4314 for (
int i = 0; i < length; ++i) {
4315 int nextOctet = streamBuf->sbumpc();
4316 if (bsl::streambuf::traits_type::eof() == nextOctet) {
4320 const unsigned long long mask =
4323 *value =
static_cast<TYPE
>((*value & mask)
4326 static_cast<TYPE
>(*value |
static_cast<unsigned char>(nextOctet));
4334 bsl::streambuf *streamBuf)
4362 byte0 + byte1 + byte2 + byte3 + byte4;
4369template <
typename TYPE>
4373 typedef bsl::streambuf::char_type char_type;
4376 if (length != streamBuf->sputc(
static_cast<char_type
>(length))) {
4383template <
typename TYPE>
4403 const char bytes[5] = {
4405 static_cast<unsigned char>((unsignedValue >> (8 * 4)) & 0xFF)),
4407 static_cast<unsigned char>((unsignedValue >> (8 * 3)) & 0xFF)),
4409 static_cast<unsigned char>((unsignedValue >> (8 * 2)) & 0xFF)),
4411 static_cast<unsigned char>((unsignedValue >> (8 * 1)) & 0xFF)),
4413 static_cast<unsigned char>((unsignedValue >> (8 * 0)) & 0xFF))};
4428 bsl::streambuf *streamBuf,
4436 if (0 != streamBuf->sbumpc()) {
4449 int valueOctet = streamBuf->sbumpc();
4450 if (bsl::streambuf::traits_type::eof() == valueOctet) {
4454 *value =
static_cast<char>(valueOctet);
4460 bsl::streambuf *streamBuf,
4468 *value =
static_cast<signed char>(temp);
4474 bsl::streambuf *streamBuf,
4482 *value =
static_cast<unsigned char>(temp);
4496 if (
static_cast<unsigned char>(value) != streamBuf->sputc(value)) {
4507 return putCharValue(streamBuf,
static_cast<char>(value));
4512 unsigned char value)
4515 static_cast<unsigned short>(value));
4528 bsl::streambuf *streamBuf,
4531 double tentativeValue;
4536 *value =
static_cast<float>(tentativeValue);
4545 bsl::streambuf *streamBuf,
4550 static_cast<double>(value),
4571 if (valueLength != streamBuf->sputn(value, valueLength)) {
4585 streamBuf, value.
data(),
static_cast<int>(value.
length()));
4592 bsl::streambuf *streamBuf,
4596 streamBuf, value.
data(),
static_cast<int>(value.
length()));
4603 bsl::streambuf *streamBuf,
4607 streamBuf, value.
data(),
static_cast<int>(value.
length()));
4615template <
class TYPE>
4616int BerUtil_Iso8601ImpUtil::getValue(TYPE *value,
4617 bsl::streambuf *streamBuf,
4644 const bsl::streamsize bytesConsumed = streamBuf->sgetn(buf, length);
4645 if (
static_cast<int>(bytesConsumed) != length) {
4652template <
class TYPE>
4653int BerUtil_Iso8601ImpUtil::putValue(bsl::streambuf *streamBuf,
4655 const BerEncoderOptions *options)
4659 int datetimeFractionalSecondPrecision =
4660 options ? options->datetimeFractionalSecondPrecision() : 6;
4687 const bool useMicrosecondPrecision =
4690 const bool compactBinaryEncodingOfValueIsBuggy = (
bdlt::Time() == value);
4699 const bool useExtendedBinaryEncodingIfAllowed =
4700 useMicrosecondPrecision || compactBinaryEncodingOfValueIsBuggy;
4702 const bool extendedBinaryEncodingIsAllowed =
4707 extendedBinaryEncodingIsAllowed;
4748: d_type(
Type::e_NOT_EXTENDED_BINARY)
4749, d_timezoneOffsetInMinutes(0)
4758 d_timezoneOffsetInMinutes = 0;
4765 d_timezoneOffsetInMinutes = 0;
4774 d_timezoneOffsetInMinutes = offset;
4800 return d_timezoneOffsetInMinutes;
4818 const bool bit0 = firstByte & 0x80;
4819 const bool bit1 = firstByte & 0x40;
4820 const bool bit2 = firstByte & 0x20;
4822 return bit0 && (bit1 || bit2);
4827 unsigned char firstByte)
4829 const bool bit0 = firstByte & 0x80;
4830 const bool bit1 = firstByte & 0x40;
4831 const bool bit2 = firstByte & 0x20;
4833 return bit0 && !(bit1 || bit2);
4838 unsigned char firstByte)
4840 const bool bit0 = firstByte & 0x80;
4841 const bool bit1 = firstByte & 0x40;
4842 const bool bit2 = firstByte & 0x20;
4843 const bool bit3 = firstByte & 0x10;
4845 return bit0 && !(bit1 || bit2) && !bit3;
4850 unsigned char firstByte)
4852 const bool bit0 = firstByte & 0x80;
4853 const bool bit1 = firstByte & 0x40;
4854 const bool bit2 = firstByte & 0x20;
4855 const bool bit3 = firstByte & 0x10;
4857 return bit0 && !(bit1 || bit2) && bit3;
4864 unsigned char firstByte)
4877 unsigned char firstByte)
4881 const bool bit0 = firstByte & 0x80;
4882 const bool bit3 = firstByte & 0x10;
4900 bsl::streambuf *streamBuf)
4902 char headerBytes[2];
4908 const unsigned char headerByte0 =
4909 static_cast<unsigned char>(headerBytes[0]);
4910 const unsigned char headerByte1 =
4911 static_cast<unsigned char>(headerBytes[1]);
4919 unsigned char headerByte0,
4920 unsigned char headerByte1)
4926 return getValue(value, headerByte0, headerByte1);
4931 bsl::streambuf *streamBuf)
4933 char headerBytes[2];
4939 const unsigned char headerByte0 =
4940 static_cast<unsigned char>(headerBytes[0]);
4941 const unsigned char headerByte1 =
4942 static_cast<unsigned char>(headerBytes[1]);
4944 return getValue(value, headerByte0, headerByte1);
4949 unsigned char headerByte0,
4950 unsigned char headerByte1)
4967 if ((headerByte0 & 0x0F) | (headerByte1 & 0xFF)) {
4975 enum { k_TIMEZONE_SIGN_BIT = 0x08 };
4982 const unsigned char timezoneOffsetHi =
4983 (headerByte0 & k_TIMEZONE_SIGN_BIT)
4984 ? ((0x0F & headerByte0) | 0xF0)
4985 : ((0x0F & headerByte0) | 0x00);
4987 const signed char signedTimezoneOffsetHi =
4988 static_cast<signed char>(timezoneOffsetHi);
4990 const unsigned char timezoneOffsetLo = headerByte1;
4992 const int timezoneOffset =
4993 (
static_cast<unsigned>(signedTimezoneOffsetHi) << 8) |
4994 (
static_cast<unsigned>(timezoneOffsetLo) << 0);
5006#if BSLA_UNREACHABLE_IS_ACTIVE
5015 bsl::streambuf *streamBuf)
5023 bsl::streambuf *streamBuf,
5024 int timezoneOffsetInMinutes)
5029 const unsigned short offsetWord =
5030 static_cast<unsigned short>(timezoneOffsetInMinutes);
5032 static const unsigned short k_OFFSET_MASK = 0x0FFF;
5034 const unsigned short headerWord = 0x9000 | (offsetWord & k_OFFSET_MASK);
5037 static_cast<char>((headerWord >> 8) & 0xFF),
5038 static_cast<char>((headerWord >> 0) & 0xFF)};
5052int BerUtil_DateImpUtil::detectDateEncoding(DateEncoding::Value *encoding,
5054 unsigned char firstByte)
5056 if (k_MAX_COMPACT_BINARY_DATE_LENGTH >= length) {
5076 const BerEncoderOptions *options)
5078 if (options && options->encodeDateAndTimeTypesAsBinary()) {
5088int BerUtil_DateImpUtil::detectDateTzEncoding(DateTzEncoding::Value *encoding,
5090 unsigned char firstByte)
5093 k_MIN_COMPACT_BINARY_DATETZ_LENGTH);
5095 if (k_MIN_COMPACT_BINARY_DATETZ_LENGTH > length) {
5100 if (k_MAX_COMPACT_BINARY_DATETZ_LENGTH >= length) {
5120 const BerEncoderOptions *options)
5122 if (options && options->encodeDateAndTimeTypesAsBinary() &&
5127 if (options && options->encodeDateAndTimeTypesAsBinary()) {
5137int BerUtil_DateImpUtil::detectDateOrDateTzEncoding(
5138 DateOrDateTzEncoding::Value *encoding,
5140 unsigned char firstByte)
5142 if (k_MAX_COMPACT_BINARY_DATE_LENGTH >= length) {
5149 if (k_MAX_COMPACT_BINARY_DATETZ_LENGTH >= length) {
5160 if (k_MAX_ISO8601_DATE_LENGTH >= length) {
5172int BerUtil_DateImpUtil::getIso8601DateValue(DateOrDateTz *value,
5173 bsl::streambuf *streamBuf,
5177 return getIso8601DateValue(&value->the<
bdlt::Date>(), streamBuf, length);
5181int BerUtil_DateImpUtil::getIso8601DateTzValue(DateOrDateTz *value,
5182 bsl::streambuf *streamBuf,
5186 return getIso8601DateTzValue(
5191int BerUtil_DateImpUtil::getCompactBinaryDateValue(DateOrDateTz *value,
5192 bsl::streambuf *streamBuf,
5196 return getCompactBinaryDateValue(
5197 &value->the<
bdlt::Date>(), streamBuf, length);
5201int BerUtil_DateImpUtil::getCompactBinaryDateTzValue(DateOrDateTz *value,
5202 bsl::streambuf *streamBuf,
5206 return getCompactBinaryDateTzValue(
5216 bsl::streambuf *streamBuf,
5225 int rc = detectDateOrDateTzEncoding(&encoding, length, firstByte);
5233 return getIso8601DateValue(value, streamBuf, length);
5236 return getIso8601DateTzValue(value, streamBuf, length);
5239 return getCompactBinaryDateValue(value, streamBuf, length);
5242 return getCompactBinaryDateTzValue(value, streamBuf, length);
5248#if BSLA_UNREACHABLE_IS_ACTIVE
5283 static_cast<int>(serialDate))) {
5291 &year, &month, &day,
static_cast<int>(serialDate));
5300int BerUtil_TimeImpUtil::detectTimeEncoding(TimeEncoding::Value *encoding,
5302 unsigned char firstByte)
5304 if (k_MAX_COMPACT_BINARY_TIME_LENGTH >= length) {
5325int BerUtil_TimeImpUtil::getIso8601TimeValue(
bdlt::Time *value,
5326 bsl::streambuf *streamBuf,
5337 const BerEncoderOptions *options)
5352int BerUtil_TimeImpUtil::putIso8601TimeValue(
5353 bsl::streambuf *streamBuf,
5355 const BerEncoderOptions *options)
5363int BerUtil_TimeImpUtil::detectTimeTzEncoding(TimeTzEncoding::Value *encoding,
5365 unsigned char firstByte)
5368 k_MIN_COMPACT_BINARY_TIMETZ_LENGTH);
5371 k_MAX_COMPACT_BINARY_TIMETZ_LENGTH);
5373 if (k_MAX_COMPACT_BINARY_TIME_LENGTH >= length) {
5378 if (k_MAX_COMPACT_BINARY_TIMETZ_LENGTH >= length) {
5383 BSLS_ASSERT(k_MAX_COMPACT_BINARY_TIMETZ_LENGTH < length);
5399int BerUtil_TimeImpUtil::getIso8601TimeTzValue(
bdlt::TimeTz *value,
5400 bsl::streambuf *streamBuf,
5411 const BerEncoderOptions *options)
5431int BerUtil_TimeImpUtil::putIso8601TimeTzValue(
5432 bsl::streambuf *streamBuf,
5434 const BerEncoderOptions *options)
5442int BerUtil_TimeImpUtil::detectTimeOrTimeTzEncoding(
5443 TimeOrTimeTzEncoding::Value *encoding,
5445 unsigned char firstByte)
5447 if (k_MAX_COMPACT_BINARY_TIME_LENGTH >= length) {
5452 if (k_MAX_COMPACT_BINARY_TIMETZ_LENGTH >= length) {
5471 if (k_MAX_ISO8601_TIME_LENGTH >= length) {
5481int BerUtil_TimeImpUtil::getIso8601TimeValue(TimeOrTimeTz *value,
5482 bsl::streambuf *streamBuf,
5486 return getIso8601TimeValue(&value->the<
bdlt::Time>(), streamBuf, length);
5490int BerUtil_TimeImpUtil::getIso8601TimeTzValue(TimeOrTimeTz *value,
5491 bsl::streambuf *streamBuf,
5495 return getIso8601TimeTzValue(
5500int BerUtil_TimeImpUtil::getCompactBinaryTimeValue(TimeOrTimeTz *value,
5501 bsl::streambuf *streamBuf,
5505 return getCompactBinaryTimeValue(
5506 &value->the<
bdlt::Time>(), streamBuf, length);
5510int BerUtil_TimeImpUtil::getCompactBinaryTimeTzValue(TimeOrTimeTz *value,
5511 bsl::streambuf *streamBuf,
5515 return getCompactBinaryTimeTzValue(
5520int BerUtil_TimeImpUtil::getExtendedBinaryTimeValue(TimeOrTimeTz *value,
5521 bsl::streambuf *streamBuf,
5525 return getExtendedBinaryTimeValue(
5526 &value->the<
bdlt::Time>(), streamBuf, length);
5530int BerUtil_TimeImpUtil::getExtendedBinaryTimeTzValue(
5531 TimeOrTimeTz *value,
5532 bsl::streambuf *streamBuf,
5536 return getExtendedBinaryTimeTzValue(
5546 int *millisecondsSinceMidnight,
5550 *millisecondsSinceMidnight =
5551 static_cast<int>((time - defaultTime).totalMilliseconds());
5562 *millisecondsSinceMidnight =
5563 static_cast<Int64
>(time.
hour()) * Ratio::k_MICROSECONDS_PER_HOUR +
5564 static_cast<Int64
>(time.
minute()) * Ratio::k_MICROSECONDS_PER_MINUTE +
5565 static_cast<Int64
>(time.
second()) * Ratio::k_MICROSECONDS_PER_SECOND +
5567 Ratio::k_MICROSECONDS_PER_MILLISECOND +
5574 int millisecondsSinceMidnight)
5578 static const int k_MIN_NUM_MILLISECONDS = 0;
5579 static const int k_MAX_NUM_MILLISECONDS =
5580 24 * Ratio::k_MILLISECONDS_PER_HOUR;
5582 if (k_MIN_NUM_MILLISECONDS > millisecondsSinceMidnight) {
5586 if (k_MAX_NUM_MILLISECONDS < millisecondsSinceMidnight) {
5590 const int serialTime = millisecondsSinceMidnight;
5592 const int hour = serialTime / Ratio::k_MILLISECONDS_PER_HOUR_32;
5595 (serialTime - hour * Ratio::k_MILLISECONDS_PER_HOUR_32) /
5596 Ratio::k_MILLISECONDS_PER_MINUTE_32;
5598 const int second = (serialTime - hour * Ratio::k_MILLISECONDS_PER_HOUR_32 -
5599 minute * Ratio::k_MILLISECONDS_PER_MINUTE_32) /
5600 Ratio::k_MILLISECONDS_PER_SECOND_32;
5602 const int millisecond =
5603 (serialTime - hour * Ratio::k_MILLISECONDS_PER_HOUR_32 -
5604 minute * Ratio::k_MILLISECONDS_PER_MINUTE_32 -
5605 second * Ratio::k_MILLISECONDS_PER_SECOND_32);
5607 time->
setTime(hour, minute, second, millisecond);
5620 24 * Ratio::k_MICROSECONDS_PER_HOUR;
5622 if (k_MIN_NUM_MICROSECONDS > microsecondsSinceMidnight) {
5626 if (k_MAX_NUM_MICROSECONDS < microsecondsSinceMidnight) {
5633 static_cast<int>(serialTime / Ratio::k_MICROSECONDS_PER_HOUR);
5636 static_cast<int>((serialTime - hour * Ratio::k_MICROSECONDS_PER_HOUR) /
5637 Ratio::k_MICROSECONDS_PER_MINUTE);
5640 static_cast<int>((serialTime - hour * Ratio::k_MICROSECONDS_PER_HOUR -
5641 minute * Ratio::k_MICROSECONDS_PER_MINUTE) /
5642 Ratio::k_MICROSECONDS_PER_SECOND);
5644 const int millisecond =
5645 static_cast<int>((serialTime - hour * Ratio::k_MICROSECONDS_PER_HOUR -
5646 minute * Ratio::k_MICROSECONDS_PER_MINUTE -
5647 second * Ratio::k_MICROSECONDS_PER_SECOND) /
5648 Ratio::k_MICROSECONDS_PER_MILLISECOND);
5650 const int microsecond =
static_cast<int>(
5651 (serialTime - hour * Ratio::k_MICROSECONDS_PER_HOUR -
5652 minute * Ratio::k_MICROSECONDS_PER_MINUTE -
5653 second * Ratio::k_MICROSECONDS_PER_SECOND -
5654 millisecond * Ratio::k_MICROSECONDS_PER_MILLISECOND));
5656 time->
setTime(hour, minute, second, millisecond, microsecond);
5664 bsl::streambuf *streamBuf,
5673 int rc = detectTimeEncoding(&encoding, length, firstByte);
5681 return getIso8601TimeValue(value, streamBuf, length);
5684 return getCompactBinaryTimeValue(value, streamBuf, length);
5687 return getExtendedBinaryTimeValue(value, streamBuf, length);
5692#if BSLA_UNREACHABLE_IS_ACTIVE
5706 switch (selectTimeEncoding(value, options)) {
5708 return putIso8601TimeValue(streamBuf, value, options);
5711 return putCompactBinaryTimeValue(streamBuf, value, options);
5715 return putExtendedBinaryTimeValue(streamBuf, value, options);
5721#if BSLA_UNREACHABLE_IS_ACTIVE
5732 bsl::streambuf *streamBuf,
5741 int rc = detectTimeTzEncoding(&encoding, length, firstByte);
5749 return getIso8601TimeTzValue(value, streamBuf, length);
5752 return getCompactBinaryTimeValue(value, streamBuf, length);
5755 return getCompactBinaryTimeTzValue(value, streamBuf, length);
5759 return getExtendedBinaryTimeTzValue(value, streamBuf, length);
5765#if BSLA_UNREACHABLE_IS_ACTIVE
5779 switch (selectTimeTzEncoding(value, options)) {
5781 return putIso8601TimeTzValue(streamBuf, value, options);
5784 return putCompactBinaryTimeValue(streamBuf, value, options);
5788 return putCompactBinaryTimeTzValue(streamBuf, value, options);
5792 return putExtendedBinaryTimeTzValue(streamBuf, value, options);
5798#if BSLA_UNREACHABLE_IS_ACTIVE
5809 bsl::streambuf *streamBuf,
5818 int rc = detectTimeOrTimeTzEncoding(&encoding, length, firstByte);
5826 return getIso8601TimeValue(value, streamBuf, length);
5829 return getIso8601TimeTzValue(value, streamBuf, length);
5832 return getCompactBinaryTimeValue(value, streamBuf, length);
5835 return getCompactBinaryTimeTzValue(value, streamBuf, length);
5839 return getExtendedBinaryTimeValue(value, streamBuf, length);
5842 return getExtendedBinaryTimeTzValue(value, streamBuf, length);
5848#if BSLA_UNREACHABLE_IS_ACTIVE
5864int BerUtil_DatetimeImpUtil::detectDatetimeEncoding(
5865 DatetimeEncoding::Value *encoding,
5867 unsigned char firstByte)
5869 if (k_MAX_COMPACT_BINARY_DATETIME_LENGTH >= length) {
5874 if (k_MAX_COMPACT_BINARY_DATETIMETZ_LENGTH >= length) {
5896BerUtil_DatetimeImpUtil::selectDatetimeEncoding(
5898 int *serialDatetimeLength,
5900 const BerEncoderOptions *options)
5909 datetimeToMillisecondsSinceEpoch(&serialDatetimeValue, value);
5911 const int serialDatetimeLengthValue =
5914 if (k_MIN_COMPACT_BINARY_DATETIMETZ_LENGTH <=
5915 serialDatetimeLengthValue) {
5916 *serialDatetime = serialDatetimeValue;
5917 *serialDatetimeLength = serialDatetimeLengthValue;
5921 *serialDatetime = serialDatetimeValue;
5922 *serialDatetimeLength = serialDatetimeLengthValue;
5932int BerUtil_DatetimeImpUtil::detectDatetimeTzEncoding(
5933 DatetimeTzEncoding::Value *encoding,
5935 unsigned char firstByte)
5937 if (k_MAX_COMPACT_BINARY_DATETIME_LENGTH >= length) {
5942 if (k_MAX_COMPACT_BINARY_DATETIMETZ_LENGTH >= length) {
5964BerUtil_DatetimeImpUtil::selectDatetimeTzEncoding(
5968 const BerEncoderOptions *options)
5977 datetimeToMillisecondsSinceEpoch(&serialDatetimeValue,
5980 const int lengthValue =
5983 if (0 == value.
offset() &&
5984 k_MIN_COMPACT_BINARY_DATETIMETZ_LENGTH > lengthValue) {
5985 *serialDatetime = serialDatetimeValue;
5986 *length = lengthValue;
5990 *serialDatetime = serialDatetimeValue;
5991 *length = lengthValue;
6001int BerUtil_DatetimeImpUtil::detectDatetimeOrDatetimeTzEncoding(
6002 DatetimeOrDatetimeTzEncoding::Value *encoding,
6004 unsigned char firstByte)
6008 if (k_MAX_COMPACT_BINARY_DATETIME_LENGTH >= length) {
6013 if (k_MAX_COMPACT_BINARY_DATETIMETZ_LENGTH >= length) {
6032 if (k_MAX_ISO8601_DATETIME_LENGTH >= length) {
6042int BerUtil_DatetimeImpUtil::getIso8601DatetimeValue(
6043 DatetimeOrDatetimeTz *value,
6044 bsl::streambuf *streamBuf,
6048 return getIso8601DatetimeValue(
6053int BerUtil_DatetimeImpUtil::getIso8601DatetimeTzValue(
6054 DatetimeOrDatetimeTz *value,
6055 bsl::streambuf *streamBuf,
6059 return getIso8601DatetimeTzValue(
6064int BerUtil_DatetimeImpUtil::getCompactBinaryDatetimeValue(
6065 DatetimeOrDatetimeTz *value,
6066 bsl::streambuf *streamBuf,
6070 return getCompactBinaryDatetimeValue(
6075int BerUtil_DatetimeImpUtil::getCompactBinaryDatetimeTzValue(
6076 DatetimeOrDatetimeTz *value,
6077 bsl::streambuf *streamBuf,
6081 return getCompactBinaryDatetimeTzValue(
6086int BerUtil_DatetimeImpUtil::getExtendedBinaryDatetimeValue(
6087 DatetimeOrDatetimeTz *value,
6088 bsl::streambuf *streamBuf,
6092 return getExtendedBinaryDatetimeValue(
6097int BerUtil_DatetimeImpUtil::getExtendedBinaryDatetimeTzValue(
6098 DatetimeOrDatetimeTz *value,
6099 bsl::streambuf *streamBuf,
6103 return getExtendedBinaryDatetimeTzValue(
6113 bsl::streambuf *streamBuf,
6129 switch (selectDatetimeEncoding(&serialDatetime, &length, value, options)) {
6131 return putIso8601DatetimeValue(streamBuf, value, options);
6134 return putCompactBinaryDatetimeValue(
6135 streamBuf, serialDatetime, length, options);
6138 return putCompactBinaryDatetimeTzValue(
6139 streamBuf, serialDatetime, length, options);
6142 return putExtendedBinaryDatetimeValue(streamBuf, value, options);
6148#if BSLA_UNREACHABLE_IS_ACTIVE
6159 bsl::streambuf *streamBuf,
6168 int rc = detectDatetimeEncoding(&encoding, length, firstByte);
6176 return getIso8601DatetimeValue(value, streamBuf, length);
6179 return getCompactBinaryDatetimeValue(value, streamBuf, length);
6183 return getCompactBinaryDatetimeTzValue(value, streamBuf, length);
6187 return getExtendedBinaryDatetimeValue(value, streamBuf, length);
6193#if BSLA_UNREACHABLE_IS_ACTIVE
6204 bsl::streambuf *streamBuf,
6224 int serialDatetimeLength;
6226 switch (selectDatetimeTzEncoding(
6227 &serialDatetime, &serialDatetimeLength, value, options)) {
6229 return putIso8601DatetimeTzValue(streamBuf, value, options);
6233 return putCompactBinaryDatetimeValue(
6234 streamBuf, serialDatetime, serialDatetimeLength, options);
6238 return putCompactBinaryDatetimeTzValue(streamBuf,
6241 serialDatetimeLength,
6246 return putExtendedBinaryDatetimeTzValue(streamBuf, value, options);
6252#if BSLA_UNREACHABLE_IS_ACTIVE
6263 bsl::streambuf *streamBuf,
6272 int rc = detectDatetimeTzEncoding(&encoding, length, firstByte);
6280 return getIso8601DatetimeTzValue(value, streamBuf, length);
6283 return getCompactBinaryDatetimeValue(value, streamBuf, length);
6287 return getCompactBinaryDatetimeTzValue(value, streamBuf, length);
6291 return getExtendedBinaryDatetimeTzValue(value, streamBuf, length);
6297#if BSLA_UNREACHABLE_IS_ACTIVE
6309 bsl::streambuf *streamBuf,
6318 int rc = detectDatetimeOrDatetimeTzEncoding(&encoding, length, firstByte);
6326 return getIso8601DatetimeValue(value, streamBuf, length);
6329 return getIso8601DatetimeTzValue(value, streamBuf, length);
6332 return getCompactBinaryDatetimeValue(value, streamBuf, length);
6336 return getCompactBinaryDatetimeTzValue(value, streamBuf, length);
6340 return getExtendedBinaryDatetimeValue(value, streamBuf, length);
6344 return getExtendedBinaryDatetimeTzValue(value, streamBuf, length);
6350#if BSLA_UNREACHABLE_IS_ACTIVE
6362template <
typename TYPE>
6364 bsl::streambuf *streamBuf,
6373 bsl::streambuf *streamBuf,
6382 bsl::streambuf *streamBuf,
6391 bsl::streambuf *streamBuf,
6400 bsl::streambuf *streamBuf,
6409 bsl::streambuf *streamBuf,
6418 bsl::streambuf *streamBuf,
6426 bsl::streambuf *streamBuf,
6437 bsl::streambuf *streamBuf,
6446 bsl::streambuf *streamBuf,
6455 bsl::streambuf *streamBuf,
6464 bsl::streambuf *streamBuf,
6473 bsl::streambuf *streamBuf,
6482 bsl::streambuf *streamBuf,
6491 bsl::streambuf *streamBuf,
6496 value, streamBuf, length);
6501 bsl::streambuf *streamBuf,
6510 bsl::streambuf *streamBuf,
6519 bsl::streambuf *streamBuf,
6531template <
class TYPE>
6557 unsigned char value,
6682 return StringUtil::putRawStringValue(streamBuf,
string, stringLength);
Definition balber_berdecoderoptions.h:76
Definition balber_berencoderoptions.h:70
bool encodeDateAndTimeTypesAsBinary() const
Definition balber_berencoderoptions.h:794
int datetimeFractionalSecondPrecision() const
Definition balber_berencoderoptions.h:800
int & bdeVersionConformance()
Definition balber_berencoderoptions.h:598
Definition balber_berutil.h:1543
void makeExtendedBinaryWithoutTimezone()
Definition balber_berutil.h:4762
BerUtil_DateAndTimeHeader & operator=(const BerUtil_DateAndTimeHeader &rhs)=default
BerUtil_DateAndTimeHeader()
Definition balber_berutil.h:4747
BerUtil_DateAndTimeHeader(const BerUtil_DateAndTimeHeader &original)=default
bool isExtendedBinaryWithoutTimezone() const
Definition balber_berutil.h:4786
~BerUtil_DateAndTimeHeader()=default
Destroy this object.
void makeExtendedBinaryWithTimezone(int offset)
Definition balber_berutil.h:4769
BerUtil_TimezoneOffsetImpUtil TimezoneUtil
Definition balber_berutil.h:1556
void makeNotExtendedBinary()
Definition balber_berutil.h:4755
bool isExtendedBinaryWithTimezone() const
Definition balber_berutil.h:4792
BerUtil_DateAndTimeHeaderType Type
Definition balber_berutil.h:1551
int timezoneOffsetInMinutes() const
Definition balber_berutil.h:4798
bool isExtendedBinary() const
Definition balber_berutil.h:4779
Definition bdlb_variant.h:2592
Definition bdldfp_decimal.h:1890
Definition bdlt_datetz.h:161
static bool isValid(const Date &localDate, int offset)
Definition bdlt_datetz.h:405
int offset() const
Definition bdlt_datetz.h:513
Date localDate() const
Definition bdlt_datetz.h:507
Definition bdlt_date.h:294
int day() const
Return the day of the month in the range [1 .. 31] of this date.
Definition bdlt_date.h:955
void setYearMonthDay(int year, int month, int day)
Definition bdlt_date.h:899
int addDaysIfValid(int numDays)
int year() const
Return the year in the range [1 .. 9999] of this date.
Definition bdlt_date.h:1005
int month() const
Return the month of the year in the range [1 .. 12] of this date.
Definition bdlt_date.h:993
Definition bdlt_datetimetz.h:308
Datetime localDatetime() const
Definition bdlt_datetimetz.h:677
DateTz dateTz() const
Definition bdlt_datetimetz.h:671
TimeTz timeTz() const
Definition bdlt_datetimetz.h:689
int offset() const
Definition bdlt_datetimetz.h:683
Definition bdlt_datetime.h:330
Date date() const
Return the value of the "date" part of this object.
Definition bdlt_datetime.h:2234
Time time() const
Return the value of the "time" part of this object.
Definition bdlt_datetime.h:2345
Definition bdlt_iso8601utilconfiguration.h:224
void setFractionalSecondPrecision(int value)
Definition bdlt_timetz.h:190
Time localTime() const
Definition bdlt_timetz.h:531
static bool isValid(const Time &localTime, int offset)
Definition bdlt_timetz.h:421
Time utcTime() const
Definition bdlt_timetz.h:543
int offset() const
Return the time zone offset of this object in minutes from UTC.
Definition bdlt_timetz.h:537
Definition bdlt_time.h:195
void setTime(int hour, int minute=0, int second=0, int millisecond=0, int microsecond=0)
int microsecond() const
Return the value of the microsecond attribute of this time object.
Definition bdlt_time.h:933
static bool isValid(int hour, int minute=0, int second=0, int millisecond=0, int microsecond=0)
Definition bdlt_time.h:725
int second() const
Return the value of the second attribute of this time object.
Definition bdlt_time.h:956
int millisecond() const
Return the value of the millisecond attribute of this time object.
Definition bdlt_time.h:940
int minute() const
Return the value of the minute attribute of this time object.
Definition bdlt_time.h:948
int hour() const
Return the value of the hour attribute of this time object.
Definition bdlt_time.h:926
Definition bslstl_stringview.h:471
BSLS_KEYWORD_CONSTEXPR size_type length() const BSLS_KEYWORD_NOEXCEPT
Return the length of this view.
Definition bslstl_stringview.h:1913
BSLS_KEYWORD_CONSTEXPR const_pointer data() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_stringview.h:1988
Definition bslstl_string.h:1252
size_type length() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_string.h:7301
CHAR_TYPE * data() BSLS_KEYWORD_NOEXCEPT
Definition bslstl_string.h:7177
Definition bslstl_vector.h:1120
void resize(size_type newSize)
Definition bslstl_vector.h:4189
Definition bslstl_stringref.h:374
const CHAR_TYPE * data() const
Definition bslstl_stringref.h:962
size_type length() const
Definition bslstl_stringref.h:984
#define BSLA_UNREACHABLE
Definition bsla_unreachable.h:159
#define BSLMF_ASSERT(expr)
Definition bslmf_assert.h:231
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1976
#define BSLS_ASSERT_SAFE(X)
Definition bsls_assert.h:1917
#define BSLS_ASSERT_OPT(X)
Definition bsls_assert.h:2045
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
Definition balber_berconstants.h:84
TagType
Definition balber_berconstants.h:117
TagClass
Definition balber_berconstants.h:96
Definition balber_berutil.h:598
static int getBoolValue(bool *value, bsl::streambuf *streamBuf, int length)
Definition balber_berutil.h:4165
BerUtil_LengthImpUtil LengthUtil
Definition balber_berutil.h:605
static int putBoolValue(bsl::streambuf *streamBuf, bool value)
Definition balber_berutil.h:4186
Definition balber_berutil.h:774
static int putSignedCharValue(bsl::streambuf *streamBuf, signed char value)
Definition balber_berutil.h:4504
static int getCharValue(char *value, bsl::streambuf *streamBuf, int length)
Definition balber_berutil.h:4427
BerUtil_IntegerImpUtil IntegerUtil
Definition balber_berutil.h:780
BerUtil_LengthImpUtil LengthUtil
Definition balber_berutil.h:785
static int putUnsignedCharValue(bsl::streambuf *streamBuf, unsigned char value)
Definition balber_berutil.h:4511
static int putCharValue(bsl::streambuf *streamBuf, char value)
Definition balber_berutil.h:4489
static int getUnsignedCharValue(unsigned char *value, bsl::streambuf *streamBuf, int length)
Definition balber_berutil.h:4473
static int getSignedCharValue(signed char *value, bsl::streambuf *streamBuf, int length)
Definition balber_berutil.h:4459
Definition balber_berutil.h:331
@ k_NUM_BITS_PER_OCTET
Definition balber_berutil.h:334
Definition balber_berutil.h:1423
@ k_EXTENDED_BINARY_MIN_BDE_VERSION
Definition balber_berutil.h:1447
Value
Definition balber_berutil.h:1426
@ e_ISO8601_TIMETZ
Definition balber_berutil.h:1432
@ e_COMPACT_BINARY_DATETZ
Definition balber_berutil.h:1434
@ e_COMPACT_BINARY_TIMETZ
Definition balber_berutil.h:1438
@ e_COMPACT_BINARY_DATETIME
Definition balber_berutil.h:1435
@ e_COMPACT_BINARY_DATE
Definition balber_berutil.h:1433
@ e_EXTENDED_BINARY_TIME
Definition balber_berutil.h:1441
@ e_ISO8601_DATE
Definition balber_berutil.h:1427
@ e_EXTENDED_BINARY_TIMETZ
Definition balber_berutil.h:1442
@ e_COMPACT_BINARY_DATETIMETZ
Definition balber_berutil.h:1436
@ e_ISO8601_TIME
Definition balber_berutil.h:1431
@ e_ISO8601_DATETIME
Definition balber_berutil.h:1429
@ e_EXTENDED_BINARY_DATETIME
Definition balber_berutil.h:1439
@ e_COMPACT_BINARY_TIME
Definition balber_berutil.h:1437
@ e_ISO8601_DATETZ
Definition balber_berutil.h:1428
@ e_EXTENDED_BINARY_DATETIMETZ
Definition balber_berutil.h:1440
@ e_ISO8601_DATETIMETZ
Definition balber_berutil.h:1430
Definition balber_berutil.h:1640
static bool isExtendedBinary(unsigned char firstByte)
Definition balber_berutil.h:4826
static void detectType(Type::Value *type, unsigned char firstByte)
Definition balber_berutil.h:4876
BerUtil_StreambufUtil StreambufUtil
Definition balber_berutil.h:1657
BerUtil_DateAndTimeHeaderType Type
Definition balber_berutil.h:1652
static bool isExtendedBinaryWithoutTimezone(unsigned char firstByte)
Definition balber_berutil.h:4837
static int putExtendedBinaryWithoutTimezoneValue(bsl::streambuf *streamBuf)
Definition balber_berutil.h:5014
BerUtil_TimezoneOffsetImpUtil TimezoneUtil
Definition balber_berutil.h:1662
static int putExtendedBinaryWithTimezoneValue(bsl::streambuf *streamBuf, int timezoneOffsetInMinutes)
Definition balber_berutil.h:5022
BerUtil_DateAndTimeHeader Header
Definition balber_berutil.h:1647
static bool isReserved(unsigned char firstByte)
Definition balber_berutil.h:4809
static const int k_HEADER_LENGTH
Number of octets used to encode an extended-binary-encoding header.
Definition balber_berutil.h:1667
static void detectTypeIfNotReserved(bool *reserved, Type::Value *type, unsigned char firstByte)
Definition balber_berutil.h:4861
static int getValue(Header *value, bsl::streambuf *streamBuf)
Definition balber_berutil.h:4930
static int getValueIfNotReserved(Header *value, bsl::streambuf *streamBuf)
Definition balber_berutil.h:4898
static bool isExtendedBinaryWithTimezone(unsigned char firstByte)
Definition balber_berutil.h:4849
Definition balber_berutil.h:1509
Value
Definition balber_berutil.h:1512
@ e_EXTENDED_BINARY_WITH_TIMEZONE
Definition balber_berutil.h:1523
@ e_EXTENDED_BINARY_WITHOUT_TIMEZONE
Definition balber_berutil.h:1518
@ e_NOT_EXTENDED_BINARY
Definition balber_berutil.h:1513
Definition balber_berutil.h:1791
Value
Definition balber_berutil.h:1800
@ e_COMPACT_BINARY_DATE
Definition balber_berutil.h:1802
@ e_ISO8601_DATE
Definition balber_berutil.h:1801
BerUtil_DateAndTimeEncoding Encoding
Definition balber_berutil.h:1798
Definition balber_berutil.h:1877
BerUtil_DateTzEncoding DateTzEncoding
Definition balber_berutil.h:1895
bdlb::Variant2< bdlt::Date, bdlt::DateTz > DateOrDateTz
Definition balber_berutil.h:1934
BerUtil_Iso8601ImpUtil Iso8601Util
Definition balber_berutil.h:1910
@ k_COMPACT_BINARY_DATE_EPOCH
Definition balber_berutil.h:1937
BerUtil_StringImpUtil StringUtil
Definition balber_berutil.h:1925
static int putDateTzValue(bsl::streambuf *streamBuf, const bdlt::DateTz &date, const BerEncoderOptions *options)
static int getDateOrDateTzValue(DateOrDateTz *value, bsl::streambuf *streamBuf, int length)
Definition balber_berutil.h:5215
static int daysSinceEpochToDate(bdlt::Date *date, bsls::Types::Int64 daysSinceEpoch)
Definition balber_berutil.h:5275
BerUtil_TimezoneOffsetImpUtil TimezoneUtil
Definition balber_berutil.h:1930
BerUtil_DateAndTimeHeaderImpUtil DateAndTimeHeaderUtil
Definition balber_berutil.h:1885
static int getDateTzValue(bdlt::DateTz *value, bsl::streambuf *streamBuf, int length)
BerUtil_LengthImpUtil LengthUtil
Definition balber_berutil.h:1915
BerUtil_IntegerImpUtil IntegerUtil
Definition balber_berutil.h:1905
BerUtil_StreambufUtil StreambufUtil
Definition balber_berutil.h:1920
static int getDateValue(bdlt::Date *date, bsl::streambuf *streamBuf, int length)
static void dateToDaysSinceEpoch(bsls::Types::Int64 *daysSinceEpoch, const bdlt::Date &date)
Definition balber_berutil.h:5264
BerUtil_DateOrDateTzEncoding DateOrDateTzEncoding
Definition balber_berutil.h:1900
BerUtil_DateEncoding DateEncoding
Definition balber_berutil.h:1890
static int putDateValue(bsl::streambuf *streamBuf, const bdlt::Date &value, const BerEncoderOptions *options)
Definition balber_berutil.h:1840
Value
Definition balber_berutil.h:1849
@ e_COMPACT_BINARY_DATETZ
Definition balber_berutil.h:1853
@ e_COMPACT_BINARY_DATE
Definition balber_berutil.h:1852
@ e_ISO8601_DATETZ
Definition balber_berutil.h:1851
@ e_ISO8601_DATE
Definition balber_berutil.h:1850
BerUtil_DateAndTimeEncoding Encoding
Definition balber_berutil.h:1847
Definition balber_berutil.h:1815
BerUtil_DateAndTimeEncoding Encoding
Definition balber_berutil.h:1822
Value
Definition balber_berutil.h:1824
@ e_COMPACT_BINARY_DATETZ
Definition balber_berutil.h:1827
@ e_COMPACT_BINARY_DATE
Definition balber_berutil.h:1826
@ e_ISO8601_DATETZ
Definition balber_berutil.h:1825
Definition balber_berutil.h:2944
BerUtil_DateAndTimeEncoding Encoding
Definition balber_berutil.h:2951
@ k_EXTENDED_BINARY_MIN_BDE_VERSION
Definition balber_berutil.h:2961
Value
Definition balber_berutil.h:2953
@ e_COMPACT_BINARY_DATETIME
Definition balber_berutil.h:2955
@ e_EXTENDED_BINARY_DATETIME
Definition balber_berutil.h:2957
@ e_ISO8601_DATETIME
Definition balber_berutil.h:2954
@ e_COMPACT_BINARY_DATETIMETZ
Definition balber_berutil.h:2956
Definition balber_berutil.h:3046
static int getDatetimeTzValue(bdlt::DatetimeTz *value, bsl::streambuf *streamBuf, int length)
Definition balber_berutil.h:6262
BerUtil_DateAndTimeHeader DateAndTimeHeader
Definition balber_berutil.h:3063
BerUtil_DatetimeEncoding DatetimeEncoding
Definition balber_berutil.h:3078
static int getDatetimeOrDatetimeTzValue(DatetimeOrDatetimeTz *value, bsl::streambuf *streamBuf, int length)
Definition balber_berutil.h:6307
BerUtil_ExtendedBinaryEncodingUtil ExtendedBinaryEncodingUtil
Definition balber_berutil.h:3058
static int putDatetimeValue(bsl::streambuf *streamBuf, const bdlt::Datetime &value, const BerEncoderOptions *options)
Definition balber_berutil.h:6112
BerUtil_LengthImpUtil LengthUtil
Definition balber_berutil.h:3104
bdlb::Variant2< bdlt::Datetime, bdlt::DatetimeTz > DatetimeOrDatetimeTz
Definition balber_berutil.h:3128
BerUtil_Constants Constants
Definition balber_berutil.h:3052
BerUtil_DatetimeTzEncoding DatetimeTzEncoding
Definition balber_berutil.h:3083
BerUtil_Iso8601ImpUtil Iso8601Util
Definition balber_berutil.h:3099
static int putDatetimeTzValue(bsl::streambuf *streamBuf, const bdlt::DatetimeTz &value, const BerEncoderOptions *options)
Definition balber_berutil.h:6203
BerUtil_DateImpUtil DateUtil
Definition balber_berutil.h:3073
BerUtil_IntegerImpUtil IntegerUtil
Definition balber_berutil.h:3094
BerUtil_DatetimeOrDatetimeTzEncoding DatetimeOrDatetimeTzEncoding
Definition balber_berutil.h:3089
BerUtil_DateAndTimeHeaderImpUtil DateAndTimeHeaderUtil
Definition balber_berutil.h:3069
static int getDatetimeValue(bdlt::Datetime *value, bsl::streambuf *streamBuf, int length)
Definition balber_berutil.h:6158
BerUtil_StreambufUtil StreambufUtil
Definition balber_berutil.h:3109
BerUtil_StringImpUtil StringUtil
Definition balber_berutil.h:3114
BerUtil_TimezoneOffsetImpUtil TimezoneUtil
Definition balber_berutil.h:3123
BerUtil_TimeImpUtil TimeUtil
Definition balber_berutil.h:3118
Definition balber_berutil.h:3006
Value
Definition balber_berutil.h:3015
@ e_EXTENDED_BINARY_DATETIMETZ
Definition balber_berutil.h:3021
@ e_EXTENDED_BINARY_DATETIME
Definition balber_berutil.h:3020
@ e_COMPACT_BINARY_DATETIMETZ
Definition balber_berutil.h:3019
@ e_ISO8601_DATETIMETZ
Definition balber_berutil.h:3017
@ e_COMPACT_BINARY_DATETIME
Definition balber_berutil.h:3018
@ e_ISO8601_DATETIME
Definition balber_berutil.h:3016
BerUtil_DateAndTimeEncoding Encoding
Definition balber_berutil.h:3013
Definition balber_berutil.h:2975
Value
Definition balber_berutil.h:2984
@ e_EXTENDED_BINARY_DATETIMETZ
Definition balber_berutil.h:2988
@ e_COMPACT_BINARY_DATETIME
Definition balber_berutil.h:2986
@ e_COMPACT_BINARY_DATETIMETZ
Definition balber_berutil.h:2987
@ e_ISO8601_DATETIMETZ
Definition balber_berutil.h:2985
BerUtil_DateAndTimeEncoding Encoding
Definition balber_berutil.h:2982
@ k_EXTENDED_BINARY_MIN_BDE_VERSION
Definition balber_berutil.h:2992
Definition balber_berutil.h:1465
static bool useExtendedBinaryEncoding(const bdlt::Time &value, const BerEncoderOptions *options)
Definition balber_berutil.h:4674
static bool useBinaryEncoding(const BerEncoderOptions *options)
Definition balber_berutil.h:4735
BerUtil_DateAndTimeEncoding Encoding
Definition balber_berutil.h:1472
Definition balber_berutil.h:882
BerUtil_LengthImpUtil LengthUtil
Definition balber_berutil.h:894
static int putDoubleValue(bsl::streambuf *streamBuf, double value, const BerEncoderOptions *options=0)
static int putFloatValue(bsl::streambuf *streamBuf, float value, const BerEncoderOptions *options=0)
Definition balber_berutil.h:4544
static int putDecimal64Value(bsl::streambuf *streamBuf, bdldfp::Decimal64 value)
static int getDecimal64Value(bdldfp::Decimal64 *value, bsl::streambuf *streamBuf, int length)
static int getDoubleValue(double *value, bsl::streambuf *streamBuf, int length)
BerUtil_IntegerImpUtil IntegerUtil
Definition balber_berutil.h:889
static int getFloatValue(float *value, bsl::streambuf *streamBuf, int length)
Definition balber_berutil.h:4527
Definition balber_berutil.h:3661
BerUtil_CharacterImpUtil CharacterUtil
Definition balber_berutil.h:3673
bdlb::Variant2< bdlt::Datetime, bdlt::DatetimeTz > DatetimeOrDatetimeTz
Definition balber_berutil.h:3712
bdlb::Variant2< bdlt::Date, bdlt::DateTz > DateOrDateTz
Definition balber_berutil.h:3707
BerUtil_DatetimeImpUtil DatetimeUtil
Definition balber_berutil.h:3683
bdlb::Variant2< bdlt::Time, bdlt::TimeTz > TimeOrTimeTz
Definition balber_berutil.h:3716
BerUtil_FloatingPointImpUtil FloatingPointUtil
Definition balber_berutil.h:3688
BerUtil_BooleanImpUtil BooleanUtil
Definition balber_berutil.h:3668
BerUtil_IntegerImpUtil IntegerUtil
Definition balber_berutil.h:3693
static int getValue(DatetimeOrDatetimeTz *value, bsl::streambuf *streamBuf, int length, const BerDecoderOptions &options=BerDecoderOptions())
BerUtil_StringImpUtil StringUtil
Definition balber_berutil.h:3698
BerUtil_TimeImpUtil TimeUtil
Definition balber_berutil.h:3703
BerUtil_DateImpUtil DateUtil
Definition balber_berutil.h:3678
static int getValue(TYPE *value, bsl::streambuf *streamBuf, int length, const BerDecoderOptions &options=BerDecoderOptions())
Definition balber_berutil.h:6363
static int getValue(TimeOrTimeTz *value, bsl::streambuf *streamBuf, int length, const BerDecoderOptions &options=BerDecoderOptions())
Definition balber_berutil.h:393
BerUtil_Constants Constants
Definition balber_berutil.h:399
static int putIdentifierOctets(bsl::streambuf *streamBuf, BerConstants::TagClass tagClass, BerConstants::TagType tagType, int tagNumber)
static int getIdentifierOctets(BerConstants::TagClass *tagClass, BerConstants::TagType *tagType, int *tagNumber, int *accumNumBytesConsumed, bsl::streambuf *streamBuf)
Definition balber_berutil.h:3947
static int putStringValue(bsl::streambuf *streamBuf, const char *string, int stringLength)
Definition balber_berutil.h:6677
Definition balber_berutil.h:643
static int get40BitIntegerValue(bsls::Types::Int64 *value, bsl::streambuf *streamBuf)
Definition balber_berutil.h:4333
BerUtil_Constants Constants
Definition balber_berutil.h:650
static int putIntegerValue(bsl::streambuf *streamBuf, INTEGRAL_TYPE value)
static int getIntegerValue(INTEGRAL_TYPE *value, bsl::streambuf *streamBuf, int length)
BerUtil_StreambufUtil StreambufUtil
Definition balber_berutil.h:665
static int getIntegerValue(long long *value, bsl::streambuf *streamBuf, int length)
static int getNumOctetsToStream(int value)
static int getNumOctetsToStream(long long value)
BerUtil_RawIntegerImpUtil RawIntegerUtil
Definition balber_berutil.h:660
static int getNumOctetsToStream(INTEGRAL_TYPE value)
static int putIntegerGivenLength(bsl::streambuf *streamBuf, INTEGRAL_TYPE value, int length)
static int put40BitIntegerValue(bsl::streambuf *streamBuf, bsls::Types::Int64 value)
Definition balber_berutil.h:4395
BerUtil_LengthImpUtil LengthImpUtil
Definition balber_berutil.h:655
static int getNumOctetsToStream(short value)
static const int k_40_BIT_INTEGER_LENGTH
Number of octets used to encode a signed integer value in 40 bits.
Definition balber_berutil.h:670
Definition balber_berutil.h:1173
static int getDatetimeValue(bdlt::Datetime *value, bsl::streambuf *streamBuf, int length)
static int getDateTzValue(bdlt::DateTz *value, bsl::streambuf *streamBuf, int length)
static int getDatetimeTzValue(bdlt::DatetimeTz *value, bsl::streambuf *streamBuf, int length)
static int putDatetimeTzValue(bsl::streambuf *streamBuf, const bdlt::DatetimeTz &value, const BerEncoderOptions *options)
static int getTimeTzValue(bdlt::TimeTz *value, bsl::streambuf *streamBuf, int length)
static int putTimeValue(bsl::streambuf *streamBuf, const bdlt::Time &value, const BerEncoderOptions *options)
static int putDateTzValue(bsl::streambuf *streamBuf, const bdlt::DateTz &value, const BerEncoderOptions *options)
BerUtil_StringImpUtil StringUtil
Definition balber_berutil.h:1179
static int putTimeTzValue(bsl::streambuf *streamBuf, const bdlt::TimeTz &value, const BerEncoderOptions *options)
static int getDateValue(bdlt::Date *value, bsl::streambuf *streamBuf, int length)
static int getTimeValue(bdlt::Time *value, bsl::streambuf *streamBuf, int length)
static int putDatetimeValue(bsl::streambuf *streamBuf, const bdlt::Datetime &value, const BerEncoderOptions *options)
static int putDateValue(bsl::streambuf *streamBuf, const bdlt::Date &value, const BerEncoderOptions *options)
Definition balber_berutil.h:508
static int putIndefiniteLengthOctet(bsl::streambuf *streamBuf)
static int getEndOfContentOctets(int *accumNumBytesConsumed, bsl::streambuf *streamBuf)
BerUtil_RawIntegerImpUtil RawIntegerUtil
Definition balber_berutil.h:518
BerUtil_Constants Constants
Definition balber_berutil.h:514
static int putEndOfContentOctets(bsl::streambuf *streamBuf)
static int getLength(int *result, int *accumNumBytesConsumed, bsl::streambuf *streamBuf)
static int putLength(bsl::streambuf *streamBuf, int length)
Definition balber_berutil.h:3832
BerUtil_BooleanImpUtil BooleanUtil
Definition balber_berutil.h:3839
BerUtil_TimeImpUtil TimeUtil
Definition balber_berutil.h:3874
BerUtil_FloatingPointImpUtil FloatingPointUtil
Definition balber_berutil.h:3859
BerUtil_DatetimeImpUtil DatetimeUtil
Definition balber_berutil.h:3854
BerUtil_DateImpUtil DateUtil
Definition balber_berutil.h:3849
static int putValue(bsl::streambuf *streamBuf, const TYPE &value, const BerEncoderOptions *options)
Definition balber_berutil.h:6532
BerUtil_StringImpUtil StringUtil
Definition balber_berutil.h:3869
BerUtil_IntegerImpUtil IntegerUtil
Definition balber_berutil.h:3864
BerUtil_CharacterImpUtil CharacterUtil
Definition balber_berutil.h:3844
Definition balber_berutil.h:476
static int putIntegerGivenLength(bsl::streambuf *streamBuf, INTEGRAL_TYPE value, int length)
BerUtil_Constants Constants
Definition balber_berutil.h:482
Definition balber_berutil.h:348
static int putChars(bsl::streambuf *streamBuf, const char *buffer, int bufferLength)
Definition balber_berutil.h:4081
static int peekChar(char *value, bsl::streambuf *streamBuf)
Definition balber_berutil.h:4054
static int getChars(char *buffer, bsl::streambuf *streamBuf, int bufferLength)
Definition balber_berutil.h:4066
Definition balber_berutil.h:1073
static int putStringViewValue(bsl::streambuf *streamBuf, const bsl::string_view &value)
Definition balber_berutil.h:4591
static int putChars(bsl::streambuf *streamBuf, char value, int numChars)
static int putStringRefValue(bsl::streambuf *streamBuf, const bslstl::StringRef &value)
Definition balber_berutil.h:4602
static int putRawStringValue(bsl::streambuf *streamBuf, const char *string, int stringLength)
Definition balber_berutil.h:4563
static int getStringValue(bsl::string *value, bsl::streambuf *streamBuf, int length, const BerDecoderOptions &options)
BerUtil_LengthImpUtil LengthUtil
Definition balber_berutil.h:1080
static int putStringValue(bsl::streambuf *streamBuf, const bsl::string &value)
Definition balber_berutil.h:4581
Definition balber_berutil.h:2309
@ k_EXTENDED_BINARY_MIN_BDE_VERSION
Definition balber_berutil.h:2325
Value
Definition balber_berutil.h:2318
@ e_ISO8601_TIME
Definition balber_berutil.h:2319
@ e_COMPACT_BINARY_TIME
Definition balber_berutil.h:2320
@ e_EXTENDED_BINARY_TIME
Definition balber_berutil.h:2321
BerUtil_DateAndTimeEncoding Encoding
Definition balber_berutil.h:2316
Definition balber_berutil.h:2409
BerUtil_DateAndTimeHeaderImpUtil DateAndTimeHeaderUtil
Definition balber_berutil.h:2433
BerUtil_DateAndTimeHeaderType DateAndTimeHeaderType
Definition balber_berutil.h:2427
static int getTimeOrTimeTzValue(TimeOrTimeTz *value, bsl::streambuf *streamBuf, int length)
Definition balber_berutil.h:5808
BerUtil_StringImpUtil StringUtil
Definition balber_berutil.h:2453
static void timeToMicrosecondsSinceMidnight(bsls::Types::Int64 *microsecondsSinceMidnight, const bdlt::Time &time)
Definition balber_berutil.h:5555
BerUtil_TimeTzEncoding TimeTzEncoding
Definition balber_berutil.h:2468
BerUtil_StreambufUtil StreambufUtil
Definition balber_berutil.h:2458
static int getTimeTzValue(bdlt::TimeTz *value, bsl::streambuf *streamBuf, int length)
Definition balber_berutil.h:5731
BerUtil_TimeOrTimeTzEncoding TimeOrTimeTzEncoding
Definition balber_berutil.h:2473
static int microsecondsSinceMidnightToTime(bdlt::Time *time, bsls::Types::Int64 microsecondsSinceMidnight)
Definition balber_berutil.h:5612
static void timeToMillisecondsSinceMidnight(int *millisecondsSinceMidnight, const bdlt::Time &time)
Definition balber_berutil.h:5545
BerUtil_IntegerImpUtil IntegerUtil
Definition balber_berutil.h:2438
static int putTimeValue(bsl::streambuf *streamBuf, const bdlt::Time &value, const BerEncoderOptions *options)
Definition balber_berutil.h:5702
bdlb::Variant2< bdlt::Time, bdlt::TimeTz > TimeOrTimeTz
Definition balber_berutil.h:2482
BerUtil_TimezoneOffsetImpUtil TimezoneUtil
Definition balber_berutil.h:2478
BerUtil_ExtendedBinaryEncodingUtil ExtendedBinaryEncodingUtil
Definition balber_berutil.h:2417
static int putTimeTzValue(bsl::streambuf *streamBuf, const bdlt::TimeTz &value, const BerEncoderOptions *options)
Definition balber_berutil.h:5775
static int millisecondsSinceMidnightToTime(bdlt::Time *time, int millisecondsSinceMidnight)
Definition balber_berutil.h:5572
BerUtil_Iso8601ImpUtil Iso8601Util
Definition balber_berutil.h:2443
BerUtil_LengthImpUtil LengthUtil
Definition balber_berutil.h:2448
BerUtil_TimeEncoding TimeEncoding
Definition balber_berutil.h:2463
static int getTimeValue(bdlt::Time *value, bsl::streambuf *streamBuf, int length)
Definition balber_berutil.h:5663
BerUtil_DateAndTimeHeader DateAndTimeHeader
Definition balber_berutil.h:2422
Definition balber_berutil.h:2370
Value
Definition balber_berutil.h:2379
@ e_COMPACT_BINARY_TIME
Definition balber_berutil.h:2382
@ e_ISO8601_TIME
Definition balber_berutil.h:2380
@ e_COMPACT_BINARY_TIMETZ
Definition balber_berutil.h:2383
@ e_EXTENDED_BINARY_TIME
Definition balber_berutil.h:2384
@ e_ISO8601_TIMETZ
Definition balber_berutil.h:2381
@ e_EXTENDED_BINARY_TIMETZ
Definition balber_berutil.h:2385
BerUtil_DateAndTimeEncoding Encoding
Definition balber_berutil.h:2377
Definition balber_berutil.h:2339
BerUtil_DateAndTimeEncoding Encoding
Definition balber_berutil.h:2346
@ k_EXTENDED_BINARY_MIN_BDE_VERSION
Definition balber_berutil.h:2356
Value
Definition balber_berutil.h:2348
@ e_COMPACT_BINARY_TIMETZ
Definition balber_berutil.h:2351
@ e_COMPACT_BINARY_TIME
Definition balber_berutil.h:2350
@ e_ISO8601_TIMETZ
Definition balber_berutil.h:2349
@ e_EXTENDED_BINARY_TIMETZ
Definition balber_berutil.h:2352
Definition balber_berutil.h:1369
static int putTimezoneOffsetInMinutes(bsl::streambuf *streamBuf, int value)
@ k_TIMEZONE_LENGTH
Definition balber_berutil.h:1379
@ k_MIN_OFFSET
Definition balber_berutil.h:1373
@ k_MAX_OFFSET
Definition balber_berutil.h:1376
static int getTimezoneOffsetInMinutes(int *value, bsl::streambuf *streamBuf)
static bool isValidTimezoneOffsetInMinutes(int value)
static int getTimezoneOffsetInMinutesIfValid(int *value, bsl::streambuf *streamBuf)
Definition balber_berutil.h:198
static int putEndOfContentOctets(bsl::streambuf *streamBuf)
Definition balber_berutil.h:4022
static int getIdentifierOctets(bsl::streambuf *streamBuf, BerConstants::TagClass *tagClass, BerConstants::TagType *tagType, int *tagNumber, int *accumNumBytesConsumed)
static int getValue(bsl::streambuf *streamBuf, TYPE *value, int length, const BerDecoderOptions &options=BerDecoderOptions())
Definition balber_berutil.h:3991
static int putLength(bsl::streambuf *streamBuf, int length)
Definition balber_berutil.h:4034
static int getLength(bsl::streambuf *streamBuf, int *result, int *accumNumBytesConsumed)
Definition balber_berutil.h:3981
static int putIndefiniteLengthOctet(bsl::streambuf *streamBuf)
Definition balber_berutil.h:4028
static int putValue(bsl::streambuf *streamBuf, const TYPE &value, const BerEncoderOptions *options=0)
Definition balber_berutil.h:4041
static int putIdentifierOctets(bsl::streambuf *streamBuf, BerConstants::TagClass tagClass, BerConstants::TagType tagType, int tagNumber)
static int getEndOfContentOctets(bsl::streambuf *streamBuf, int *accumNumBytesConsumed)
Definition balber_berutil.h:3973
@ BDEM_INDEFINITE_LENGTH
Definition balber_berutil.h:206
@ INDEFINITE_LENGTH
Definition balber_berutil.h:207
@ k_INDEFINITE_LENGTH
Definition balber_berutil.h:201
static int parse(bsls::TimeInterval *result, const char *string, ssize_t length)
@ k_DATETZ_STRLEN
Definition bdlt_iso8601util.h:769
@ k_DATE_STRLEN
Definition bdlt_iso8601util.h:768
@ k_TIME_STRLEN
Definition bdlt_iso8601util.h:771
@ k_DATETIMETZ_STRLEN
Definition bdlt_iso8601util.h:775
@ k_MAX_STRLEN
Definition bdlt_iso8601util.h:779
@ k_TIMETZ_STRLEN
Definition bdlt_iso8601util.h:772
@ k_DATETIME_STRLEN
Definition bdlt_iso8601util.h:774
static int generate(char *buffer, ssize_t bufferLength, const bsls::TimeInterval &object)
Definition bdlt_iso8601util.h:2017
static bool isValidSerial(int serialDay)
Definition bdlt_prolepticdateimputil.h:669
static void serialToYmd(int *year, int *month, int *day, int serialDay)
static int ymdToSerial(int year, int month, int day)
Definition bdlt_timeunitratio.h:201
unsigned long long Uint64
Definition bsls_types.h:139
long long Int64
Definition bsls_types.h:134