# In bizarre behavior, DESTROY methods are treated specially
# with s/OBJ$/REF/. We call MICOOBJ MICOOB to prevent this.
TYPEMAP
CORBA::Object T_OBJREF
CORBA::Any T_PTROBJ
CORBA::ORB T_PTROBJ
CORBA::TypeCode T_PTROBJ
CORBA::Dispatcher T_PTROBJ
CORBA::DispatcherCallback T_PTROBJ
CORBA::LongLong T_LONGLONG
CORBA::ULongLong T_ULONGLONG
CORBA::LongDouble T_LONGDOUBLE
PortableServer::POA * T_MICOOB
PortableServer::POAManager * T_MICOOB
PortableServer::Current * T_MICOOB
PortableServer::ServantBase T_SERVANT
PortableServer::ObjectId T_OBJECTID
CORBA::MICO::GtkDispatcher T_PTROBJ
CORBA::MICO::ServerlessObject T_PTROBJ
######################################################################
INPUT
T_SERVANT
$var = pmico_sv_to_servant ($arg)
T_OBJREF
$var = pmico_sv_to_objref ($arg)
T_MICOOB
if (sv_derived_from($arg, \"${subtype}\")) {
IV tmp = SvIV((SV*)SvRV($arg));
$var = ($type) tmp;
}
else
croak(\"$var is not of type ${subtype}\")
T_OBJECTID
{
STRLEN len;
char *str;
str = SvPV($arg, len);
$var = new PortableServer::ObjectId (len);
$var->length(len);
for (STRLEN i = 0 ; i < len ; i++) {
$var\[i] = str[i];
}
}
T_LONGLONG
$var = SvLLV ($arg)
T_ULONGLONG
$var = SvULLV ($arg)
T_LONGDOUBLE
$var = SvLDV ($arg)
######################################################################
OUTPUT
T_SERVANT
$arg = pmico_servant_to_sv ($var);
T_OBJREF
$arg = pmico_objref_to_sv ($var);
T_MICOOB
sv_setref_pv($arg, \"${subtype}\", (void*)$var);
T_OBJECTID
{
sv_setpv($arg, "");
SvGROW($arg, $var->length()+1);
SvCUR_set($arg, $var->length());
char *pv = SvPVX ($arg);
for (unsigned int i = 0 ; i < $var->length() ; i++) {
pv[i] = $var\[i];
}
pv[$var->length()] = '\\0';
}
T_LONGLONG
$arg = ll_from_longlong ($var);
T_ULONGLONG
$arg = ull_from_ulonglong ($var);
T_LONGDOUBLE
$arg = ld_from_longdouble ($var);