The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
SOOT*	O_OBJECT
ClassIterator*	O_OBJECT
std::vector< double >*	T_VECTORDOUBLE
std::istream*		T_ISTREAM
const double		T_NV

INPUT

T_ISTREAM
	$var = new std::istringstream(SvPV_nolen($arg));

O_TOBJECT
	$var =($type)SOOT::LobotomizeObject(aTHX_ $arg);

T_VECTORDOUBLE
	if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVAV) {                                                                              
	  AV* av = (AV*)SvRV($arg);                                                                                                  
	  const unsigned int len = av_len(av)+1;                                                                                      
	  $var = new std::vector<double>(len);                                                                                        
	  for (unsigned int i = 0; i < len; i++) {                                                                                    
	    SV** elem;                                                                                                              
	    elem = av_fetch(av, i, 0);                                                                                              
	    if (elem != NULL)
	      (*$var)[i] = SvNV(*elem);
	    else
	      (*$var)[i] = 0.;
	  }
	}
	else
	  Perl_croak(aTHX_ \"%s: %s is not an array reference\",
	             ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
	             \"$var\");

OUTPUT

O_TOBJECT
	$arg = SOOT::RegisterObject(aTHX_ (TObject*)$var, "${my $t=$type; $t=~s/^\s*const\b\s*//;$t=~s/\s*[*&]*\s*$//;\$t}");

T_VECTORDOUBLE
	AV* av = newAV();
	$arg = newRV_noinc((SV*)av);
	const unsigned int len = $var->size();
	av_extend(av, len-1);
	for (unsigned int i = 0; i < len; i++) {
	  av_store(av, i, newSVnv((*$var)[i]));
	}