コード例 #1
0
static qeocore_type_t *type_unnest_register(qeo_factory_t *factory)
{
    qeocore_type_t *outer = NULL;
    qeocore_type_t *member = NULL;
    // the outer struct
    assert(NULL != (outer = qeocore_type_struct_new("org.qeo.test.NestedTests")));
    assert(NULL != (member = qeocore_type_primitive_new(QEOCORE_TYPECODE_INT32)));
    assert(QEO_OK == qeocore_type_struct_add(outer, member, "outer_int32", &_outer_int32_id, QEOCORE_FLAG_KEY));
    qeocore_type_free(member);
    assert(NULL != (member = qeocore_type_primitive_new(QEOCORE_TYPECODE_INT8)));
    assert(QEO_OK == qeocore_type_struct_add(outer, member, "outer_int8", &_outer_int8_id, QEOCORE_FLAG_NONE));
    qeocore_type_free(member);
    assert(NULL != (member = qeocore_type_string_new(0)));
    assert(QEO_OK == qeocore_type_struct_add(outer, member, "outer_string", &_outer_string_id, QEOCORE_FLAG_NONE));
    qeocore_type_free(member);
    assert(NULL != (member = qeocore_type_primitive_new(QEOCORE_TYPECODE_INT16)));
    assert(QEO_OK == qeocore_type_struct_add(outer, member, "outer_int16", &_outer_int16_id, QEOCORE_FLAG_NONE));
    qeocore_type_free(member);
    assert(NULL != (member = qeocore_type_primitive_new(QEOCORE_TYPECODE_INT64)));
    assert(QEO_OK == qeocore_type_struct_add(outer, member, "outer_int64", &_outer_int64_id, QEOCORE_FLAG_NONE));
    qeocore_type_free(member);

    assert(QEO_OK == qeocore_type_register(factory, outer, "org.qeo.test.QDMTestDynType"));
    return outer;
}
コード例 #2
0
ファイル: test.c プロジェクト: FlavioFalcao/tinq-core
END_TEST

START_TEST(test_dynamic_type)
{
    qeocore_type_t *structure = NULL, *sequence = NULL, *string = NULL, *primitive = NULL;
    qeocore_member_id_t id;

    /* init */
    stub_init();
    /* test */
    fail_unless(NULL != (structure = qeocore_type_struct_new("a_dynamic_struct")));
    fail_unless(NULL != (string = qeocore_type_string_new(0)));
    fail_unless(NULL != (primitive = qeocore_type_primitive_new(QEOCORE_TYPECODE_INT32)));
    fail_unless(NULL != (sequence = qeocore_type_sequence_new(primitive)));
    qeocore_type_free(primitive);
    id = QEOCORE_MEMBER_ID_DEFAULT;
    fail_unless(QEO_OK == qeocore_type_struct_add(structure, string, "a_string", &id, QEOCORE_FLAG_KEY));
    qeocore_type_free(string);
    id = QEOCORE_MEMBER_ID_DEFAULT;
    fail_unless(QEO_OK == qeocore_type_struct_add(structure, sequence, "a_sequence", &id, QEOCORE_FLAG_NONE));
    qeocore_type_free(sequence);
    /* clean up */
    qeocore_type_free(structure);
    stub_fini();
}
コード例 #3
0
static qeocore_type_t *type_register(qeo_factory_t *factory)
{
    qeocore_type_t *bigdata = NULL;
    qeocore_type_t *primitive = NULL;
    qeocore_type_t *sequence = NULL;

    assert(NULL != (bigdata = qeocore_type_struct_new("org.qeo.test.bigdata")));
    assert(NULL != (primitive = qeocore_type_primitive_new(QEOCORE_TYPECODE_INT32)));
    assert(QEO_OK == qeocore_type_struct_add(bigdata, primitive, "size", &_size_id, QEOCORE_FLAG_KEY));
    qeocore_type_free(primitive);
    assert(NULL != (primitive = qeocore_type_primitive_new(QEOCORE_TYPECODE_INT8)));
    assert(NULL != (sequence = qeocore_type_sequence_new(primitive)));
    assert(QEO_OK == qeocore_type_struct_add(bigdata, sequence, "buf", &_buf_id, QEOCORE_FLAG_NONE));
    qeocore_type_free(sequence);
    qeocore_type_free(primitive);
    assert(QEO_OK == qeocore_type_register(factory, bigdata, "org.qeo.test.bigdata"));
    return bigdata;
}
コード例 #4
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;
}