Пример #1
0
static bool asJson(yarp::os::ConstString &accum,
                   yarp::os::Value &v) {
    if (v.isInt()||v.isDouble()) {
        accum += v.toString();
        return true;
    }
    if (v.isString()||v.isVocab()) {
        yarp::os::ConstString x = v.toString();
        accum += "\"";
        for (int j=0; j<(int)x.length(); j++) {
            char ch = x[j];
            if (ch=='\n') {
                accum += '\\';
                accum += 'n';
            } else if (ch=='\r') {
                accum += '\\';
                accum += 'r';
            } else if (ch=='\0') {
                accum += '\\';
                accum += '0';
            } else {
                if (ch=='\\'||ch=='\"') {
                    accum += '\\';
                }
                accum += ch;
            }
        }
        accum += "\"";
    }
    if (v.isList()) {
        yarp::os::Bottle *bot = v.asList();
        return asJson(accum,bot);
    }
    return false;
}
static void
convertValue(JSContext *             jct,
             JS::MutableHandleValue  theData,
             const yarp::os::Value & inputValue)
{
    ODL_ENTER(); //####
    ODL_P2("jct = ", jct, "inputValue = ", &inputValue); //####
    if (inputValue.isBool())
    {
        theData.setBoolean(inputValue.asBool());
    }
    else if (inputValue.isInt())
    {
        theData.setInt32(inputValue.asInt());
    }
    else if (inputValue.isString())
    {
        YarpString value = inputValue.asString();
        JSString * aString = JS_NewStringCopyZ(jct, value.c_str());

        if (aString)
        {
            theData.setString(aString);
        }
    }
    else if (inputValue.isDouble())
    {
        theData.setDouble(inputValue.asDouble());
    }
    else if (inputValue.isDict())
    {
        yarp::os::Property * value = inputValue.asDict();

        if (value)
        {
            yarp::os::Bottle asList(value->toString());

            convertDictionary(jct, theData, asList);
        }
    }
    else if (inputValue.isList())
    {
        yarp::os::Bottle * value = inputValue.asList();

        if (value)
        {
            yarp::os::Property asDict;

            if (ListIsReallyDictionary(*value, asDict))
            {
                convertDictionary(jct, theData, *value);
            }
            else
            {
                convertList(jct, theData, *value);
            }
        }
    }
    else
    {
        // We don't know what to do with this...
        theData.setNull();
    }
    ODL_EXIT(); //####
} // convertValue