示例#1
0
int odr_external(ODR o, Odr_external **p, int opt, const char *name)
{
    Odr_external *pp;
    static Odr_arm arm[] =
    {
        {   ODR_EXPLICIT, ODR_CONTEXT, 0, ODR_EXTERNAL_single,
            (Odr_fun)odr_any, "single"
        },
        {   ODR_IMPLICIT, ODR_CONTEXT, 1, ODR_EXTERNAL_octet,
            (Odr_fun)odr_octetstring, "octet"
        },
        {   ODR_IMPLICIT, ODR_CONTEXT, 2, ODR_EXTERNAL_arbitrary,
            (Odr_fun)odr_bitstring, "arbitrary"
        },
        {-1, -1, -1, -1, 0, 0}
    };

    odr_implicit_settag(o, ODR_UNIVERSAL, ODR_EXTERNAL);
    if (!odr_sequence_begin(o, p, sizeof(Odr_external), name))
        return odr_missing(o, opt, name);
    pp = *p;
    return
        odr_oid(o, &pp->direct_reference, 1, "direct") &&
        odr_integer(o, &pp->indirect_reference, 1, "indirect") &&
        odr_graphicstring(o, &pp->descriptor, 1, "descriptor") &&
        odr_choice(o, arm, &pp->u, &pp->which, 0) &&
        odr_sequence_end(o);
}
示例#2
0
int z_UniverseReport(ODR o, Z_UniverseReport **p, int opt, const char *name)
{
	static Odr_arm arm[] = {
		{ODR_IMPLICIT, ODR_CONTEXT, 0, Z_UniverseReport_databaseHits,
		(Odr_fun) z_UniverseReportHits, "databaseHits"},
		{ODR_IMPLICIT, ODR_CONTEXT, 1, Z_UniverseReport_duplicate,
		(Odr_fun) z_UniverseReportDuplicate, "duplicate"},
		{-1, -1, -1, -1, (Odr_fun) 0, 0}
	};
	if (!odr_sequence_begin(o, p, sizeof(**p), name))
		return odr_missing(o, opt, name) && odr_ok (o);
	return
		odr_integer(o, &(*p)->totalHits, 0, "totalHits") &&
		odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) &&
		odr_sequence_end(o);
}