Пример #1
0
void BuiltStyledStreamWriter::writeValue(Value const& value) {
    switch (value.type()) {
    case nullValue:
        pushValue(nullSymbol_);
        break;
    case intValue:
        pushValue(valueToString(value.asLargestInt()));
        break;
    case uintValue:
        pushValue(valueToString(value.asLargestUInt()));
        break;
    case realValue:
        pushValue(valueToString(value.asDouble(), useSpecialFloats_, precision_));
        break;
    case stringValue:
    {
        // Is NULL is possible for value.string_?
        char const* str;
        char const* end;
        bool ok = value.getString(&str, &end);
        if (ok) pushValue(valueToQuotedStringN(str, static_cast<unsigned>(end-str)));
        else pushValue("");
        break;
    }
    case booleanValue:
        pushValue(valueToString(value.asBool()));
        break;
    case arrayValue:
        writeArrayValue(value);
        break;
    case objectValue: {
        Value::Members members(value.getMemberNames());
        if (members.empty())
            pushValue("{}");
        else {
            writeWithIndent("{");
            indent();
            Value::Members::iterator it = members.begin();
            for (;;) {
                std::string const& name = *it;
                Value const& childValue = value[name];
                writeCommentBeforeValue(childValue);
                writeWithIndent(valueToQuotedStringN(name.data(), static_cast<unsigned>(name.length())));
                *sout_ << colonSymbol_;
                writeValue(childValue);
                if (++it == members.end()) {
                    writeCommentAfterValueOnSameLine(childValue);
                    break;
                }
                *sout_ << ",";
                writeCommentAfterValueOnSameLine(childValue);
            }
            unindent();
            writeWithIndent("}");
        }
    }
    break;
    }
}
Пример #2
0
void FastWriter::writeValue(const Value& value) {
    switch (value.type()) {
    case nullValue:
        if (!dropNullPlaceholders_)
            document_ += "null";
        break;
    case intValue:
        document_ += valueToString(value.asLargestInt());
        break;
    case uintValue:
        document_ += valueToString(value.asLargestUInt());
        break;
    case realValue:
        document_ += valueToString(value.asDouble());
        break;
    case stringValue:
    {
        // Is NULL possible for value.string_? No.
        char const* str;
        char const* end;
        bool ok = value.getString(&str, &end);
        if (ok) document_ += valueToQuotedStringN(str, static_cast<unsigned>(end-str));
        break;
    }
    case booleanValue:
        document_ += valueToString(value.asBool());
        break;
    case arrayValue: {
        document_ += '[';
        ArrayIndex size = value.size();
        for (ArrayIndex index = 0; index < size; ++index) {
            if (index > 0)
                document_ += ',';
            writeValue(value[index]);
        }
        document_ += ']';
    }
    break;
    case objectValue: {
        Value::Members members(value.getMemberNames());
        document_ += '{';
        for (Value::Members::iterator it = members.begin(); it != members.end();
                ++it) {
            const JSONCPP_STRING& name = *it;
            if (it != members.begin())
                document_ += ',';
            document_ += valueToQuotedStringN(name.data(), static_cast<unsigned>(name.length()));
            document_ += yamlCompatiblityEnabled_ ? ": " : ":";
            writeValue(value[name]);
        }
        document_ += '}';
    }
    break;
    }
}
Пример #3
0
void StyledStreamWriter::writeValue(const Value& value) {
    switch (value.type()) {
    case nullValue:
        pushValue("null");
        break;
    case intValue:
        pushValue(valueToString(value.asLargestInt()));
        break;
    case uintValue:
        pushValue(valueToString(value.asLargestUInt()));
        break;
    case realValue:
        pushValue(valueToString(value.asDouble()));
        break;
    case stringValue:
    {
        // Is NULL possible for value.string_?
        char const* str;
        char const* end;
        bool ok = value.getString(&str, &end);
        if (ok) pushValue(valueToQuotedStringN(str, static_cast<unsigned>(end-str)));
        else pushValue("");
        break;
    }
    case booleanValue:
        pushValue(valueToString(value.asBool()));
        break;
    case arrayValue:
        writeArrayValue(value);
        break;
    case objectValue: {
        Value::Members members(value.getMemberNames());
        if (members.empty())
            pushValue("{}");
        else {
            writeWithIndent("{");
            indent();
            Value::Members::iterator it = members.begin();
            for (;;) {
                const std::string& name = *it;
                const Value& childValue = value[name];
                writeCommentBeforeValue(childValue);
                writeWithIndent(valueToQuotedString(name.c_str()));
                *document_ << " : ";
                writeValue(childValue);
                if (++it == members.end()) {
                    writeCommentAfterValueOnSameLine(childValue);
                    break;
                }
                *document_ << ",";
                writeCommentAfterValueOnSameLine(childValue);
            }
            unindent();
            writeWithIndent("}");
        }
    }
    break;
    }
}