8#ifndef INCLUDED_BDLDFP_DECIMALCONVERTUTIL_INTELDFP
9#define INCLUDED_BDLDFP_DECIMALCONVERTUTIL_INTELDFP
69#include <bdlscm_version.h>
73#ifdef BDLDFP_DECIMALPLATFORM_INTELDFP
81#include <bsl_cstring.h>
94struct DecimalConvertUtil_IntelDfp {
102 static double decimal32ToDouble (Decimal32 decimal);
103 static double decimal64ToDouble (Decimal64 decimal);
104 static double decimal128ToDouble(Decimal128 decimal);
135 static double decimalToDouble (Decimal32 decimal);
136 static double decimalToDouble (Decimal64 decimal);
137 static double decimalToDouble (Decimal128 decimal);
141 static float decimal32ToFloat (Decimal32 decimal);
142 static float decimal64ToFloat (Decimal64 decimal);
143 static float decimal128ToFloat(Decimal128 decimal);
174 static float decimalToFloat (Decimal32 decimal);
175 static float decimalToFloat (Decimal64 decimal);
176 static float decimalToFloat (Decimal128 decimal);
181 static void decimal32ToDPD(
unsigned char *buffer,
183 static void decimal64ToDPD(
unsigned char *buffer,
185 static void decimal128ToDPD(
unsigned char *buffer,
197 static void decimalToDPD(
unsigned char *buffer,
199 static void decimalToDPD(
unsigned char *buffer,
201 static void decimalToDPD(
unsigned char *buffer,
206 static Decimal32 decimal32FromDPD(
const unsigned char *buffer);
207 static Decimal64 decimal64FromDPD(
const unsigned char *buffer);
215 static Decimal128 decimal128FromDPD(
const unsigned char *buffer);
224 static void decimalFromDPD(Decimal32 *decimal,
225 const unsigned char *buffer);
226 static void decimalFromDPD(Decimal64 *decimal,
227 const unsigned char *buffer);
228 static void decimalFromDPD(Decimal128 *decimal,
229 const unsigned char *buffer);
233 static void decimal32ToBID(
unsigned char *buffer,
235 static void decimal64ToBID(
unsigned char *buffer,
237 static void decimal128ToBID(
unsigned char *buffer,
249 static void decimalToBID(
unsigned char *buffer,
251 static void decimalToBID(
unsigned char *buffer,
253 static void decimalToBID(
unsigned char *buffer,
258 static Decimal32 decimal32FromBID(
const unsigned char *buffer);
259 static Decimal64 decimal64FromBID(
const unsigned char *buffer);
267 static Decimal128 decimal128FromBID(
const unsigned char *buffer);
276 static void decimalFromBID(Decimal32 *decimal,
277 const unsigned char *buffer);
278 static void decimalFromBID(Decimal64 *decimal,
279 const unsigned char *buffer);
280 static void decimalFromBID(Decimal128 *decimal,
281 const unsigned char *buffer);
292DecimalConvertUtil_IntelDfp::decimal32ToDouble(
Decimal32 decimal)
294 return decimalToDouble(decimal);
299DecimalConvertUtil_IntelDfp::decimal64ToDouble(
Decimal64 decimal)
301 return decimalToDouble(decimal);
306DecimalConvertUtil_IntelDfp::decimal128ToDouble(
Decimal128 decimal)
308 return decimalToDouble(decimal);
313DecimalConvertUtil_IntelDfp::decimalToDouble(
Decimal32 decimal)
316 return __bid32_to_binary64(decimal.data()->d_raw, &flags);
321DecimalConvertUtil_IntelDfp::decimalToDouble(
Decimal64 decimal)
324 return __bid64_to_binary64(decimal.data()->d_raw, &flags);
329DecimalConvertUtil_IntelDfp::decimalToDouble(
Decimal128 decimal)
332 return __bid128_to_binary64(decimal.data()->d_raw, &flags);
339DecimalConvertUtil_IntelDfp::decimal32ToFloat(
Decimal32 decimal)
341 return decimalToFloat(decimal);
345DecimalConvertUtil_IntelDfp::decimal64ToFloat(
Decimal64 decimal)
347 return decimalToFloat(decimal);
351DecimalConvertUtil_IntelDfp::decimal128ToFloat(
Decimal128 decimal)
353 return decimalToFloat(decimal);
358DecimalConvertUtil_IntelDfp::decimalToFloat(
Decimal32 decimal)
361 return __bid32_to_binary32(decimal.data()->d_raw, &flags);
366DecimalConvertUtil_IntelDfp::decimalToFloat(
Decimal64 decimal)
369 return __bid64_to_binary32(decimal.data()->d_raw, &flags);
374DecimalConvertUtil_IntelDfp::decimalToFloat(
Decimal128 decimal)
377 return __bid128_to_binary32(decimal.data()->d_raw, &flags);
383void DecimalConvertUtil_IntelDfp::decimal32ToDPD(
unsigned char *buffer,
386 decimalToDPD(buffer, decimal);
390void DecimalConvertUtil_IntelDfp::decimal64ToDPD(
unsigned char *buffer,
393 decimalToDPD(buffer, decimal);
397void DecimalConvertUtil_IntelDfp::decimal128ToDPD(
unsigned char *buffer,
400 decimalToDPD(buffer, decimal);
404void DecimalConvertUtil_IntelDfp::decimalToDPD(
unsigned char *buffer,
407 decimal.data()->d_raw = __bid_to_dpd32(decimal.data()->d_raw);
408 bsl::memcpy(buffer, &decimal,
sizeof(decimal));
412void DecimalConvertUtil_IntelDfp::decimalToDPD(
unsigned char *buffer,
415 decimal.data()->d_raw = __bid_to_dpd64(decimal.data()->d_raw);
416 bsl::memcpy(buffer, &decimal,
sizeof(decimal));
420void DecimalConvertUtil_IntelDfp::decimalToDPD(
unsigned char *buffer,
423 decimal.data()->d_raw = __bid_to_dpd128(decimal.data()->d_raw);
424 bsl::memcpy(buffer, &decimal,
sizeof(decimal));
430Decimal32 DecimalConvertUtil_IntelDfp::decimal32FromDPD(
431 const unsigned char *buffer)
436 bsl::memcpy(&value, buffer,
sizeof(value));
437 value.d_raw = __bid_dpd_to_bid32(value.d_raw);
443Decimal64 DecimalConvertUtil_IntelDfp::decimal64FromDPD(
444 const unsigned char *buffer)
449 bsl::memcpy(&value, buffer,
sizeof(value));
450 value.d_raw = __bid_dpd_to_bid64(value.d_raw);
456Decimal128 DecimalConvertUtil_IntelDfp::decimal128FromDPD(
457 const unsigned char *buffer)
462 bsl::memcpy(&value, buffer,
sizeof(value));
463 value.d_raw = __bid_dpd_to_bid128(value.d_raw);
469void DecimalConvertUtil_IntelDfp::decimalFromDPD(
Decimal32 *decimal,
470 const unsigned char *buffer)
475 *decimal = decimal32FromDPD(buffer);
479void DecimalConvertUtil_IntelDfp::decimalFromDPD(
Decimal64 *decimal,
480 const unsigned char *buffer)
485 *decimal = decimal64FromDPD(buffer);
489void DecimalConvertUtil_IntelDfp::decimalFromDPD(
Decimal128 *decimal,
490 const unsigned char *buffer)
495 *decimal = decimal128FromDPD(buffer);
502DecimalConvertUtil_IntelDfp::decimal32ToBID(
unsigned char *buffer,
505 decimalToBID(buffer, decimal);
510DecimalConvertUtil_IntelDfp::decimal64ToBID(
unsigned char *buffer,
513 decimalToBID(buffer, decimal);
517void DecimalConvertUtil_IntelDfp::decimal128ToBID(
unsigned char *buffer,
520 decimalToBID(buffer, decimal);
524void DecimalConvertUtil_IntelDfp::decimalToBID(
unsigned char *buffer,
527 bsl::memcpy(buffer, &decimal,
sizeof(decimal));
531void DecimalConvertUtil_IntelDfp::decimalToBID(
unsigned char *buffer,
534 bsl::memcpy(buffer, &decimal,
sizeof(decimal));
538void DecimalConvertUtil_IntelDfp::decimalToBID(
unsigned char *buffer,
541 bsl::memcpy(buffer, &decimal,
sizeof(decimal));
547Decimal32 DecimalConvertUtil_IntelDfp::decimal32FromBID(
548 const unsigned char *buffer)
553 bsl::memcpy(&value, buffer,
sizeof(value));
559Decimal64 DecimalConvertUtil_IntelDfp::decimal64FromBID(
560 const unsigned char *buffer)
565 bsl::memcpy(&value, buffer,
sizeof(value));
571Decimal128 DecimalConvertUtil_IntelDfp::decimal128FromBID(
572 const unsigned char *buffer)
577 bsl::memcpy(&value, buffer,
sizeof(value));
583void DecimalConvertUtil_IntelDfp::decimalFromBID(
Decimal32 *decimal,
584 const unsigned char *buffer)
589 *decimal = decimal32FromBID(buffer);
593void DecimalConvertUtil_IntelDfp::decimalFromBID(
Decimal64 *decimal,
594 const unsigned char *buffer)
599 *decimal = decimal64FromBID(buffer);
603void DecimalConvertUtil_IntelDfp::decimalFromBID(
Decimal128 *decimal,
604 const unsigned char *buffer)
609 *decimal = decimal128FromBID(buffer);
Imp::ValueType64 ValueType64
Definition bdldfp_decimalimputil.h:250
Imp::ValueType128 ValueType128
Definition bdldfp_decimalimputil.h:251
Imp::ValueType32 ValueType32
Definition bdldfp_decimalimputil.h:249
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1976
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
Definition bdldfp_decimal.h:747
Decimal_Type128 Decimal128
Definition bdldfp_decimal.h:754
Decimal_Type32 Decimal32
Definition bdldfp_decimal.h:749
Decimal_Type64 Decimal64
Definition bdldfp_decimal.h:750