示例#1
0
void writeDataAsCppLiteral (const MemoryBlock& mb, OutputStream& out)
{
    const int maxCharsOnLine = 250;

    const unsigned char* data = (const unsigned char*) mb.getData();
    int charsOnLine = 0;

    bool canUseStringLiteral = mb.getSize() < 32768; // MS compilers can't handle big string literals..

    if (canUseStringLiteral)
    {
        unsigned int numEscaped = 0;

        for (size_t i = 0; i < mb.getSize(); ++i)
        {
            const unsigned int num = (unsigned int) data[i];
            if (! ((num >= 32 && num < 127) || num == '\t' || num == '\r' || num == '\n'))
            {
                if (++numEscaped > mb.getSize() / 4)
                {
                    canUseStringLiteral = false;
                    break;
                }
            }
        }
    }

    if (! canUseStringLiteral)
    {
        out << "{ ";

        for (size_t i = 0; i < mb.getSize(); ++i)
        {
            const int num = (int) (unsigned int) data[i];
            out << num << ',';

            charsOnLine += 2;
            if (num >= 10)
                ++charsOnLine;
            if (num >= 100)
                ++charsOnLine;

            if (charsOnLine >= maxCharsOnLine)
            {
                charsOnLine = 0;
                out << newLine;
            }
        }

        out << "0,0 };";
    }
    else
    {
        out << "\"";
        writeEscapeChars (out, (const char*) data, (int) mb.getSize(), maxCharsOnLine, true, false);
        out << "\";";
    }
}
示例#2
0
 String addEscapeChars (const String& s)
 {
     MemoryOutputStream out;
     writeEscapeChars (out, s.toUTF8().getAddress(), -1, -1, false, true, true);
     return out.toUTF8();
 }