// SWIG typemaps for std::pair
// ------------------------------------------------------------------------
// See std_vector.i for the rationale of typemap application
// ------------------------------------------------------------------------
template<class T, class U> struct pair {
%typemap(in) pair<T,U> (std::pair<T,U>* p) {
if (rb_obj_is_kind_of($input,rb_cArray)) {
unsigned int size = RARRAY($input)->len;
SWIG_exception(SWIG_TypeError,
"pair<" #T "," #U "> expected");
VALUE first = RARRAY($input)->ptr[0];
VALUE second = RARRAY($input)->ptr[1];
SWIG_ConvertPtr(first, (void **) &x, $descriptor(T *), 1);
SWIG_ConvertPtr(second, (void **) &y, $descriptor(U *), 1);
$1 = std::make_pair(x,y);
SWIG_ConvertPtr($input, (void **) &p, $&1_descriptor, 1);
%typemap(in) const pair<T,U>& (std::pair<T,U> temp,
const pair<T,U>* (std::pair<T,U> temp,
if (rb_obj_is_kind_of($input,rb_cArray)) {
unsigned int size = RARRAY($input)->len;
SWIG_exception(SWIG_TypeError,
"pair<" #T "," #U "> expected");
VALUE first = RARRAY($input)->ptr[0];
VALUE second = RARRAY($input)->ptr[1];
SWIG_ConvertPtr(first, (void **) &x, $descriptor(T *), 1);
SWIG_ConvertPtr(second, (void **) &y, $descriptor(U *), 1);
temp = std::make_pair(x,y);
SWIG_ConvertPtr($input, (void **) &p, $1_descriptor, 1);
%typemap(out) pair<T,U> {
$result = rb_ary_new2(2);
SWIG_NewPointerObj((void *) x,
SWIG_NewPointerObj((void *) y,
%typecheck(SWIG_TYPECHECK_PAIR) pair<T,U> {
if (rb_obj_is_kind_of($input,rb_cArray)) {
unsigned int size = RARRAY($input)->len;
VALUE first = RARRAY($input)->ptr[0];
VALUE second = RARRAY($input)->ptr[1];
if (SWIG_ConvertPtr(first,(void **) &x,
$descriptor(T *),0) != -1 &&
SWIG_ConvertPtr(second,(void **) &y,
$descriptor(U *),0) != -1)
if (SWIG_ConvertPtr($input,(void **) &p,
%typecheck(SWIG_TYPECHECK_PAIR) const pair<T,U>&,
if (rb_obj_is_kind_of($input,rb_cHash)) {
unsigned int size = RARRAY($input)->len;
VALUE first = RARRAY($input)->ptr[0];
VALUE second = RARRAY($input)->ptr[1];
if (SWIG_ConvertPtr(first,(void **) &x,
$descriptor(T *),0) != -1 &&
SWIG_ConvertPtr(second,(void **) &y,
$descriptor(U *),0) != -1)
if (SWIG_ConvertPtr($input,(void **) &p,
template <class U1, class U2> pair(const pair<U1, U2> &p);
// specializations for built-ins
%define specialize_std_pair_on_first(T,CHECK,CONVERT_FROM,CONVERT_TO)
template<class U> struct pair<T,U> {
%typemap(in) pair<T,U> (std::pair<T,U>* p) {
if (rb_obj_is_kind_of($input,rb_cArray)) {
unsigned int size = RARRAY($input)->len;
SWIG_exception(SWIG_TypeError,
"pair<" #T "," #U "> expected");
VALUE first = RARRAY($input)->ptr[0];
VALUE second = RARRAY($input)->ptr[1];
SWIG_exception(SWIG_TypeError,
"pair<" #T "," #U "> expected");
SWIG_ConvertPtr(second, (void **) &y, $descriptor(U *), 1);
$1 = std::make_pair(CONVERT_FROM(first),y);
SWIG_ConvertPtr($input, (void **) &p, $&1_descriptor, 1);
%typemap(in) const pair<T,U>& (std::pair<T,U> temp,
const pair<T,U>* (std::pair<T,U> temp,
if (rb_obj_is_kind_of($input,rb_cArray)) {
unsigned int size = RARRAY($input)->len;
SWIG_exception(SWIG_TypeError,
"pair<" #T "," #U "> expected");
VALUE first = RARRAY($input)->ptr[0];
VALUE second = RARRAY($input)->ptr[1];
SWIG_exception(SWIG_TypeError,
"pair<" #T "," #U "> expected");
SWIG_ConvertPtr(second, (void **) &y, $descriptor(U *), 1);
temp = std::make_pair(CONVERT_FROM(first),y);
SWIG_ConvertPtr($input, (void **) &p, $1_descriptor, 1);
%typemap(out) pair<T,U> {
$result = rb_ary_new2(2);
rb_ary_store($result,0,CONVERT_TO($1.first));
SWIG_NewPointerObj((void *) y,
%typecheck(SWIG_TYPECHECK_MAP) pair<T,U> {
if (rb_obj_is_kind_of($input,rb_cArray)) {
unsigned int size = RARRAY($input)->len;
VALUE first = RARRAY($input)->ptr[0];
VALUE second = RARRAY($input)->ptr[1];
SWIG_ConvertPtr(second,(void **) &y,
$descriptor(U *),0) != -1)
if (SWIG_ConvertPtr($input,(void **) &p,
%typecheck(SWIG_TYPECHECK_MAP) const pair<T,U>&,
if (rb_obj_is_kind_of($input,rb_cHash)) {
unsigned int size = RARRAY($input)->len;
VALUE first = RARRAY($input)->ptr[0];
VALUE second = RARRAY($input)->ptr[1];
SWIG_ConvertPtr(second,(void **) &y,
$descriptor(U *),0) != -1)
if (SWIG_ConvertPtr($input,(void **) &p,
template <class U1, class U2> pair(const pair<U1, U2> &p);
%define specialize_std_pair_on_second(U,CHECK,CONVERT_FROM,CONVERT_TO)
template<class T> struct pair<T,U> {
%typemap(in) pair<T,U> (std::pair<T,U>* p) {
if (rb_obj_is_kind_of($input,rb_cArray)) {
unsigned int size = RARRAY($input)->len;
SWIG_exception(SWIG_TypeError,
"pair<" #T "," #U "> expected");
VALUE first = RARRAY($input)->ptr[0];
VALUE second = RARRAY($input)->ptr[1];
SWIG_ConvertPtr(first, (void **) &x, $descriptor(T *), 1);
SWIG_exception(SWIG_TypeError,
"pair<" #T "," #U "> expected");
$1 = std::make_pair(x,CONVERT_FROM(second));
SWIG_ConvertPtr($input, (void **) &p, $&1_descriptor, 1);
%typemap(in) const pair<T,U>& (std::pair<T,U> temp,
const pair<T,U>* (std::pair<T,U> temp,
if (rb_obj_is_kind_of($input,rb_cArray)) {
unsigned int size = RARRAY($input)->len;
SWIG_exception(SWIG_TypeError,
"pair<" #T "," #U "> expected");
VALUE first = RARRAY($input)->ptr[0];
VALUE second = RARRAY($input)->ptr[1];
SWIG_ConvertPtr(first, (void **) &x, $descriptor(T *), 1);
SWIG_exception(SWIG_TypeError,
"pair<" #T "," #U "> expected");
temp = std::make_pair(x,CONVERT_FROM(second));
SWIG_ConvertPtr($input, (void **) &p, $1_descriptor, 1);
%typemap(out) pair<T,U> {
$result = rb_ary_new2(2);
SWIG_NewPointerObj((void *) x,
rb_ary_store($result,1,CONVERT_TO($1.second));
%typecheck(SWIG_TYPECHECK_PAIR) pair<T,U> {
if (rb_obj_is_kind_of($input,rb_cArray)) {
unsigned int size = RARRAY($input)->len;
VALUE first = RARRAY($input)->ptr[0];
VALUE second = RARRAY($input)->ptr[1];
if (SWIG_ConvertPtr(first,(void **) &x,
$descriptor(T *),0) != -1 &&
if (SWIG_ConvertPtr($input,(void **) &p,
%typecheck(SWIG_TYPECHECK_PAIR) const pair<T,U>&,
if (rb_obj_is_kind_of($input,rb_cHash)) {
unsigned int size = RARRAY($input)->len;
VALUE first = RARRAY($input)->ptr[0];
VALUE second = RARRAY($input)->ptr[1];
if (SWIG_ConvertPtr(first,(void **) &x,
$descriptor(T *),0) != -1 &&
if (SWIG_ConvertPtr($input,(void **) &p,
template <class U1, class U2> pair(const pair<U1, U2> &p);
%define specialize_std_pair_on_both(T,CHECK_T,CONVERT_T_FROM,CONVERT_T_TO,
U,CHECK_U,CONVERT_U_FROM,CONVERT_U_TO)
template<> struct pair<T,U> {
%typemap(in) pair<T,U> (std::pair<T,U>* p) {
if (rb_obj_is_kind_of($input,rb_cArray)) {
unsigned int size = RARRAY($input)->len;
SWIG_exception(SWIG_TypeError,
"pair<" #T "," #U "> expected");
VALUE first = RARRAY($input)->ptr[0];
VALUE second = RARRAY($input)->ptr[1];
if (!CHECK_T(first) || !CHECK_U(second))
SWIG_exception(SWIG_TypeError,
"pair<" #T "," #U "> expected");
$1 = std::make_pair(CONVERT_T_FROM(first),
SWIG_ConvertPtr($input, (void **) &p, $&1_descriptor, 1);
%typemap(in) const pair<T,U>& (std::pair<T,U> temp,
const pair<T,U>* (std::pair<T,U> temp,
if (rb_obj_is_kind_of($input,rb_cArray)) {
unsigned int size = RARRAY($input)->len;
SWIG_exception(SWIG_TypeError,
"pair<" #T "," #U "> expected");
VALUE first = RARRAY($input)->ptr[0];
VALUE second = RARRAY($input)->ptr[1];
if (!CHECK_T(first) || !CHECK_U(second))
SWIG_exception(SWIG_TypeError,
"pair<" #T "," #U "> expected");
temp = std::make_pair(CONVERT_T_FROM(first),
SWIG_ConvertPtr($input, (void **) &p, $1_descriptor, 1);
%typemap(out) pair<T,U> {
$result = rb_ary_new2(2);
rb_ary_store($result,0,CONVERT_T_TO($1.first));
rb_ary_store($result,1,CONVERT_U_TO($1.second));
%typecheck(SWIG_TYPECHECK_PAIR) pair<T,U> {
if (rb_obj_is_kind_of($input,rb_cArray)) {
unsigned int size = RARRAY($input)->len;
VALUE first = RARRAY($input)->ptr[0];
VALUE second = RARRAY($input)->ptr[1];
if (CHECK_T(first) && CHECK_U(second))
if (SWIG_ConvertPtr($input,(void **) &p,
%typecheck(SWIG_TYPECHECK_PAIR) const pair<T,U>&,
if (rb_obj_is_kind_of($input,rb_cHash)) {
unsigned int size = RARRAY($input)->len;
VALUE first = RARRAY($input)->ptr[0];
VALUE second = RARRAY($input)->ptr[1];
if (CHECK_T(first) && CHECK_U(second))
if (SWIG_ConvertPtr($input,(void **) &p,
template <class U1, class U2> pair(const pair<U1, U2> &p);
specialize_std_pair_on_first(bool,SWIG_BOOL_P,
SWIG_RB2BOOL,SWIG_BOOL2RB);
specialize_std_pair_on_first(int,FIXNUM_P,
specialize_std_pair_on_first(short,FIXNUM_P,
specialize_std_pair_on_first(long,FIXNUM_P,
specialize_std_pair_on_first(unsigned int,FIXNUM_P,
specialize_std_pair_on_first(unsigned short,FIXNUM_P,
specialize_std_pair_on_first(unsigned long,FIXNUM_P,
specialize_std_pair_on_first(double,SWIG_FLOAT_P,
SWIG_NUM2DBL,rb_float_new);
specialize_std_pair_on_first(float,SWIG_FLOAT_P,
SWIG_NUM2DBL,rb_float_new);
specialize_std_pair_on_first(std::string,SWIG_STRING_P,
SWIG_RB2STR,SWIG_STR2RB);
specialize_std_pair_on_second(bool,SWIG_BOOL_P,
SWIG_RB2BOOL,SWIG_BOOL2RB);
specialize_std_pair_on_second(int,FIXNUM_P,
specialize_std_pair_on_second(short,FIXNUM_P,
specialize_std_pair_on_second(long,FIXNUM_P,
specialize_std_pair_on_second(unsigned int,FIXNUM_P,
specialize_std_pair_on_second(unsigned short,FIXNUM_P,
specialize_std_pair_on_second(unsigned long,FIXNUM_P,
specialize_std_pair_on_second(double,SWIG_FLOAT_P,
SWIG_NUM2DBL,rb_float_new);
specialize_std_pair_on_second(float,SWIG_FLOAT_P,
SWIG_NUM2DBL,rb_float_new);
specialize_std_pair_on_second(std::string,SWIG_STRING_P,
SWIG_RB2STR,SWIG_STR2RB);
specialize_std_pair_on_both(bool,SWIG_BOOL_P,
SWIG_RB2BOOL,SWIG_BOOL2RB,
SWIG_RB2BOOL,SWIG_BOOL2RB);
specialize_std_pair_on_both(bool,SWIG_BOOL_P,
SWIG_RB2BOOL,SWIG_BOOL2RB,
specialize_std_pair_on_both(bool,SWIG_BOOL_P,
SWIG_RB2BOOL,SWIG_BOOL2RB,
specialize_std_pair_on_both(bool,SWIG_BOOL_P,
SWIG_RB2BOOL,SWIG_BOOL2RB,
specialize_std_pair_on_both(bool,SWIG_BOOL_P,
SWIG_RB2BOOL,SWIG_BOOL2RB,
specialize_std_pair_on_both(bool,SWIG_BOOL_P,
SWIG_RB2BOOL,SWIG_BOOL2RB,
specialize_std_pair_on_both(bool,SWIG_BOOL_P,
SWIG_RB2BOOL,SWIG_BOOL2RB,
specialize_std_pair_on_both(bool,SWIG_BOOL_P,
SWIG_RB2BOOL,SWIG_BOOL2RB,
SWIG_NUM2DBL,rb_float_new);
specialize_std_pair_on_both(bool,SWIG_BOOL_P,
SWIG_RB2BOOL,SWIG_BOOL2RB,
SWIG_NUM2DBL,rb_float_new);
specialize_std_pair_on_both(bool,SWIG_BOOL_P,
SWIG_RB2BOOL,SWIG_BOOL2RB,
std::string,SWIG_STRING_P,
SWIG_RB2STR,SWIG_STR2RB);
specialize_std_pair_on_both(int,FIXNUM_P,
SWIG_RB2BOOL,SWIG_BOOL2RB);
specialize_std_pair_on_both(int,FIXNUM_P,
specialize_std_pair_on_both(int,FIXNUM_P,
specialize_std_pair_on_both(int,FIXNUM_P,
specialize_std_pair_on_both(int,FIXNUM_P,
specialize_std_pair_on_both(int,FIXNUM_P,
specialize_std_pair_on_both(int,FIXNUM_P,
specialize_std_pair_on_both(int,FIXNUM_P,
SWIG_NUM2DBL,rb_float_new);
specialize_std_pair_on_both(int,FIXNUM_P,
SWIG_NUM2DBL,rb_float_new);
specialize_std_pair_on_both(int,FIXNUM_P,
std::string,SWIG_STRING_P,
SWIG_RB2STR,SWIG_STR2RB);
specialize_std_pair_on_both(short,FIXNUM_P,
SWIG_RB2BOOL,SWIG_BOOL2RB);
specialize_std_pair_on_both(short,FIXNUM_P,
specialize_std_pair_on_both(short,FIXNUM_P,
specialize_std_pair_on_both(short,FIXNUM_P,
specialize_std_pair_on_both(short,FIXNUM_P,
specialize_std_pair_on_both(short,FIXNUM_P,
specialize_std_pair_on_both(short,FIXNUM_P,
specialize_std_pair_on_both(short,FIXNUM_P,
SWIG_NUM2DBL,rb_float_new);
specialize_std_pair_on_both(short,FIXNUM_P,
SWIG_NUM2DBL,rb_float_new);
specialize_std_pair_on_both(short,FIXNUM_P,
std::string,SWIG_STRING_P,
SWIG_RB2STR,SWIG_STR2RB);
specialize_std_pair_on_both(long,FIXNUM_P,
SWIG_RB2BOOL,SWIG_BOOL2RB);
specialize_std_pair_on_both(long,FIXNUM_P,
specialize_std_pair_on_both(long,FIXNUM_P,
specialize_std_pair_on_both(long,FIXNUM_P,
specialize_std_pair_on_both(long,FIXNUM_P,
specialize_std_pair_on_both(long,FIXNUM_P,
specialize_std_pair_on_both(long,FIXNUM_P,
specialize_std_pair_on_both(long,FIXNUM_P,
SWIG_NUM2DBL,rb_float_new);
specialize_std_pair_on_both(long,FIXNUM_P,
SWIG_NUM2DBL,rb_float_new);
specialize_std_pair_on_both(long,FIXNUM_P,
std::string,SWIG_STRING_P,
SWIG_RB2STR,SWIG_STR2RB);
specialize_std_pair_on_both(unsigned int,FIXNUM_P,
SWIG_RB2BOOL,SWIG_BOOL2RB);
specialize_std_pair_on_both(unsigned int,FIXNUM_P,
specialize_std_pair_on_both(unsigned int,FIXNUM_P,
specialize_std_pair_on_both(unsigned int,FIXNUM_P,
specialize_std_pair_on_both(unsigned int,FIXNUM_P,
specialize_std_pair_on_both(unsigned int,FIXNUM_P,
specialize_std_pair_on_both(unsigned int,FIXNUM_P,
specialize_std_pair_on_both(unsigned int,FIXNUM_P,
SWIG_NUM2DBL,rb_float_new);
specialize_std_pair_on_both(unsigned int,FIXNUM_P,
SWIG_NUM2DBL,rb_float_new);
specialize_std_pair_on_both(unsigned int,FIXNUM_P,
std::string,SWIG_STRING_P,
SWIG_RB2STR,SWIG_STR2RB);
specialize_std_pair_on_both(unsigned short,FIXNUM_P,
SWIG_RB2BOOL,SWIG_BOOL2RB);
specialize_std_pair_on_both(unsigned short,FIXNUM_P,
specialize_std_pair_on_both(unsigned short,FIXNUM_P,
specialize_std_pair_on_both(unsigned short,FIXNUM_P,
specialize_std_pair_on_both(unsigned short,FIXNUM_P,
specialize_std_pair_on_both(unsigned short,FIXNUM_P,
specialize_std_pair_on_both(unsigned short,FIXNUM_P,
specialize_std_pair_on_both(unsigned short,FIXNUM_P,
SWIG_NUM2DBL,rb_float_new);
specialize_std_pair_on_both(unsigned short,FIXNUM_P,
SWIG_NUM2DBL,rb_float_new);
specialize_std_pair_on_both(unsigned short,FIXNUM_P,
std::string,SWIG_STRING_P,
SWIG_RB2STR,SWIG_STR2RB);
specialize_std_pair_on_both(unsigned long,FIXNUM_P,
SWIG_RB2BOOL,SWIG_BOOL2RB);
specialize_std_pair_on_both(unsigned long,FIXNUM_P,
specialize_std_pair_on_both(unsigned long,FIXNUM_P,
specialize_std_pair_on_both(unsigned long,FIXNUM_P,
specialize_std_pair_on_both(unsigned long,FIXNUM_P,
specialize_std_pair_on_both(unsigned long,FIXNUM_P,
specialize_std_pair_on_both(unsigned long,FIXNUM_P,
specialize_std_pair_on_both(unsigned long,FIXNUM_P,
SWIG_NUM2DBL,rb_float_new);
specialize_std_pair_on_both(unsigned long,FIXNUM_P,
SWIG_NUM2DBL,rb_float_new);
specialize_std_pair_on_both(unsigned long,FIXNUM_P,
std::string,SWIG_STRING_P,
SWIG_RB2STR,SWIG_STR2RB);
specialize_std_pair_on_both(double,SWIG_FLOAT_P,
SWIG_NUM2DBL,rb_float_new,
SWIG_RB2BOOL,SWIG_BOOL2RB);
specialize_std_pair_on_both(double,SWIG_FLOAT_P,
SWIG_NUM2DBL,rb_float_new,
specialize_std_pair_on_both(double,SWIG_FLOAT_P,
SWIG_NUM2DBL,rb_float_new,
specialize_std_pair_on_both(double,SWIG_FLOAT_P,
SWIG_NUM2DBL,rb_float_new,
specialize_std_pair_on_both(double,SWIG_FLOAT_P,
SWIG_NUM2DBL,rb_float_new,
specialize_std_pair_on_both(double,SWIG_FLOAT_P,
SWIG_NUM2DBL,rb_float_new,
specialize_std_pair_on_both(double,SWIG_FLOAT_P,
SWIG_NUM2DBL,rb_float_new,
specialize_std_pair_on_both(double,SWIG_FLOAT_P,
SWIG_NUM2DBL,rb_float_new,
SWIG_NUM2DBL,rb_float_new);
specialize_std_pair_on_both(double,SWIG_FLOAT_P,
SWIG_NUM2DBL,rb_float_new,
SWIG_NUM2DBL,rb_float_new);
specialize_std_pair_on_both(double,SWIG_FLOAT_P,
SWIG_NUM2DBL,rb_float_new,
std::string,SWIG_STRING_P,
SWIG_RB2STR,SWIG_STR2RB);
specialize_std_pair_on_both(float,SWIG_FLOAT_P,
SWIG_NUM2DBL,rb_float_new,
SWIG_RB2BOOL,SWIG_BOOL2RB);
specialize_std_pair_on_both(float,SWIG_FLOAT_P,
SWIG_NUM2DBL,rb_float_new,
specialize_std_pair_on_both(float,SWIG_FLOAT_P,
SWIG_NUM2DBL,rb_float_new,
specialize_std_pair_on_both(float,SWIG_FLOAT_P,
SWIG_NUM2DBL,rb_float_new,
specialize_std_pair_on_both(float,SWIG_FLOAT_P,
SWIG_NUM2DBL,rb_float_new,
specialize_std_pair_on_both(float,SWIG_FLOAT_P,
SWIG_NUM2DBL,rb_float_new,
specialize_std_pair_on_both(float,SWIG_FLOAT_P,
SWIG_NUM2DBL,rb_float_new,
specialize_std_pair_on_both(float,SWIG_FLOAT_P,
SWIG_NUM2DBL,rb_float_new,
SWIG_NUM2DBL,rb_float_new);
specialize_std_pair_on_both(float,SWIG_FLOAT_P,
SWIG_NUM2DBL,rb_float_new,
SWIG_NUM2DBL,rb_float_new);
specialize_std_pair_on_both(float,SWIG_FLOAT_P,
SWIG_NUM2DBL,rb_float_new,
std::string,SWIG_STRING_P,
SWIG_RB2STR,SWIG_STR2RB);
specialize_std_pair_on_both(std::string,SWIG_STRING_P,
SWIG_RB2BOOL,SWIG_BOOL2RB);
specialize_std_pair_on_both(std::string,SWIG_STRING_P,
specialize_std_pair_on_both(std::string,SWIG_STRING_P,
specialize_std_pair_on_both(std::string,SWIG_STRING_P,
specialize_std_pair_on_both(std::string,SWIG_STRING_P,
specialize_std_pair_on_both(std::string,SWIG_STRING_P,
specialize_std_pair_on_both(std::string,SWIG_STRING_P,
specialize_std_pair_on_both(std::string,SWIG_STRING_P,
SWIG_NUM2DBL,rb_float_new);
specialize_std_pair_on_both(std::string,SWIG_STRING_P,
SWIG_NUM2DBL,rb_float_new);
specialize_std_pair_on_both(std::string,SWIG_STRING_P,
std::string,SWIG_STRING_P,
SWIG_RB2STR,SWIG_STR2RB);