TYPEMAP

PerlKetama*    T_PERLKETAMA

INPUT
T_PERLKETAMA
        $var = (PerlKetama *) PKETAMA_STATE_FROM_SV($arg);

OUTPUT
T_PERLKETAMA
        if (!$var)          /* if null */
            SvOK_off($arg); /* then return as undef instead of reaf to undef */
        else {
            /* setup $arg as a ref to a blessed hash hv */
            HV *hv = newHV();
            char *classname = \"Algorithm::ConsistentHash::Ketama\";
            /* take (sub)class name to use from class_sv if appropriate */
            if (class_sv && SvOK(class_sv) && sv_derived_from(class_sv, classname))
                classname = (SvROK(class_sv)) ? sv_reftype(class_sv, 0) : SvPV_nolen(class_sv);
            sv_setsv($arg, sv_2mortal(newRV_noinc((SV*)hv)));
            (void)sv_bless($arg, gv_stashpv(classname, TRUE));

            /* now attach $var to the HV */
            /* done as two steps to avoid sv_magic SvREFCNT_inc and MGf_REFCOUNTED */
            sv_magic((SV*)hv, NULL, '~', NULL, 0);
            PKETAMA_STATE_FROM_SV($arg) = (void *) $var;
        }

