TYPEMAP
Bot *                   O_OBJECT
Client *                O_OBJECT
Channel *               O_OBJECT
Membership *            O_OBJECT
Capabilities *          O_OBJECT

Filter *                O_OBJECT
const Message *         O_OBJECT

BotClientHash *         O_OBJECT
BotChannelHash *        O_OBJECT
BotSettingsHash *       O_OBJECT
ClientMembershipHash *  O_OBJECT
ChannelMembershipHash * O_OBJECT
PerlHolder *            O_OBJECT

ArrayValueWrapper *     O_OBJECT
HashValueWrapper *      O_OBJECT

string                  O_STDSTRING

OUTPUT
O_OBJECT
    sv_setref_pv( $arg, PerlClassMap<${(my $ntt=$ntype)=~s/Ptr$/*/;\$ntt}>::name(), (void*)$var );

O_STDSTRING
    sv_setpv($arg, $var.c_str());

INPUT
O_OBJECT
    if (sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVMG) &&
            sv_derived_from($arg, PerlClassMap<${(my $ntt=$ntype)=~s/Ptr$/*/;\$ntt}>::name()))
        $var = ($type)SvIV((SV*)SvRV($arg));
    else
    {
        Perl_croak(aTHX_ \"${Package}::$func_name() -- $var is not a blessed SV reference\" );
        XSRETURN_UNDEF;
    }
