15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2010 Apple Inc. All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met:
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer.
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer in the
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    documentation and/or other materials provided with the distribution.
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h"
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "DecimalNumber.h"
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WTF {
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)unsigned DecimalNumber::bufferLengthForStringDecimal() const
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    unsigned length = 0;
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // if the exponent is negative the number decimal representation is of the form:
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // [<sign>]0.[<zeros>]<significand>
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_exponent < 0) {
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (m_sign)
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            ++length;
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        length += 2; // for "0."
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        length += -m_exponent - 1;
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        length += m_precision;
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return length;
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    unsigned digitsBeforeDecimalPoint = m_exponent + 1;
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // If the precision is <= than the number of digits to get up to the decimal
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // point, then there is no fractional part, number is of the form:
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // [<sign>]<significand>[<zeros>]
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_precision <= digitsBeforeDecimalPoint) {
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (m_sign)
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            ++length;
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        length += m_precision;
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        length += digitsBeforeDecimalPoint - m_precision;
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return length;
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // If we get here, number starts before the decimal point, and ends after it,
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // as such is of the form:
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // [<sign>]<significand-begin>.<significand-end>
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_sign)
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ++length;
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    length += digitsBeforeDecimalPoint;
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ++length; // for decimal point
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    length += m_precision - digitsBeforeDecimalPoint;
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return length;
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)unsigned DecimalNumber::bufferLengthForStringExponential() const
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    unsigned length = 0;
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_sign)
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ++length;
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Add the significand
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ++length;
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_precision > 1) {
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ++length; // for decimal point
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        length += m_precision - 1;
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Add "e+" or "e-"
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    length += 2;
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    int exponent = (m_exponent >= 0) ? m_exponent : -m_exponent;
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Add the exponent
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (exponent >= 100)
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ++length;
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (exponent >= 10)
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ++length;
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ++length;
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return length;
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)unsigned DecimalNumber::toStringDecimal(LChar* buffer, unsigned bufferLength) const
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ASSERT_UNUSED(bufferLength, bufferLength >= bufferLengthForStringDecimal());
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Should always be at least one digit to add to the string!
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ASSERT(m_precision);
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    LChar* next = buffer;
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // if the exponent is negative the number decimal representation is of the form:
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // [<sign>]0.[<zeros>]<significand>
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_exponent < 0) {
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        unsigned zeros = -m_exponent - 1;
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (m_sign)
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            *next++ = '-';
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        *next++ = '0';
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        *next++ = '.';
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (unsigned i = 0; i < zeros; ++i)
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            *next++ = '0';
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (unsigned i = 0; i < m_precision; ++i)
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            *next++ = m_significand[i];
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return next - buffer;
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    unsigned digitsBeforeDecimalPoint = m_exponent + 1;
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // If the precision is <= than the number of digits to get up to the decimal
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // point, then there is no fractional part, number is of the form:
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // [<sign>]<significand>[<zeros>]
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_precision <= digitsBeforeDecimalPoint) {
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (m_sign)
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            *next++ = '-';
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (unsigned i = 0; i < m_precision; ++i)
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            *next++ = m_significand[i];
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (unsigned i = 0; i < (digitsBeforeDecimalPoint - m_precision); ++i)
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            *next++ = '0';
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return next - buffer;
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // If we get here, number starts before the decimal point, and ends after it,
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // as such is of the form:
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // [<sign>]<significand-begin>.<significand-end>
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_sign)
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        *next++ = '-';
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (unsigned i = 0; i < digitsBeforeDecimalPoint; ++i)
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        *next++ = m_significand[i];
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    *next++ = '.';
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (unsigned i = digitsBeforeDecimalPoint; i < m_precision; ++i)
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        *next++ = m_significand[i];
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return next - buffer;
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)unsigned DecimalNumber::toStringExponential(LChar* buffer, unsigned bufferLength) const
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ASSERT_UNUSED(bufferLength, bufferLength >= bufferLengthForStringExponential());
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Should always be at least one digit to add to the string!
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ASSERT(m_precision);
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    LChar* next = buffer;
1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Add the sign
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_sign)
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        *next++ = '-';
1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Add the significand
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    *next++ = m_significand[0];
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_precision > 1) {
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        *next++ = '.';
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (unsigned i = 1; i < m_precision; ++i)
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            *next++ = m_significand[i];
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Add "e+" or "e-"
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    *next++ = 'e';
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    int exponent;
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_exponent >= 0) {
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        *next++ = '+';
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        exponent = m_exponent;
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    } else {
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        *next++ = '-';
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        exponent = -m_exponent;
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Add the exponent
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (exponent >= 100)
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        *next++ = '0' + exponent / 100;
1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (exponent >= 10)
1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        *next++ = '0' + (exponent % 100) / 10;
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    *next++ = '0' + exponent % 10;
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return next - buffer;
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace WTF
197