void ItemToString(TCHAR *sbuf, ExpressionItem *item) { if ((item == NULL) || ((item->type & ITEMTYPE) != IT_CONST)) { *sbuf = 0; return; } switch (item->type & ITEMSUBTYPE) { case ITC_STRING: { TCHAR *ptr = *((TCHAR**)&(item->param1)); while ( (*(sbuf++) = *(ptr++)) ); } break; case ITC_ARRAY: { ArrayDesc *ad = (ArrayDesc *) item->param1; for (int index = 0; index < ad->count; index++) if ((ad->array[index]) && ((ad->array[index]->type & (ITEMTYPE|ITEMSUBTYPE)) == (IT_CONST | ITC_INT))) if ((*(sbuf++) = (TCHAR) *((__int64*)&(ad->array[index]->param1))) == 0) break; } break; case ITC_FLOAT: FloatFormat(sbuf, *((double*)&(item->param1)), 6); break; case ITC_INT: itoa64(*((__int64*)&(item->param1)), sbuf); break; } }
void Connection::WriteFloat(float val) { if(doConversion) { unsigned char buffer[8]; int nbytes = FloatConvert(val, buffer, FloatFormat()); Append(buffer, nbytes); } else Append((unsigned char *)&val, SIZEOF_FLOAT); }
static FloatFormat nativeFormat (void) { typedef std::numeric_limits<T> Limits; DE_ASSERT(Limits::radix == 2); return FloatFormat(Limits::min_exponent - 1, // These have a built-in offset of one Limits::max_exponent - 1, Limits::digits - 1, // don't count the hidden bit Limits::has_denorm != std::denorm_absent, Limits::has_infinity ? YES : NO, Limits::has_quiet_NaN ? YES : NO, ((Limits::has_denorm == std::denorm_present) ? YES : (Limits::has_denorm == std::denorm_absent) ? NO : MAYBE)); }