Ejemplo n.º 1
0
void json_set_value(const jsonvalue& json, frame3f& value) {
    value = identity_frame3f;
    if(json.object_contains("from") or json.object_contains("to") or json.object_contains("up")) {
        auto from = z3f, to = zero3f, up = y3f;
        if(json.object_contains("from")) json_set_value(json.object_element("from"), from);
        if(json.object_contains("to")) json_set_value(json.object_element("to"), to);
        if(json.object_contains("up")) json_set_value(json.object_element("up"), up);
        value = lookat_frame(from, to, up);
    } else {
        if(json.object_contains("o")) json_set_value(json.object_element("o"), value.o);
        if(json.object_contains("x")) json_set_value(json.object_element("x"), value.x);
        if(json.object_contains("y")) json_set_value(json.object_element("y"), value.y);
        if(json.object_contains("z")) json_set_value(json.object_element("z"), value.z);
        value = orthonormalize_zyx(value);
    }
}
Ejemplo n.º 2
0
void json_set_optvalue(const jsonvalue& json, T& value, const string& name) {
    if(not json.object_contains(name)) return;
    json_set_value(json.object_element(name), value);
}
Ejemplo n.º 3
0
void json_set_value(const jsonvalue& json, vector<vector<mat4f>>& value) {
    value.resize(json.array_size());
    for(auto i : range(value.size())) json_set_value(json.array_element(i), value[i]);
}
Ejemplo n.º 4
0
static int
json_parse_object (const char **s, size_t *n, const char *objname,
		   size_t objsize, void *obj, const json_t *table,
		   size_t table_items)
{
    ssr_t        value;
    int          rc;
    const json_t *element;
    uint64_t     int_value;

    element = NULL;
    if (**s != '{') {
	WARN("Expected '{' at start of object parsing\n"
	     "Current position: %.*s\n",
	     (int)*n, *s);
	return (-1);
    }

    element = NULL;
    value.size = 0;
    value.data = NULL;
    (*s)++; (*n)--;
    while (*n) {
	if (**s ==  '"') {
	    rc = json_parse_string(s, n, &value);
	    if (rc == -1) {
		WARN("Value name for object %s failed at: %.*s\n",
		     objname, (int)*n, *s);
	    }
	    if (element) {
		rc = json_set_value(obj, element, &value);
		if (rc == -1) {return (-1);}
		element = NULL;
	    } else {
		element = json_find_element(&value, table, table_items);
		if (!element) {
		    WARN("Could not find element '%.*s' in object '%s'\n",
			 (int)value.size, value.data, objname);
		    return (-1);
		}
	    }
	} else if (**s == '{') {
	    if (element && element->type == JSON_ELEMENT_STRUCT_POINTER) {
		rc = json_parse_object(s, n, element->name, element->size,
				       *(void**)ELEMENTAT(obj, element->offset),
				       element->json, element->json_size);
		if (rc == -1) {
		    return (-1);
		}
	    } else if (element &&
		       element->type == JSON_ELEMENT_STRUCT_EMBEDDED) {
		rc = json_parse_object(s, n, element->name, element->size,
				       (void*)ELEMENTAT(obj, element->offset),
				       element->json, element->json_size);
		if (rc == -1) {
		    return (-1);
		}
	    } else {
		WARN("Unexpected '{' at %.*s\n",
		     (int)*n, *s);
		return (-1);
	    }
	} else if (**s == '}') {
	    return (0);
	} else if (**s >= '0' && **s <= '9') {
	    if (!element) {
		WARN("Unexpected digit at %.*s",
		     (int)*n, *s);
		return (-1);
	    }
	    json_parse_uint64(s, n, &int_value);
	    rc = json_set_int_value(obj, element, int_value);
	    if (rc == -1) {return (-1);}
	    element = NULL;
	}
	(*s)++; (*n)--;
    }
    return (0);
}