diff --git a/Lib/perl5/typemaps.i b/Lib/perl5/typemaps.i index bbdbf97b6..5c1c0bbcf 100644 --- a/Lib/perl5/typemaps.i +++ b/Lib/perl5/typemaps.i @@ -79,6 +79,21 @@ INPUT_TYPEMAP(unsigned char, SvUV); INPUT_TYPEMAP(bool, SvIV); +%typemap(in) long long *INPUT(long long temp), long long &INPUT(long long temp) { + temp = strtoll(SvPV($input,PL_na), 0, 0); + $1 = &temp; +} +%typemap(typecheck) long long *INPUT = long long; +%typemap(typecheck) long long &INPUT = long long; + +%typemap(in) unsigned long long *INPUT(unsigned long long temp), unsigned long long &INPUT(unsigned long long temp) { + temp = strtoull(SvPV($input,PL_na), 0, 0); + $1 = &temp; +} +%typemap(typecheck) unsigned long long *INPUT = unsigned long long; +%typemap(typecheck) unsigned long long &INPUT = unsigned long long; + + #undef INPUT_TYPEMAP // OUTPUT typemaps. These typemaps are used for parameters that @@ -135,7 +150,9 @@ output values. signed char *OUTPUT(signed char temp), signed char &OUTPUT(signed char temp), bool *OUTPUT(bool temp), bool &OUTPUT(bool temp), float *OUTPUT(float temp), float &OUTPUT(float temp), - double *OUTPUT(double temp), double &OUTPUT(double temp) + double *OUTPUT(double temp), double &OUTPUT(double temp), + long long *OUTPUT(long long temp), long long &OUTPUT(long long temp), + unsigned long long *OUTPUT(unsigned long long temp), unsigned long long &OUTPUT(unsigned long long temp) "$1 = &temp;"; %typemap(argout) int *OUTPUT, int &OUTPUT, @@ -178,6 +195,28 @@ output values. argvi++; } +%typemap(argout) long long *OUTPUT, long long &OUTPUT { + char temp[256]; + if (argvi >= items) { + EXTEND(sp,1); + } + sprintf(temp,"%lld", $1); + $result = sv_newmortal(); + sv_setpv($result,temp); + argvi++; +} + +%typemap(argout) unsigned long long *OUTPUT, unsigned long long &OUTPUT { + char temp[256]; + if (argvi >= items) { + EXTEND(sp,1); + } + sprintf(temp,"%llu", $1); + $result = sv_newmortal(); + sv_setpv($result,temp); + argvi++; +} + // INOUT // Mappings for an argument that is both an input and output // parameter @@ -235,6 +274,8 @@ do this : %typemap(in) bool *INOUT = bool *INPUT; %typemap(in) float *INOUT = float *INPUT; %typemap(in) double *INOUT = double *INPUT; +%typemap(in) long long *INOUT = long long *INPUT; +%typemap(in) unsigned long long *INOUT = unsigned long long *INPUT; %typemap(in) int &INOUT = int &INPUT; %typemap(in) short &INOUT = short &INPUT; @@ -247,6 +288,8 @@ do this : %typemap(in) bool &INOUT = bool &INPUT; %typemap(in) float &INOUT = float &INPUT; %typemap(in) double &INOUT = double &INPUT; +%typemap(in) long long &INOUT = long long &INPUT; +%typemap(in) unsigned long long &INOUT = unsigned long long &INPUT; %typemap(argout) int *INOUT = int *OUTPUT; @@ -260,6 +303,9 @@ do this : %typemap(argout) bool *INOUT = bool *OUTPUT; %typemap(argout) float *INOUT = float *OUTPUT; %typemap(argout) double *INOUT = double *OUTPUT; +%typemap(argout) long long *INOUT = long long *OUTPUT; +%typemap(argout) unsigned long long *INOUT = unsigned long long *OUTPUT; + %typemap(argout) int &INOUT = int &OUTPUT; %typemap(argout) short &INOUT = short &OUTPUT; @@ -272,6 +318,8 @@ do this : %typemap(argout) bool &INOUT = bool &OUTPUT; %typemap(argout) float &INOUT = float &OUTPUT; %typemap(argout) double &INOUT = double &OUTPUT; +%typemap(argout) long long &INOUT = long long &OUTPUT; +%typemap(argout) unsigned long long &INOUT = unsigned long long &OUTPUT; // REFERENCE // Accept Perl references as pointers @@ -513,4 +561,20 @@ as follows : %typemap(typecheck) short *INOUT = short; %typemap(typecheck) int *INOUT = int; %typemap(typecheck) float *INOUT = float; +%typemap(typecheck) long long *INOUT = long long; +%typemap(typecheck) unsigned long long *INOUT = unsigned long long; + +%typemap(typecheck) double &INOUT = double; +%typemap(typecheck) bool &INOUT = bool; +%typemap(typecheck) signed char &INOUT = signed char; +%typemap(typecheck) unsigned char &INOUT = unsigned char; +%typemap(typecheck) unsigned long &INOUT = unsigned long; +%typemap(typecheck) unsigned short &INOUT = unsigned short; +%typemap(typecheck) unsigned int &INOUT = unsigned int; +%typemap(typecheck) long &INOUT = long; +%typemap(typecheck) short &INOUT = short; +%typemap(typecheck) int &INOUT = int; +%typemap(typecheck) float &INOUT = float; +%typemap(typecheck) long long &INOUT = long long; +%typemap(typecheck) unsigned long long &INOUT = unsigned long long;