Branch: Tag:

2014-03-16

2014-03-16 12:04:42 by Arne Goedeke <el@laramies.com>

CritBit: do not cast through union

33:   #define int2float(x) (*(FLOAT_TYPE*)&(x))   #define float2int(x) (*(cb_char*)&(x))    - typedef union { -  FLOAT_TYPE f; -  cb_char i; - } cb_float; + static inline cb_string cb_encode_float(FLOAT_TYPE f) { +  cb_char str;    -  +  memcpy(&str, &f, sizeof(str));    - static inline cb_string cb_encode_float(const cb_float f) { -  cb_char str = f.i; -  +     if (str & MASK(cb_char, 1)) {    str = ~str;    } else {
52:   }      static inline FLOAT_TYPE cb_decode_float(cb_char s) { -  cb_float u; +  FLOAT_TYPE f; +     if (s & MASK(cb_char, 1)) {    s = (s ^ MASK(cb_char, 1));    } else {    s = (~s);    } -  u.i = s; +     -  return u.f; +  memcpy(&f, &s, sizeof(f)); +  +  return f;   }      #define CB_ADD_KEY_REF(x) do { } while(0)