New XS framework for C and C++ code
This commit is contained in:
429
xs/buildtmp/typemap
Normal file
429
xs/buildtmp/typemap
Normal file
@@ -0,0 +1,429 @@
|
||||
TYPEMAP
|
||||
int T_IV
|
||||
signed int T_IV
|
||||
short T_IV
|
||||
signed short T_IV
|
||||
long T_IV
|
||||
signed long T_IV
|
||||
char T_IV
|
||||
signed char T_IV
|
||||
short int T_IV
|
||||
signed short int T_IV
|
||||
long int T_IV
|
||||
signed long int T_IV
|
||||
long long T_IV
|
||||
signed long long T_IV
|
||||
time_t T_IV
|
||||
Sint16 T_IV
|
||||
Sint32 T_IV
|
||||
Sint64 T_IV
|
||||
unsigned int T_UV
|
||||
unsigned short T_UV
|
||||
unsigned long T_UV
|
||||
unsigned char T_UV
|
||||
unsigned short int T_UV
|
||||
unsigned long int T_UV
|
||||
unsigned long long T_UV
|
||||
unsigned T_UV
|
||||
Uint16 T_UV
|
||||
Uint32 T_UV
|
||||
Uint64 T_UV
|
||||
size_t T_UV
|
||||
bool T_UV
|
||||
float T_NV
|
||||
double T_NV
|
||||
long double T_NV
|
||||
const int T_IV
|
||||
const signed int T_IV
|
||||
const short T_IV
|
||||
const signed short T_IV
|
||||
const long T_IV
|
||||
const signed long T_IV
|
||||
const char T_IV
|
||||
const signed char T_IV
|
||||
const short int T_IV
|
||||
const signed short int T_IV
|
||||
const long int T_IV
|
||||
const signed long int T_IV
|
||||
const long long T_IV
|
||||
const signed long long T_IV
|
||||
const time_t T_IV
|
||||
const Sint16 T_IV
|
||||
const Sint32 T_IV
|
||||
const Sint64 T_IV
|
||||
const unsigned int T_UV
|
||||
const unsigned short T_UV
|
||||
const unsigned long T_UV
|
||||
const unsigned char T_UV
|
||||
const unsigned short int T_UV
|
||||
const unsigned long int T_UV
|
||||
const unsigned long long T_UV
|
||||
const unsigned T_UV
|
||||
const Uint16 T_UV
|
||||
const Uint32 T_UV
|
||||
const Uint64 T_UV
|
||||
const size_t T_UV
|
||||
const bool T_UV
|
||||
const float T_NV
|
||||
const double T_NV
|
||||
const long double T_NV
|
||||
HV * T_HvRV
|
||||
AV * T_AvRV
|
||||
std::string T_STD_STRING
|
||||
std::string* T_STD_STRING_PTR
|
||||
std::vector< double >* T_STD_VECTOR_DOUBLE_PTR
|
||||
std::vector<double>* T_STD_VECTOR_DOUBLE_PTR
|
||||
std::vector< double > T_STD_VECTOR_DOUBLE
|
||||
std::vector<double> T_STD_VECTOR_DOUBLE
|
||||
std::vector< int >* T_STD_VECTOR_INT_PTR
|
||||
std::vector<int>* T_STD_VECTOR_INT_PTR
|
||||
std::vector< int > T_STD_VECTOR_INT
|
||||
std::vector<int> T_STD_VECTOR_INT
|
||||
std::vector< unsigned int >* T_STD_VECTOR_UINT_PTR
|
||||
std::vector<unsigned int>* T_STD_VECTOR_UINT_PTR
|
||||
std::vector< unsigned int > T_STD_VECTOR_UINT
|
||||
std::vector<unsigned int> T_STD_VECTOR_UINT
|
||||
std::vector<std::string> T_STD_VECTOR_STD_STRING
|
||||
std::vector<std::string>* T_STD_VECTOR_STD_STRING_PTR
|
||||
std::vector<char*> T_STD_VECTOR_CSTRING
|
||||
std::vector<char*>* T_STD_VECTOR_CSTRING_PTR
|
||||
|
||||
INPUT
|
||||
O_OBJECT
|
||||
if( sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVMG) )
|
||||
$var = ($type)SvIV((SV*)SvRV( $arg ));
|
||||
else{
|
||||
warn( \"${Package}::$func_name() -- $var is not a blessed SV reference\" );
|
||||
XSRETURN_UNDEF;
|
||||
}
|
||||
T_OBJECT
|
||||
if( SvROK($arg) )
|
||||
$var = ($type)SvIV((SV*)SvRV( $arg ));
|
||||
else{
|
||||
warn( \"${Package}::$func_name() -- $var is not an SV reference\" );
|
||||
XSRETURN_UNDEF;
|
||||
}
|
||||
O_HvRV
|
||||
if( sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVHV) )
|
||||
$var = (HV*)SvRV( $arg );
|
||||
else {
|
||||
warn( \"${Package}::$func_name() -- $var is not a blessed HV reference\" );
|
||||
XSRETURN_UNDEF;
|
||||
}
|
||||
T_HvRV
|
||||
if( SvROK($arg) && (SvTYPE(SvRV($arg)) == SVt_PVHV) )
|
||||
$var = (HV*)SvRV( $arg );
|
||||
else {
|
||||
warn( \"${Package}::$func_name() -- $var is not an HV reference\" );
|
||||
XSRETURN_UNDEF;
|
||||
}
|
||||
O_AvRV
|
||||
if( sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVAV) )
|
||||
$var = (AV*)SvRV( $arg );
|
||||
else {
|
||||
warn( \"${Package}::$func_name() -- $var is not a blessed AV reference\" );
|
||||
XSRETURN_UNDEF;
|
||||
}
|
||||
T_AvRV
|
||||
if( SvROK($arg) && (SvTYPE(SvRV($arg)) == SVt_PVAV) )
|
||||
$var = (AV*)SvRV( $arg );
|
||||
else {
|
||||
warn( \"${Package}::$func_name() -- $var is not an AV reference\" );
|
||||
XSRETURN_UNDEF;
|
||||
}
|
||||
T_STD_STRING
|
||||
$var = std::string( SvPV_nolen( $arg ), SvCUR( $arg ) );
|
||||
T_STD_STRING_PTR
|
||||
$var = new std::string( SvPV_nolen( $arg ), SvCUR( $arg ) );
|
||||
T_STD_VECTOR_DOUBLE
|
||||
if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVAV) {
|
||||
AV* av = (AV*)SvRV($arg);
|
||||
const unsigned int len = av_len(av)+1;
|
||||
$var = std::vector<double>(len);
|
||||
SV** elem;
|
||||
for (unsigned int i = 0; i < len; i++) {
|
||||
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\");
|
||||
T_STD_VECTOR_DOUBLE_PTR
|
||||
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);
|
||||
SV** elem;
|
||||
for (unsigned int i = 0; i < len; i++) {
|
||||
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\");
|
||||
T_STD_VECTOR_INT
|
||||
if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVAV) {
|
||||
AV* av = (AV*)SvRV($arg);
|
||||
const unsigned int len = av_len(av)+1;
|
||||
$var = std::vector<int>(len);
|
||||
SV** elem;
|
||||
for (unsigned int i = 0; i < len; i++) {
|
||||
elem = av_fetch(av, i, 0);
|
||||
if (elem != NULL)
|
||||
${var}[i] = SvIV(*elem);
|
||||
else
|
||||
${var}[i] = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
Perl_croak(aTHX_ \"%s: %s is not an array reference\",
|
||||
${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
|
||||
\"$var\");
|
||||
T_STD_VECTOR_INT_PTR
|
||||
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<int>(len);
|
||||
SV** elem;
|
||||
for (unsigned int i = 0; i < len; i++) {
|
||||
elem = av_fetch(av, i, 0);
|
||||
if (elem != NULL)
|
||||
(*$var)[i] = SvIV(*elem);
|
||||
else
|
||||
(*$var)[i] = 0.;
|
||||
}
|
||||
}
|
||||
else
|
||||
Perl_croak(aTHX_ \"%s: %s is not an array reference\",
|
||||
${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
|
||||
\"$var\");
|
||||
T_STD_VECTOR_UINT
|
||||
if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVAV) {
|
||||
AV* av = (AV*)SvRV($arg);
|
||||
const unsigned int len = av_len(av)+1;
|
||||
$var = std::vector<unsigned int>(len);
|
||||
SV** elem;
|
||||
for (unsigned int i = 0; i < len; i++) {
|
||||
elem = av_fetch(av, i, 0);
|
||||
if (elem != NULL)
|
||||
${var}[i] = SvUV(*elem);
|
||||
else
|
||||
${var}[i] = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
Perl_croak(aTHX_ \"%s: %s is not an array reference\",
|
||||
${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
|
||||
\"$var\");
|
||||
T_STD_VECTOR_UINT_PTR
|
||||
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<unsigned int>(len);
|
||||
SV** elem;
|
||||
for (unsigned int i = 0; i < len; i++) {
|
||||
elem = av_fetch(av, i, 0);
|
||||
if (elem != NULL)
|
||||
(*$var)[i] = SvUV(*elem);
|
||||
else
|
||||
(*$var)[i] = 0.;
|
||||
}
|
||||
}
|
||||
else
|
||||
Perl_croak(aTHX_ \"%s: %s is not an array reference\",
|
||||
${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
|
||||
\"$var\");
|
||||
T_STD_VECTOR_STD_STRING
|
||||
if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVAV) {
|
||||
AV* av = (AV*)SvRV($arg);
|
||||
const unsigned int alen = av_len(av)+1;
|
||||
$var = std::vector<std::string>(alen);
|
||||
STRLEN len;
|
||||
char* tmp;
|
||||
SV** elem;
|
||||
for (unsigned int i = 0; i < alen; i++) {
|
||||
elem = av_fetch(av, i, 0);
|
||||
if (elem != NULL) {
|
||||
tmp = SvPV(*elem, len);
|
||||
${var}[i] = std::string(tmp, len);
|
||||
}
|
||||
else
|
||||
${var}[i] = std::string(\"\");
|
||||
}
|
||||
}
|
||||
else
|
||||
Perl_croak(aTHX_ \"%s: %s is not an array reference\",
|
||||
${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
|
||||
\"$var\");
|
||||
T_STD_VECTOR_STD_STRING_PTR
|
||||
if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVAV) {
|
||||
AV* av = (AV*)SvRV($arg);
|
||||
const unsigned int alen = av_len(av)+1;
|
||||
$var = new std::vector<std::string>(alen);
|
||||
STRLEN len;
|
||||
char* tmp;
|
||||
SV** elem;
|
||||
for (unsigned int i = 0; i < alen; i++) {
|
||||
elem = av_fetch(av, i, 0);
|
||||
if (elem != NULL) {
|
||||
tmp = SvPV(*elem, len);
|
||||
(*$var)[i] = std::string(tmp, len);
|
||||
}
|
||||
else
|
||||
(*$var)[i] = std::string(\"\");
|
||||
}
|
||||
}
|
||||
else
|
||||
Perl_croak(aTHX_ \"%s: %s is not an array reference\",
|
||||
${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
|
||||
\"$var\");
|
||||
T_STD_VECTOR_CSTRING
|
||||
if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVAV) {
|
||||
AV* av = (AV*)SvRV($arg);
|
||||
const unsigned int len = av_len(av)+1;
|
||||
$var = std::vector<char*>(len);
|
||||
SV** elem;
|
||||
for (unsigned int i = 0; i < len; i++) {
|
||||
elem = av_fetch(av, i, 0);
|
||||
if (elem != NULL) {
|
||||
${var}[i] = SvPV_nolen(*elem);
|
||||
else
|
||||
${var}[i] = NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
Perl_croak(aTHX_ \"%s: %s is not an array reference\",
|
||||
${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
|
||||
\"$var\");
|
||||
T_STD_VECTOR_CSTRING_PTR
|
||||
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<char*>(len);
|
||||
SV** elem;
|
||||
for (unsigned int i = 0; i < len; i++) {
|
||||
elem = av_fetch(av, i, 0);
|
||||
if (elem != NULL) {
|
||||
(*$var)[i] = SvPV_nolen(*elem);
|
||||
else
|
||||
(*$var)[i] = NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
Perl_croak(aTHX_ \"%s: %s is not an array reference\",
|
||||
${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
|
||||
\"$var\");
|
||||
|
||||
OUTPUT
|
||||
O_OBJECT
|
||||
sv_setref_pv( $arg, CLASS, (void*)$var );
|
||||
T_OBJECT
|
||||
sv_setref_pv( $arg, Nullch, (void*)$var );
|
||||
O_HvRV
|
||||
$arg = sv_bless( newRV((SV*)$var), gv_stashpv(CLASS,1) );
|
||||
T_HvRV
|
||||
$arg = newRV((SV*)$var);
|
||||
O_AvRV
|
||||
$arg = sv_bless( newRV((SV*)$var), gv_stashpv(CLASS,1) );
|
||||
T_AvRV
|
||||
$arg = newRV((SV*)$var);
|
||||
T_STD_STRING
|
||||
$arg = newSVpvn( $var.c_str(), $var.length() );
|
||||
T_STD_STRING_PTR
|
||||
$arg = newSVpvn( $var->c_str(), $var->length() );
|
||||
T_STD_VECTOR_DOUBLE
|
||||
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]));
|
||||
}
|
||||
T_STD_VECTOR_DOUBLE_PTR
|
||||
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]));
|
||||
}
|
||||
T_STD_VECTOR_INT
|
||||
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, newSViv(${var}[i]));
|
||||
}
|
||||
T_STD_VECTOR_INT_PTR
|
||||
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, newSViv((*$var)[i]));
|
||||
}
|
||||
T_STD_VECTOR_UINT
|
||||
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, newSVuv(${var}[i]));
|
||||
}
|
||||
T_STD_VECTOR_UINT_PTR
|
||||
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, newSVuv((*$var)[i]));
|
||||
}
|
||||
T_STD_VECTOR_STD_STRING
|
||||
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++) {
|
||||
const std::string& str = ${var}[i];
|
||||
STRLEN len = str.length();
|
||||
av_store(av, i, newSVpv(str.c_str(), len));
|
||||
}
|
||||
T_STD_VECTOR_STD_STRING_PTR
|
||||
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++) {
|
||||
const std::string& str = (*$var)[i];
|
||||
STRLEN len = str.length();
|
||||
av_store(av, i, newSVpv(str.c_str(), len));
|
||||
}
|
||||
T_STD_VECTOR_CSTRING
|
||||
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++) {
|
||||
STRLEN len = strlen(${var}[i]);
|
||||
av_store(av, i, newSVpv(${var}[i], len));
|
||||
}
|
||||
T_STD_VECTOR_CSTRING_PTR
|
||||
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++) {
|
||||
STRLEN len = strlen((*$var)[i]);
|
||||
av_store(av, i, newSVpv((*$var)[i], len));
|
||||
}
|
||||
Reference in New Issue
Block a user