MCPcopy Create free account
hub / github.com/ablab/spades / totalExponent

Function totalExponent

ext/src/llvm/APFloat.cpp:284–333  ·  view source on GitHub ↗

This is ugly and needs cleaning up, but I don't immediately see how whilst remaining safe. */

Source from the content-addressed store, hash-verified

282/* This is ugly and needs cleaning up, but I don't immediately see
283 how whilst remaining safe. */
284static Expected<int> totalExponent(StringRef::iterator p,
285 StringRef::iterator end,
286 int exponentAdjustment) {
287 int unsignedExponent;
288 bool negative, overflow;
289 int exponent = 0;
290
291 if (p == end)
292 return createError("Exponent has no digits");
293
294 negative = *p == '-';
295 if (*p == '-' || *p == '+') {
296 p++;
297 if (p == end)
298 return createError("Exponent has no digits");
299 }
300
301 unsignedExponent = 0;
302 overflow = false;
303 for (; p != end; ++p) {
304 unsigned int value;
305
306 value = decDigitValue(*p);
307 if (value >= 10U)
308 return createError("Invalid character in exponent");
309
310 unsignedExponent = unsignedExponent * 10 + value;
311 if (unsignedExponent > 32767) {
312 overflow = true;
313 break;
314 }
315 }
316
317 if (exponentAdjustment > 32767 || exponentAdjustment < -32768)
318 overflow = true;
319
320 if (!overflow) {
321 exponent = unsignedExponent;
322 if (negative)
323 exponent = -exponent;
324 exponent += exponentAdjustment;
325 if (exponent > 32767 || exponent < -32768)
326 overflow = true;
327 }
328
329 if (overflow)
330 exponent = negative ? -32768: 32767;
331
332 return exponent;
333}
334
335static Expected<StringRef::iterator>
336skipLeadingZeroesAndAnyDot(StringRef::iterator begin, StringRef::iterator end,

Callers 1

Calls 2

createErrorFunction · 0.85
decDigitValueFunction · 0.85

Tested by

no test coverage detected