All pastes #113924 Raw Edit

Anonymous

public text v1 · immutable
·published 2006-08-03 20:37 UTC
rendered paste body
int String::copyToUTF8 (uint8* buffer) const
{
#if JUCE_STRINGS_ARE_UNICODE
    int num = 0, index = 0;

    for (;;)
    {
        const uint32 c = (uint32) text->text [index++];

        if (c >= 0x80)
        {
            int numExtraBytes = 1;

            if (c >= 0x800)
            {
                ++numExtraBytes;

                if (c >= 0x10000)
                {
                    ++numExtraBytes;

                    if (c >= 0x200000)
                    {
                        ++numExtraBytes;

                        if (c >= 0x4000000)
                            ++numExtraBytes;
                    }
                }
            }

            if (buffer != 0)
            {
                buffer [num++] = (uint8) ((0xff << (7 - numExtraBytes)) | (c >> (numExtraBytes * 6)));

                while (--numExtraBytes >= 0)
                    buffer [num++] = (uint8) (0x80 | (0x3f & (c >> (numExtraBytes * 6))));
            }
            else
            {
                num += numExtraBytes + 1;
            }
        }
        else
        {
            if (buffer != 0)
                buffer [num] = (uint8) c;

            ++num;
        }

        if (c == 0)
            break;
    }

    return num;

#else
    const int numBytes = length() + 1;

    if (buffer != 0)
        copyToBuffer ((char*) buffer, numBytes);

    return numBytes;
#endif
}