コード例 #1
0
LPDRMETA with_dr_store::t_meta(const char * libname, const char * metaname) {
    LPDRMETALIB lib = t_metalib(libname);
    if (lib == NULL) return NULL;

    LPDRMETA meta = dr_lib_find_meta_by_name(lib, metaname);
    EXPECT_TRUE(meta) << "dr_store " << libname << " have no meta " << metaname;
    return meta;
}
コード例 #2
0
int WriteTest::write(const char * typeName, const void * data, size_t data_size) {
    LPDRMETA meta = dr_lib_find_meta_by_name(m_metaLib, typeName);
    EXPECT_TRUE(meta) << "get meta " << typeName << " error!";

    t_elist_clear();

    int r = dr_pbuf_write(m_buffer, sizeof(m_buffer), data, data_size, meta, t_em());
    m_bufffer_len = r >= 0 ? (size_t)r : 0;
    return r;
}
コード例 #3
0
int ReadTest::read(const char * encodeTypeName, const char * decodeTypeName, const char * defs) {
    LPDRMETA meta = dr_lib_find_meta_by_name(m_metaLib, encodeTypeName);
    EXPECT_TRUE(meta) << "get meta " << encodeTypeName << " error!";

    char buf[1024];

    int r = dr_cfg_read(buf, sizeof(buf), t_cfg_parse(defs), meta, 0, t_em());
    EXPECT_GT(r, 0);

    return read(decodeTypeName, buf, r);
}
コード例 #4
0
int WriteTest::write(const char * typeName, const char * defs) {
    LPDRMETA meta = dr_lib_find_meta_by_name(m_metaLib, typeName);
    EXPECT_TRUE(meta) << "get meta " << typeName << " error!";

    char buf[1024];

    int r = dr_cfg_read(buf, sizeof(buf), t_cfg_parse(defs), meta, 0, t_em());
    EXPECT_GT(r, 0);

    return write(typeName, buf, r);
}
コード例 #5
0
int PrintTest::print(const void * data, const char * typeName) {
    LPDRMETA meta = dr_lib_find_meta_by_name(m_metaLib, typeName);
    EXPECT_TRUE(meta) << "get meta " << typeName << " error!";

    t_elist_clear();

    struct write_stream_buffer stream = CPE_WRITE_STREAM_BUFFER_INITIALIZER(&m_buffer);

    int r = dr_json_print((write_stream_t)&stream, data, meta, DR_JSON_PRINT_BEAUTIFY, t_em());
    stream_putc((write_stream_t)&stream, 0);
    return r;
}
コード例 #6
0
int ReadTest::read(const char * decodeTypeName, const void * data, size_t data_size) {
    LPDRMETA meta = dr_lib_find_meta_by_name(m_metaLib, decodeTypeName);
    EXPECT_TRUE(meta) << "get meta " << decodeTypeName << " error!";

    t_elist_clear();

    char buf[1024];
    int len = dr_pbuf_write(buf, sizeof(buf), data, data_size, meta, t_em());
    EXPECT_GT(len, 0);

    int r = dr_pbuf_read(m_result_buffer, sizeof(m_result_buffer), buf, len, meta, t_em());
    m_result_bufffer_len = r;
    m_result_meta = meta;
    return r;
}
コード例 #7
0
int ReadTest::read(const char * data, const char * typeName, int policy, size_t capacity) {
    LPDRMETA meta = dr_lib_find_meta_by_name(m_metaLib, typeName);
    EXPECT_TRUE(meta) << "get meta " << typeName << " error!";
    if (meta == 0) return -1;

    if (capacity == 0) {
        capacity = dr_meta_size(meta);
    }

    cfg_t input = t_cfg_parse(data);
    EXPECT_TRUE(input) << "parse input to cfg fail!";
    if (input == 0) return -1;

    t_elist_clear();
    mem_buffer_clear(&m_buffer);

    return dr_cfg_read(
        mem_buffer_alloc(&m_buffer, capacity),
        capacity,
        input,
        meta,
        policy,
        t_em());
}
コード例 #8
0
 Meta const * findMeta(const char * name) const { return (Meta const *)dr_lib_find_meta_by_name(*this, name); }
コード例 #9
0
static void cpe_dr_generate_h_metas(write_stream_t stream, dr_metalib_source_t source, cpe_dr_generate_ctx_t ctx) {
    struct dr_metalib_source_element_it element_it;
    dr_metalib_source_element_t element;
    int curent_pack;
    int packed;

    curent_pack = 0;
    packed = 0;
    dr_metalib_source_elements(&element_it, source);
    while((element = dr_metalib_source_element_next(&element_it))) {
        LPDRMETA meta;
        int entry_pos;

        if (dr_metalib_source_element_type(element) != dr_metalib_source_element_type_meta) continue;

        meta = dr_lib_find_meta_by_name(ctx->m_metalib, dr_metalib_source_element_name(element));
        if (meta == NULL) continue;

        if (dr_meta_align(meta) != curent_pack) {
            stream_printf(stream, "\n#pragma pack(1)\n");
            curent_pack = dr_meta_align(meta);
            packed = 1;
        }

        stream_printf(stream, "\nstruct %s {", dr_meta_name(meta));

        for(entry_pos = 0; entry_pos < dr_meta_entry_num(meta); ++entry_pos) {
            LPDRMETAENTRY entry = dr_meta_entry_at(meta, entry_pos);

            stream_printf(stream, "\n");
            stream_printf(stream, "    ");

            switch(dr_entry_type(entry)) {
            case CPE_DR_TYPE_UNION:
            case CPE_DR_TYPE_STRUCT: {
                LPDRMETA ref_meta;
                ref_meta = dr_entry_ref_meta(entry);
                if (ref_meta == NULL) continue;

                stream_printf(stream, "%s %s %s", dr_type_name(dr_entry_type(entry)), dr_meta_name(ref_meta), dr_entry_name(entry));
                break;
            }
            case CPE_DR_TYPE_STRING: {
                stream_printf(stream, "char %s[%d]", dr_entry_name(entry), dr_entry_size(entry));
                break;
            }
            default: {
                stream_printf(stream, "%s_t %s", dr_type_name(dr_entry_type(entry)), dr_entry_name(entry));
                break;
            }
            }

            if (dr_entry_array_count(entry) != 1) {
                stream_printf(stream, "[%d]", dr_entry_array_count(entry) < 1 ? 1 : dr_entry_array_count(entry));
            }

            stream_printf(stream, ";");
        }

        stream_printf(stream, "\n};\n");
    }

    if (packed) {
        stream_printf(stream, "\n#pragma pack()\n\n");
    }
}