for (;;) {
final long b = (_bytes[index++]) & 0xFF;
if (b == 0)
break;
if (shift == 0) {
throw new ConversionException("Unexpected float byte value " + b + " at " + (index - 1));
}
if (shift > 7) {
bits = (bits << 7) | (b & 0x7FL);
shift -= 7;
} else {
bits = (bits << shift) | ((b & 0x7FL) >> (7 - shift));
shift = 0;
}
}
if (shift > 0)
bits <<= shift;
if ((bits & 0x8000000000000000L) != 0) {
bits ^= -0x8000000000000000L;
} else {
bits = ~bits;
}
result = Double.longBitsToDouble(bits);
} else {
throw new ConversionException("Mismatched type " + type + " is not TYPE_DOUBLE at " + _index);
}
_index = index;
return result;
}