On 31.08.2011 23:19, Jonathan Wilkes wrote:
That probably means you're formatting that part of your list
as symbol-atom '1' instead of float-atom '1'.

Thus, the [route] object is outputting symbol-atom '1', which is just a
message where the selector is the symbol-atom '1'.  The right inlet of [f]
has a method for messages with the selector 'float', but it doesn't have a
symbol-atom '1' method, so you get the error.

Yes, that gave me a pointer to the problem (for those interested, see below)

In my object I do the following:

t_atom out_data[2]
SETSYMBOL(&out_data[0], gensym(key));
SETFLOAT(&out_data[1], json_object_get_double(val));
outlet_list(data_outlet,&s_list, 2,&out_data[0]);

What am I doing wrong?

CouchDB more or less always quotes the values, so it is a JSON string, which I now parse with:

case json_type_string:
        SETSYMBOL(&out_data[0], gensym(key));
        /* Float values might come as string */
        const char *string_value = json_object_get_string(val);
        float_value = atof(string_value);
        if (float_value == 0 && strcmp(string_value, "0") != 0) {
                SETSYMBOL(&out_data[1], gensym(string_value));
        } else {
                SETFLOAT(&out_data[1], float_value);
        }
        outlet_list(data_outlet, &s_list, 2, &out_data[0]);
        break;

Now, it is working as intended. Is this the "standard" way in C to get possible floats out of strings?

Best regards,
Thomas
--
"Prisons are needed only to provide the illusion that courts and police
are effective. They're a kind of job insurance."
(Leto II. in: Frank Herbert, God Emperor of Dune)
http://www.residuum.org/

_______________________________________________
[email protected] mailing list
UNSUBSCRIBE and account-management -> 
http://lists.puredata.info/listinfo/pd-list

Reply via email to