# Treat this as -*- text -*-

TYPEMAP

const char *            T_PTROBJ
RPM::Database           O_RPM_Tied
RPM::Header             O_RPM_Tied
RPM::Package            O_RPM_Blessed
RPM::Transaction        O_RPM_Blessed

OUTPUT
O_RPM_Tied
        if ($var)
        {
            $arg = sv_bless(sv_2mortal(newRV_noinc((SV*)$var)),
                            gv_stashpv(\"${(my $ntt=$ntype)=~s/_/::/g;\$ntt}\",
                                       TRUE));
        }
        else
        {
            $arg = newSVsv(&PL_sv_undef);
        }

O_RPM_Blessed
        if ($var)
        {
            sv_setref_pv($arg, \"${(my $ntt=$ntype)=~s/_/::/g;\$ntt}\",
                         (void*)$var);
        }
        else
        {
            $arg = newSVsv(&PL_sv_undef);
        }

INPUT
O_RPM_Tied
        if (sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVHV))
            $var = (HV*)SvRV($arg);
        else
        {
            rpm_error(aTHX_ RPMERR_BADARG,
                      \"${Package}::$func_name: not a blessed HV reference\");
            XSRETURN_UNDEF;
        }

O_RPM_Blessed
        if (sv_derived_from($arg, \"${(my $ntt=$ntype)=~s/_/::/g;\$ntt}\"))
        {
            IV tmp = SvIV((SV*)SvRV($arg));
            $var = ($type) tmp;
        }
        else
        {
            rpm_error(aTHX_ RPMERR_BADARG,
                      \"$var is not of type ${ntype}\");
            XSRETURN_UNDEF;
        }