Here is some horribly complex typemap code:

    OSSVPV *ospv = ((OSSVPV*)ossv->vptr);
    assert(ospv);
    char *CLASS = ospv->classname;
    if (!CLASS) CLASS = "ObjStore::HV";
    SV *tied = sv_2mortal((SV*) newHV());	// %HV
    SV *rv = newRV(tied);			// $rv = \%HV
    --SvREFCNT(SvRV(rv));			// undo ref
    HV* stash = gv_stashpv(CLASS, TRUE);
    assert(stash);
    (void)sv_bless(rv, stash);			// bless $rv, CLASS

    sv_magic(tied, rv, 'P', Nullch, 0);		// tie %HV, CLASS, $rv
    MAGIC *tie_mg = mg_find(tied, 'P');		// undo tie refcnt (yikes!)
    assert(tie_mg);
    tie_mg->mg_flags &= ~(MGf_REFCOUNTED);
    --SvREFCNT(rv);

    SV *mgobj = sv_setref_pv(sv_newmortal(), "ObjStore::Magic",
			     ospv->NEW_MAGIC(ossv));
    sv_magic(tied, mgobj, '~', Nullch, 0);	// magic %HV, '~', $mgobj

//    warn("hash refcnt=%d", SvREFCNT(SvRV(rv)));
//    warn("hashref refcnt=%d", SvREFCNT(rv));
//    warn("mgref refcnt=%d", SvREFCNT(mgobj));
//    warn("mg refcnt=%d", SvREFCNT(SvRV(mgobj)));

The idea is to tie a C++ object to a hashref while still maintaining 
access to the C++ object's methods.  For example, $ref->{abc} is
exactly the same as $ref->FETCH('abc').  The code actually works,
the problem is efficiency!  Any ideas?

