コード例 #1
0
ファイル: revision.c プロジェクト: SayCV/geda-gaf
static PyObject *Revision_get_objects(
	Revision *self, PyObject *args, PyObject *kwds)
{
	xorn_object_t *objects;
	size_t count;
	PyObject *list;
	size_t i;

	if (xorn_get_objects(self->rev, &objects, &count) == -1)
		return PyErr_NoMemory();

	list = PyList_New(count);
	if (list == NULL)
		return NULL;

	for (i = 0; i < count; i++) {
		PyObject *ob_item = build_object(objects[i]);
		if (ob_item == NULL) {
			Py_DECREF(list);
			free(objects);
			return NULL;
		}
		PyList_SET_ITEM(list, i, ob_item);
	}

	free(objects);
	return list;
}
コード例 #2
0
ファイル: revision.c プロジェクト: SayCV/geda-gaf
PyObject *Revision_copy_object(
	Revision *self, PyObject *args, PyObject *kwds)
{
	PyObject *rev_arg = NULL, *ob_arg = NULL;
	static char *kwlist[] = { "rev", "ob", NULL };

	if (!PyArg_ParseTupleAndKeywords(
		    args, kwds, "O!O!:Revision.copy_object", kwlist,
		    &RevisionType, &rev_arg, &ObjectType, &ob_arg))
		return NULL;

	if (!xorn_revision_is_transient(self->rev))
		return not_transient();

	if (!xorn_object_exists_in_revision(((Revision *)rev_arg)->rev,
					    ((Object *)ob_arg)->ob)) {
		PyErr_SetString(PyExc_KeyError,
				"Object does not exist in source revision");
		return NULL;
	}

	xorn_object_t ob = xorn_copy_object(
	    self->rev, ((Revision *)rev_arg)->rev,
		       ((Object *)ob_arg)->ob);
	return ob ? build_object(ob) : PyErr_NoMemory();
}
コード例 #3
0
ファイル: revision.c プロジェクト: SayCV/geda-gaf
static PyObject *Revision_add_object(
	Revision *self, PyObject *args, PyObject *kwds)
{
	PyObject *data_arg = NULL;
	static char *kwlist[] = { "data", NULL };

	if (!PyArg_ParseTupleAndKeywords(
		    args, kwds, "O:Revision.add_object", kwlist, &data_arg))
		return NULL;

	if (!xorn_revision_is_transient(self->rev))
		return not_transient();

	xorn_obtype_t type = xorn_obtype_none;
	const void *data = NULL;

	if (prepare_data(data_arg, &type, &data) == -1) {
		char buf[BUFSIZ];
		snprintf(buf, BUFSIZ,
			 "Revision.add_object() argument 'data' (pos 1) "
			 "must be of xorn.storage object type, not %.50s",
			 data_arg->ob_type->tp_name);
		PyErr_SetString(PyExc_TypeError, buf);
		return NULL;
	}

	xorn_object_t ob = xorn_add_object(self->rev, type, data);
	if (ob == NULL)
		return PyErr_NoMemory();

	return build_object(ob);
}
コード例 #4
0
ファイル: revision.c プロジェクト: SayCV/geda-gaf
static PyObject *Revision_get_object_location(
	Revision *self, PyObject *args, PyObject *kwds)
{
	PyObject *ob_arg = NULL;
	static char *kwlist[] = { "ob", NULL };

	if (!PyArg_ParseTupleAndKeywords(
		    args, kwds, "O!:Revision.get_object_location", kwlist,
		    &ObjectType, &ob_arg))
		return NULL;

	xorn_object_t attached_to = NULL;
	unsigned int position = -1;

	if (xorn_get_object_location(self->rev, ((Object *)ob_arg)->ob,
				     &attached_to, &position) == -1) {
		PyErr_SetString(PyExc_KeyError, "Object does not exist");
		return NULL;
	}

	if (attached_to == NULL)
		return Py_BuildValue("OI", Py_None, position);

	return Py_BuildValue("NI", build_object(attached_to), position);
}
コード例 #5
0
qeocore_type_t *types_from_json(const qeo_factory_t *factory, json_t *typedesc)
{
    qeocore_type_t *qeocore_top_type = NULL;

    do {
        if ((NULL == typedesc) || (NULL == factory)){
            break;
        }

        qeocore_top_type = build_object(factory, typedesc);
        if (NULL == qeocore_top_type) {
            qeo_log_e("build_object failed");
            break;
        }
    } while (0);

    return qeocore_top_type;
}
コード例 #6
0
ファイル: ptz0.cpp プロジェクト: sunkwei/zmovie
static std::string build_one(const cJSON *json, TypedObject &to)
{
	switch (json->type) {
	case 0:	// cJSON_False
	case 1:	// cJSON_True
		to.type = 0;
		to.data.bv = (json->type == cJSON_True);
		break;

	case 2: // cJSON_NULL
		to.type = 5;
		break;

	case 3: // cJSON_Number
		to.type = 1;
		to.data.nv = json->valuedouble;
		break;

	case 4: // cJSON_String
		to.type = 2;
		to.data.sv = json->valuestring;
		break;

	case 5: // cJSON_array
		to.type = 3;
		build_array(json->child, to.data.av);
		break;

	case 6: // cJSON_object
		to.type = 4;
		build_object(json->child, to.data.ov);
		break;
	}

	if (json->string)
		return json->string;
	else
		return "";	// 无名对象 ..
}
コード例 #7
0
ファイル: module.c プロジェクト: SayCV/geda-gaf
static PyObject *to_python_list(xorn_object_t *objects, size_t count)
{
	PyObject *list;
	size_t i;

	list = PyList_New(count);
	if (list == NULL)
		return NULL;

	for (i = 0; i < count; i++) {
		PyObject *ob_item = build_object(objects[i]);
		if (ob_item == NULL) {
			Py_DECREF(list);
			free(objects);
			return NULL;
		}
		PyList_SET_ITEM(list, i, ob_item);
	}

	free(objects);
	return list;
}
コード例 #8
0
static qeocore_type_t *build_member_type(const qeo_factory_t *factory, json_t *member)
{
    qeocore_type_t      *memberType = NULL;
    qeocore_typecode_t  qeoTypeCode;
    json_t              *member_type = json_object_get(member, KEY_TYPE);

    if (!((NULL != member_type) && (json_is_string(member_type)))) {
        qeo_log_e("Could not retrieve type");
        return memberType;
    }

    const char *jsonTypeCode = json_string_value(member_type);

    do {
        if (!strcmp(jsonTypeCode, "boolean")) {
            memberType  = qeocore_type_primitive_new(QEOCORE_TYPECODE_BOOLEAN);
            qeoTypeCode = QEOCORE_TYPECODE_BOOLEAN;
        }
        else if (!strcmp(jsonTypeCode, "byte")) {
            memberType  = qeocore_type_primitive_new(QEOCORE_TYPECODE_INT8);
            qeoTypeCode = QEOCORE_TYPECODE_INT8;
        }
        else if (!strcmp(jsonTypeCode, "int16")) {
            memberType  = qeocore_type_primitive_new(QEOCORE_TYPECODE_INT16);
            qeoTypeCode = QEOCORE_TYPECODE_INT16;
        }
        else if (!strcmp(jsonTypeCode, "int32")) {
            memberType  = qeocore_type_primitive_new(QEOCORE_TYPECODE_INT32);
            qeoTypeCode = QEOCORE_TYPECODE_INT32;
        }
        else if (!strcmp(jsonTypeCode, "int64")) {
            memberType  = qeocore_type_primitive_new(QEOCORE_TYPECODE_INT64);
            qeoTypeCode = QEOCORE_TYPECODE_INT64;
        }
        else if (!strcmp(jsonTypeCode, "float32")) {
            memberType  = qeocore_type_primitive_new(QEOCORE_TYPECODE_FLOAT32);
            qeoTypeCode = QEOCORE_TYPECODE_FLOAT32;
        }
        else if (!strcmp(jsonTypeCode, "string")) {
            size_t size = 0;
            memberType  = qeocore_type_string_new(size);
            qeoTypeCode = QEOCORE_TYPECODE_STRING;
        }
        else if (!strcmp(jsonTypeCode, "object")) {
            json_t *item = json_object_get(member, KEY_ITEM);
            if ((NULL == item) || !json_is_object(item)) {
                qeo_log_e("Could not find item");
                break;
            }
            memberType  = build_object(factory, item);
            qeoTypeCode = QEOCORE_TYPECODE_STRUCT;
        }
        else if (!strcmp(jsonTypeCode, "array")) {
            json_t *items = json_object_get(member, KEY_ITEMS);
            if ((NULL == items) || !json_is_object(items)) {
                qeo_log_e("Could not find items");
                break;
            }

            qeocore_type_t *elemtype = build_member_type(factory, items);
            if (elemtype == NULL){
                qeo_log_e("Could not build member for array");
                break;
            }

            memberType  = qeocore_type_sequence_new(elemtype);
            qeocore_type_free(elemtype);
            qeoTypeCode = QEOCORE_TYPECODE_SEQUENCE;
        }
        else if (!strcmp(jsonTypeCode, "enum")){
            json_t *item = json_object_get(member, KEY_ITEM);
            if ((NULL == item) || !json_is_object(item)) {
                qeo_log_e("Could not find item");
                break;
            }
            memberType  = build_enum(factory, item);
            qeoTypeCode = QEOCORE_TYPECODE_ENUM;

        }
        else {
            qeo_log_e("Unsupported jsonTypeCode %s", jsonTypeCode);
        }
    } while (0);

    if (NULL == memberType) {
        qeo_log_e("Could not make type (%s)", jsonTypeCode);
        return memberType;
    }

    json_object_set_new(member, KEY_QEO_TYPE_CODE, json_integer(qeoTypeCode));

    return memberType;
}