Home | History | Annotate | Download | only in mzscheme
      1 /* -----------------------------------------------------------------------------
      2  * std_pair.i
      3  *
      4  * SWIG typemaps for std::pair
      5  * ----------------------------------------------------------------------------- */
      6 
      7 %include <std_common.i>
      8 %include <exception.i>
      9 
     10 
     11 // ------------------------------------------------------------------------
     12 // std::pair
     13 //
     14 // See std_vector.i for the rationale of typemap application
     15 // ------------------------------------------------------------------------
     16 
     17 %{
     18 #include <utility>
     19 %}
     20 
     21 // exported class
     22 
     23 namespace std {
     24 
     25     template<class T, class U> struct pair {
     26         %typemap(in) pair<T,U> (std::pair<T,U>* m) {
     27             if (SCHEME_PAIRP($input)) {
     28                 T* x;
     29                 U* y;
     30                 Scheme_Object *first, *second;
     31                 first = scheme_car($input);
     32                 second = scheme_cdr($input);
     33                 x = (T*) SWIG_MustGetPtr(first,$descriptor(T *),$argnum, 0);
     34                 y = (U*) SWIG_MustGetPtr(second,$descriptor(U *),$argnum, 0);
     35                 $1 = std::make_pair(*x,*y);
     36             } else {
     37                 $1 = *(($&1_type)
     38                        SWIG_MustGetPtr($input,$&1_descriptor,$argnum, 0));
     39             }
     40         }
     41         %typemap(in) const pair<T,U>& (std::pair<T,U> temp,
     42                                        std::pair<T,U>* m),
     43                      const pair<T,U>* (std::pair<T,U> temp,
     44                                        std::pair<T,U>* m) {
     45             if (SCHEME_PAIRP($input)) {
     46                 T* x;
     47                 U* y;
     48                 Scheme_Object *first, *second;
     49                 first = scheme_car($input);
     50                 second = scheme_cdr($input);
     51                 x = (T*) SWIG_MustGetPtr(first,$descriptor(T *),$argnum, 0);
     52                 y = (U*) SWIG_MustGetPtr(second,$descriptor(U *),$argnum, 0);
     53                 temp = std::make_pair(*x,*y);
     54                 $1 = &temp;
     55             } else {
     56                 $1 = ($1_ltype)
     57                     SWIG_MustGetPtr($input,$1_descriptor,$argnum, 0);
     58             }
     59         }
     60         %typemap(out) pair<T,U> {
     61             T* x = new T($1.first);
     62             U* y = new U($1.second);
     63             Scheme_Object* first = SWIG_NewPointerObj(x,$descriptor(T *), 1);
     64             Scheme_Object* second = SWIG_NewPointerObj(y,$descriptor(U *), 1);
     65             $result = scheme_make_pair(first,second);
     66         }
     67         %typecheck(SWIG_TYPECHECK_PAIR) pair<T,U> {
     68             /* native pair? */
     69             if (SCHEME_PAIRP($input)) {
     70                 T* x;
     71                 U* y;
     72                 Scheme_Object* first = scheme_car($input);
     73                 Scheme_Object* second = scheme_cdr($input);
     74                 if (SWIG_ConvertPtr(first,(void**) &x,
     75                                     $descriptor(T *), 0) != -1 &&
     76                     SWIG_ConvertPtr(second,(void**) &y,
     77                                     $descriptor(U *), 0) != -1) {
     78                         $1 = 1;
     79                 } else {
     80                     $1 = 0;
     81                 }
     82             } else {
     83                 /* wrapped pair? */
     84                 std::pair<T,U >* p;
     85                 if (SWIG_ConvertPtr($input,(void **) &p,
     86                                     $&1_descriptor, 0) != -1)
     87                     $1 = 1;
     88                 else
     89                     $1 = 0;
     90             }
     91         }
     92         %typecheck(SWIG_TYPECHECK_PAIR) const pair<T,U>&,
     93                                         const pair<T,U>* {
     94             /* native pair? */
     95             if (SCHEME_PAIRP($input)) {
     96                 T* x;
     97                 U* y;
     98                 Scheme_Object* first = scheme_car($input);
     99                 Scheme_Object* second = scheme_cdr($input);
    100                 if (SWIG_ConvertPtr(first,(void**) &x,
    101                                     $descriptor(T *), 0) != -1 &&
    102                     SWIG_ConvertPtr(second,(void**) &y,
    103                                     $descriptor(U *), 0) != -1) {
    104                         $1 = 1;
    105                 } else {
    106                     $1 = 0;
    107                 }
    108             } else {
    109                 /* wrapped pair? */
    110                 std::pair<T,U >* p;
    111                 if (SWIG_ConvertPtr($input,(void **) &p,
    112                                     $1_descriptor, 0) != -1)
    113                     $1 = 1;
    114                 else
    115                     $1 = 0;
    116             }
    117         }
    118         pair();
    119         pair(T first, U second);
    120         pair(const pair& p);
    121 
    122         template <class U1, class U2> pair(const pair<U1, U2> &p);
    123 
    124         T first;
    125         U second;
    126     };
    127 
    128     // specializations for built-ins
    129 
    130     %define specialize_std_pair_on_first(T,CHECK,CONVERT_FROM,CONVERT_TO)
    131     template<class U> struct pair<T,U> {
    132         %typemap(in) pair<T,U> (std::pair<T,U>* m) {
    133             if (SCHEME_PAIRP($input)) {
    134                 U* y;
    135                 Scheme_Object *first, *second;
    136                 first = scheme_car($input);
    137                 second = scheme_cdr($input);
    138                 if (!CHECK(first))
    139                     SWIG_exception(SWIG_TypeError,
    140                                    "pair<" #T "," #U "> expected");
    141                 y = (U*) SWIG_MustGetPtr(second,$descriptor(U *),$argnum, 0);
    142                 $1 = std::make_pair(CONVERT_FROM(first),*y);
    143             } else {
    144                 $1 = *(($&1_type)
    145                        SWIG_MustGetPtr($input,$&1_descriptor,$argnum, 0));
    146             }
    147         }
    148         %typemap(in) const pair<T,U>& (std::pair<T,U> temp,
    149                                        std::pair<T,U>* m),
    150                      const pair<T,U>* (std::pair<T,U> temp,
    151                                        std::pair<T,U>* m) {
    152             if (SCHEME_PAIRP($input)) {
    153                 U* y;
    154                 Scheme_Object *first, *second;
    155                 first = scheme_car($input);
    156                 second = scheme_cdr($input);
    157                 if (!CHECK(first))
    158                     SWIG_exception(SWIG_TypeError,
    159                                    "pair<" #T "," #U "> expected");
    160                 y = (U*) SWIG_MustGetPtr(second,$descriptor(U *),$argnum, 0);
    161                 temp = std::make_pair(CONVERT_FROM(first),*y);
    162                 $1 = &temp;
    163             } else {
    164                 $1 = ($1_ltype)
    165                     SWIG_MustGetPtr($input,$1_descriptor,$argnum, 0);
    166             }
    167         }
    168         %typemap(out) pair<T,U> {
    169             U* y = new U($1.second);
    170             Scheme_Object* second = SWIG_NewPointerObj(y,$descriptor(U *), 1);
    171             $result = scheme_make_pair(CONVERT_TO($1.first),second);
    172         }
    173         %typecheck(SWIG_TYPECHECK_PAIR) pair<T,U> {
    174             /* native pair? */
    175             if (SCHEME_PAIRP($input)) {
    176                 U* y;
    177                 Scheme_Object* first = scheme_car($input);
    178                 Scheme_Object* second = scheme_cdr($input);
    179                 if (CHECK(first) &&
    180                     SWIG_ConvertPtr(second,(void**) &y,
    181                                     $descriptor(U *), 0) != -1) {
    182                         $1 = 1;
    183                 } else {
    184                     $1 = 0;
    185                 }
    186             } else {
    187                 /* wrapped pair? */
    188                 std::pair<T,U >* p;
    189                 if (SWIG_ConvertPtr($input,(void **) &p,
    190                                     $&1_descriptor, 0) != -1)
    191                     $1 = 1;
    192                 else
    193                     $1 = 0;
    194             }
    195         }
    196         %typecheck(SWIG_TYPECHECK_PAIR) const pair<T,U>&,
    197                                         const pair<T,U>* {
    198             /* native pair? */
    199             if (SCHEME_PAIRP($input)) {
    200                 U* y;
    201                 Scheme_Object* first = scheme_car($input);
    202                 Scheme_Object* second = scheme_cdr($input);
    203                 if (CHECK(first) &&
    204                     SWIG_ConvertPtr(second,(void**) &y,
    205                                     $descriptor(U *), 0) != -1) {
    206                         $1 = 1;
    207                 } else {
    208                     $1 = 0;
    209                 }
    210             } else {
    211                 /* wrapped pair? */
    212                 std::pair<T,U >* p;
    213                 if (SWIG_ConvertPtr($input,(void **) &p,
    214                                     $1_descriptor, 0) != -1)
    215                     $1 = 1;
    216                 else
    217                     $1 = 0;
    218             }
    219         }
    220         pair();
    221         pair(T first, U second);
    222         pair(const pair& p);
    223 
    224         template <class U1, class U2> pair(const pair<U1, U2> &p);
    225 
    226         T first;
    227         U second;
    228     };
    229     %enddef
    230 
    231     %define specialize_std_pair_on_second(U,CHECK,CONVERT_FROM,CONVERT_TO)
    232     template<class T> struct pair<T,U> {
    233         %typemap(in) pair<T,U> (std::pair<T,U>* m) {
    234             if (SCHEME_PAIRP($input)) {
    235                 T* x;
    236                 Scheme_Object *first, *second;
    237                 first = scheme_car($input);
    238                 second = scheme_cdr($input);
    239                 x = (T*) SWIG_MustGetPtr(first,$descriptor(T *),$argnum, 0);
    240                 if (!CHECK(second))
    241                     SWIG_exception(SWIG_TypeError,
    242                                    "pair<" #T "," #U "> expected");
    243                 $1 = std::make_pair(*x,CONVERT_FROM(second));
    244             } else {
    245                 $1 = *(($&1_type)
    246                        SWIG_MustGetPtr($input,$&1_descriptor,$argnum, 0));
    247             }
    248         }
    249         %typemap(in) const pair<T,U>& (std::pair<T,U> temp,
    250                                        std::pair<T,U>* m),
    251                      const pair<T,U>* (std::pair<T,U> temp,
    252                                        std::pair<T,U>* m) {
    253             if (SCHEME_PAIRP($input)) {
    254                 T* x;
    255                 Scheme_Object *first, *second;
    256                 first = scheme_car($input);
    257                 second = scheme_cdr($input);
    258                 x = (T*) SWIG_MustGetPtr(first,$descriptor(T *),$argnum, 0);
    259                 if (!CHECK(second))
    260                     SWIG_exception(SWIG_TypeError,
    261                                    "pair<" #T "," #U "> expected");
    262                 temp = std::make_pair(*x,CONVERT_FROM(second));
    263                 $1 = &temp;
    264             } else {
    265                 $1 = ($1_ltype)
    266                     SWIG_MustGetPtr($input,$1_descriptor,$argnum, 0);
    267             }
    268         }
    269         %typemap(out) pair<T,U> {
    270             T* x = new T($1.first);
    271             Scheme_Object* first = SWIG_NewPointerObj(x,$descriptor(T *), 1);
    272             $result = scheme_make_pair(first,CONVERT_TO($1.second));
    273         }
    274         %typecheck(SWIG_TYPECHECK_PAIR) pair<T,U> {
    275             /* native pair? */
    276             if (SCHEME_PAIRP($input)) {
    277                 T* x;
    278                 Scheme_Object* first = scheme_car($input);
    279                 Scheme_Object* second = scheme_cdr($input);
    280                 if (SWIG_ConvertPtr(first,(void**) &x,
    281                                     $descriptor(T *), 0) != -1 &&
    282                     CHECK(second)) {
    283                         $1 = 1;
    284                 } else {
    285                     $1 = 0;
    286                 }
    287             } else {
    288                 /* wrapped pair? */
    289                 std::pair<T,U >* p;
    290                 if (SWIG_ConvertPtr($input,(void **) &p,
    291                                     $&1_descriptor, 0) != -1)
    292                     $1 = 1;
    293                 else
    294                     $1 = 0;
    295             }
    296         }
    297         %typecheck(SWIG_TYPECHECK_PAIR) const pair<T,U>&,
    298                                         const pair<T,U>* {
    299             /* native pair? */
    300             if (SCHEME_PAIRP($input)) {
    301                 T* x;
    302                 Scheme_Object* first = scheme_car($input);
    303                 Scheme_Object* second = scheme_cdr($input);
    304                 if (SWIG_ConvertPtr(first,(void**) &x,
    305                                     $descriptor(T *), 0) != -1 &&
    306                     CHECK(second)) {
    307                         $1 = 1;
    308                 } else {
    309                     $1 = 0;
    310                 }
    311             } else {
    312                 /* wrapped pair? */
    313                 std::pair<T,U >* p;
    314                 if (SWIG_ConvertPtr($input,(void **) &p,
    315                                     $1_descriptor, 0) != -1)
    316                     $1 = 1;
    317                 else
    318                     $1 = 0;
    319             }
    320         }
    321         pair();
    322         pair(T first, U second);
    323         pair(const pair& p);
    324 
    325         template <class U1, class U2> pair(const pair<U1, U2> &p);
    326 
    327         T first;
    328         U second;
    329     };
    330     %enddef
    331 
    332     %define specialize_std_pair_on_both(T,CHECK_T,CONVERT_T_FROM,CONVERT_T_TO,
    333                                         U,CHECK_U,CONVERT_U_FROM,CONVERT_U_TO)
    334     template<> struct pair<T,U> {
    335         %typemap(in) pair<T,U> (std::pair<T,U>* m) {
    336             if (SCHEME_PAIRP($input)) {
    337                 Scheme_Object *first, *second;
    338                 first = scheme_car($input);
    339                 second = scheme_cdr($input);
    340                 if (!CHECK_T(first) || !CHECK_U(second))
    341                     SWIG_exception(SWIG_TypeError,
    342                                    "pair<" #T "," #U "> expected");
    343                 $1 = make_pair(CONVERT_T_FROM(first),
    344                                CONVERT_U_FROM(second));
    345             } else {
    346                 $1 = *(($&1_type)
    347                        SWIG_MustGetPtr($input,$&1_descriptor,$argnum, 0));
    348             }
    349         }
    350         %typemap(in) const pair<T,U>& (std::pair<T,U> temp,
    351                                        std::pair<T,U>* m),
    352                      const pair<T,U>* (std::pair<T,U> temp,
    353                                        std::pair<T,U>* m) {
    354             if (SCHEME_PAIRP($input)) {
    355                 Scheme_Object *first, *second;
    356             T *x;
    357                 first = scheme_car($input);
    358                 second = scheme_cdr($input);
    359                 x = (T*) SWIG_MustGetPtr(first,$descriptor(T *),$argnum, 0);
    360                 if (!CHECK_T(first) || !CHECK_U(second))
    361                     SWIG_exception(SWIG_TypeError,
    362                                    "pair<" #T "," #U "> expected");
    363                 temp = make_pair(CONVERT_T_FROM(first),
    364                                CONVERT_U_FROM(second));
    365                 $1 = &temp;
    366             } else {
    367                 $1 = ($1_ltype)
    368                     SWIG_MustGetPtr($input,$1_descriptor,$argnum, 0);
    369             }
    370         }
    371         %typemap(out) pair<T,U> {
    372             $result = scheme_make_pair(CONVERT_T_TO($1.first),
    373                                        CONVERT_U_TO($1.second));
    374         }
    375         %typecheck(SWIG_TYPECHECK_PAIR) pair<T,U> {
    376             /* native pair? */
    377             if (SCHEME_PAIRP($input)) {
    378                 Scheme_Object* first = scheme_car($input);
    379                 Scheme_Object* second = scheme_cdr($input);
    380                 if (CHECK_T(first) && CHECK_U(second)) {
    381                         $1 = 1;
    382                 } else {
    383                     $1 = 0;
    384                 }
    385             } else {
    386                 /* wrapped pair? */
    387                 std::pair<T,U >* p;
    388                 if (SWIG_ConvertPtr($input,(void **) &p,
    389                                     $&1_descriptor, 0) != -1)
    390                     $1 = 1;
    391                 else
    392                     $1 = 0;
    393             }
    394         }
    395         %typecheck(SWIG_TYPECHECK_PAIR) const pair<T,U>&,
    396                                         const pair<T,U>* {
    397             /* native pair? */
    398             if (SCHEME_PAIRP($input)) {
    399                 Scheme_Object* first = scheme_car($input);
    400                 Scheme_Object* second = scheme_cdr($input);
    401                 if (CHECK_T(first) && CHECK_U(second)) {
    402                         $1 = 1;
    403                 } else {
    404                     $1 = 0;
    405                 }
    406             } else {
    407                 /* wrapped pair? */
    408                 std::pair<T,U >* p;
    409                 if (SWIG_ConvertPtr($input,(void **) &p,
    410                                     $1_descriptor, 0) != -1)
    411                     $1 = 1;
    412                 else
    413                     $1 = 0;
    414             }
    415         }
    416         pair();
    417         pair(T first, U second);
    418         pair(const pair& p);
    419 
    420         template <class U1, class U2> pair(const pair<U1, U2> &p);
    421 
    422         T first;
    423         U second;
    424     };
    425     %enddef
    426 
    427 
    428     specialize_std_pair_on_first(bool,SCHEME_BOOLP,
    429                               SCHEME_TRUEP,swig_make_boolean);
    430     specialize_std_pair_on_first(int,SCHEME_INTP,
    431                               SCHEME_INT_VAL,scheme_make_integer_value);
    432     specialize_std_pair_on_first(short,SCHEME_INTP,
    433                               SCHEME_INT_VAL,scheme_make_integer_value);
    434     specialize_std_pair_on_first(long,SCHEME_INTP,
    435                               SCHEME_INT_VAL,scheme_make_integer_value);
    436     specialize_std_pair_on_first(unsigned int,SCHEME_INTP,
    437                               SCHEME_INT_VAL,scheme_make_integer_value);
    438     specialize_std_pair_on_first(unsigned short,SCHEME_INTP,
    439                               SCHEME_INT_VAL,scheme_make_integer_value);
    440     specialize_std_pair_on_first(unsigned long,SCHEME_INTP,
    441                               SCHEME_INT_VAL,scheme_make_integer_value);
    442     specialize_std_pair_on_first(double,SCHEME_REALP,
    443                               scheme_real_to_double,scheme_make_double);
    444     specialize_std_pair_on_first(float,SCHEME_REALP,
    445                               scheme_real_to_double,scheme_make_double);
    446     specialize_std_pair_on_first(std::string,SCHEME_STRINGP,
    447                               swig_scm_to_string,swig_make_string);
    448 
    449     specialize_std_pair_on_second(bool,SCHEME_BOOLP,
    450                                 SCHEME_TRUEP,swig_make_boolean);
    451     specialize_std_pair_on_second(int,SCHEME_INTP,
    452                                 SCHEME_INT_VAL,scheme_make_integer_value);
    453     specialize_std_pair_on_second(short,SCHEME_INTP,
    454                                 SCHEME_INT_VAL,scheme_make_integer_value);
    455     specialize_std_pair_on_second(long,SCHEME_INTP,
    456                                 SCHEME_INT_VAL,scheme_make_integer_value);
    457     specialize_std_pair_on_second(unsigned int,SCHEME_INTP,
    458                                 SCHEME_INT_VAL,scheme_make_integer_value);
    459     specialize_std_pair_on_second(unsigned short,SCHEME_INTP,
    460                                 SCHEME_INT_VAL,scheme_make_integer_value);
    461     specialize_std_pair_on_second(unsigned long,SCHEME_INTP,
    462                                 SCHEME_INT_VAL,scheme_make_integer_value);
    463     specialize_std_pair_on_second(double,SCHEME_REALP,
    464                                 scheme_real_to_double,scheme_make_double);
    465     specialize_std_pair_on_second(float,SCHEME_REALP,
    466                                 scheme_real_to_double,scheme_make_double);
    467     specialize_std_pair_on_second(std::string,SCHEME_STRINGP,
    468                                 swig_scm_to_string,swig_make_string);
    469 
    470     specialize_std_pair_on_both(bool,SCHEME_BOOLP,
    471                                SCHEME_TRUEP,swig_make_boolean,
    472                                bool,SCHEME_BOOLP,
    473                                SCHEME_TRUEP,swig_make_boolean);
    474     specialize_std_pair_on_both(bool,SCHEME_BOOLP,
    475                                SCHEME_TRUEP,swig_make_boolean,
    476                                int,SCHEME_INTP,
    477                                SCHEME_INT_VAL,scheme_make_integer_value);
    478     specialize_std_pair_on_both(bool,SCHEME_BOOLP,
    479                                SCHEME_TRUEP,swig_make_boolean,
    480                                short,SCHEME_INTP,
    481                                SCHEME_INT_VAL,scheme_make_integer_value);
    482     specialize_std_pair_on_both(bool,SCHEME_BOOLP,
    483                                SCHEME_TRUEP,swig_make_boolean,
    484                                long,SCHEME_INTP,
    485                                SCHEME_INT_VAL,scheme_make_integer_value);
    486     specialize_std_pair_on_both(bool,SCHEME_BOOLP,
    487                                SCHEME_TRUEP,swig_make_boolean,
    488                                unsigned int,SCHEME_INTP,
    489                                SCHEME_INT_VAL,scheme_make_integer_value);
    490     specialize_std_pair_on_both(bool,SCHEME_BOOLP,
    491                                SCHEME_TRUEP,swig_make_boolean,
    492                                unsigned short,SCHEME_INTP,
    493                                SCHEME_INT_VAL,scheme_make_integer_value);
    494     specialize_std_pair_on_both(bool,SCHEME_BOOLP,
    495                                SCHEME_TRUEP,swig_make_boolean,
    496                                unsigned long,SCHEME_INTP,
    497                                SCHEME_INT_VAL,scheme_make_integer_value);
    498     specialize_std_pair_on_both(bool,SCHEME_BOOLP,
    499                                SCHEME_TRUEP,swig_make_boolean,
    500                                double,SCHEME_REALP,
    501                                scheme_real_to_double,scheme_make_double);
    502     specialize_std_pair_on_both(bool,SCHEME_BOOLP,
    503                                SCHEME_TRUEP,swig_make_boolean,
    504                                float,SCHEME_REALP,
    505                                scheme_real_to_double,scheme_make_double);
    506     specialize_std_pair_on_both(bool,SCHEME_BOOLP,
    507                                SCHEME_TRUEP,swig_make_boolean,
    508                                std::string,SCHEME_STRINGP,
    509                                swig_scm_to_string,swig_make_string);
    510     specialize_std_pair_on_both(int,SCHEME_INTP,
    511                                SCHEME_INT_VAL,scheme_make_integer_value,
    512                                bool,SCHEME_BOOLP,
    513                                SCHEME_TRUEP,swig_make_boolean);
    514     specialize_std_pair_on_both(int,SCHEME_INTP,
    515                                SCHEME_INT_VAL,scheme_make_integer_value,
    516                                int,SCHEME_INTP,
    517                                SCHEME_INT_VAL,scheme_make_integer_value);
    518     specialize_std_pair_on_both(int,SCHEME_INTP,
    519                                SCHEME_INT_VAL,scheme_make_integer_value,
    520                                short,SCHEME_INTP,
    521                                SCHEME_INT_VAL,scheme_make_integer_value);
    522     specialize_std_pair_on_both(int,SCHEME_INTP,
    523                                SCHEME_INT_VAL,scheme_make_integer_value,
    524                                long,SCHEME_INTP,
    525                                SCHEME_INT_VAL,scheme_make_integer_value);
    526     specialize_std_pair_on_both(int,SCHEME_INTP,
    527                                SCHEME_INT_VAL,scheme_make_integer_value,
    528                                unsigned int,SCHEME_INTP,
    529                                SCHEME_INT_VAL,scheme_make_integer_value);
    530     specialize_std_pair_on_both(int,SCHEME_INTP,
    531                                SCHEME_INT_VAL,scheme_make_integer_value,
    532                                unsigned short,SCHEME_INTP,
    533                                SCHEME_INT_VAL,scheme_make_integer_value);
    534     specialize_std_pair_on_both(int,SCHEME_INTP,
    535                                SCHEME_INT_VAL,scheme_make_integer_value,
    536                                unsigned long,SCHEME_INTP,
    537                                SCHEME_INT_VAL,scheme_make_integer_value);
    538     specialize_std_pair_on_both(int,SCHEME_INTP,
    539                                SCHEME_INT_VAL,scheme_make_integer_value,
    540                                double,SCHEME_REALP,
    541                                scheme_real_to_double,scheme_make_double);
    542     specialize_std_pair_on_both(int,SCHEME_INTP,
    543                                SCHEME_INT_VAL,scheme_make_integer_value,
    544                                float,SCHEME_REALP,
    545                                scheme_real_to_double,scheme_make_double);
    546     specialize_std_pair_on_both(int,SCHEME_INTP,
    547                                SCHEME_INT_VAL,scheme_make_integer_value,
    548                                std::string,SCHEME_STRINGP,
    549                                swig_scm_to_string,swig_make_string);
    550     specialize_std_pair_on_both(short,SCHEME_INTP,
    551                                SCHEME_INT_VAL,scheme_make_integer_value,
    552                                bool,SCHEME_BOOLP,
    553                                SCHEME_TRUEP,swig_make_boolean);
    554     specialize_std_pair_on_both(short,SCHEME_INTP,
    555                                SCHEME_INT_VAL,scheme_make_integer_value,
    556                                int,SCHEME_INTP,
    557                                SCHEME_INT_VAL,scheme_make_integer_value);
    558     specialize_std_pair_on_both(short,SCHEME_INTP,
    559                                SCHEME_INT_VAL,scheme_make_integer_value,
    560                                short,SCHEME_INTP,
    561                                SCHEME_INT_VAL,scheme_make_integer_value);
    562     specialize_std_pair_on_both(short,SCHEME_INTP,
    563                                SCHEME_INT_VAL,scheme_make_integer_value,
    564                                long,SCHEME_INTP,
    565                                SCHEME_INT_VAL,scheme_make_integer_value);
    566     specialize_std_pair_on_both(short,SCHEME_INTP,
    567                                SCHEME_INT_VAL,scheme_make_integer_value,
    568                                unsigned int,SCHEME_INTP,
    569                                SCHEME_INT_VAL,scheme_make_integer_value);
    570     specialize_std_pair_on_both(short,SCHEME_INTP,
    571                                SCHEME_INT_VAL,scheme_make_integer_value,
    572                                unsigned short,SCHEME_INTP,
    573                                SCHEME_INT_VAL,scheme_make_integer_value);
    574     specialize_std_pair_on_both(short,SCHEME_INTP,
    575                                SCHEME_INT_VAL,scheme_make_integer_value,
    576                                unsigned long,SCHEME_INTP,
    577                                SCHEME_INT_VAL,scheme_make_integer_value);
    578     specialize_std_pair_on_both(short,SCHEME_INTP,
    579                                SCHEME_INT_VAL,scheme_make_integer_value,
    580                                double,SCHEME_REALP,
    581                                scheme_real_to_double,scheme_make_double);
    582     specialize_std_pair_on_both(short,SCHEME_INTP,
    583                                SCHEME_INT_VAL,scheme_make_integer_value,
    584                                float,SCHEME_REALP,
    585                                scheme_real_to_double,scheme_make_double);
    586     specialize_std_pair_on_both(short,SCHEME_INTP,
    587                                SCHEME_INT_VAL,scheme_make_integer_value,
    588                                std::string,SCHEME_STRINGP,
    589                                swig_scm_to_string,swig_make_string);
    590     specialize_std_pair_on_both(long,SCHEME_INTP,
    591                                SCHEME_INT_VAL,scheme_make_integer_value,
    592                                bool,SCHEME_BOOLP,
    593                                SCHEME_TRUEP,swig_make_boolean);
    594     specialize_std_pair_on_both(long,SCHEME_INTP,
    595                                SCHEME_INT_VAL,scheme_make_integer_value,
    596                                int,SCHEME_INTP,
    597                                SCHEME_INT_VAL,scheme_make_integer_value);
    598     specialize_std_pair_on_both(long,SCHEME_INTP,
    599                                SCHEME_INT_VAL,scheme_make_integer_value,
    600                                short,SCHEME_INTP,
    601                                SCHEME_INT_VAL,scheme_make_integer_value);
    602     specialize_std_pair_on_both(long,SCHEME_INTP,
    603                                SCHEME_INT_VAL,scheme_make_integer_value,
    604                                long,SCHEME_INTP,
    605                                SCHEME_INT_VAL,scheme_make_integer_value);
    606     specialize_std_pair_on_both(long,SCHEME_INTP,
    607                                SCHEME_INT_VAL,scheme_make_integer_value,
    608                                unsigned int,SCHEME_INTP,
    609                                SCHEME_INT_VAL,scheme_make_integer_value);
    610     specialize_std_pair_on_both(long,SCHEME_INTP,
    611                                SCHEME_INT_VAL,scheme_make_integer_value,
    612                                unsigned short,SCHEME_INTP,
    613                                SCHEME_INT_VAL,scheme_make_integer_value);
    614     specialize_std_pair_on_both(long,SCHEME_INTP,
    615                                SCHEME_INT_VAL,scheme_make_integer_value,
    616                                unsigned long,SCHEME_INTP,
    617                                SCHEME_INT_VAL,scheme_make_integer_value);
    618     specialize_std_pair_on_both(long,SCHEME_INTP,
    619                                SCHEME_INT_VAL,scheme_make_integer_value,
    620                                double,SCHEME_REALP,
    621                                scheme_real_to_double,scheme_make_double);
    622     specialize_std_pair_on_both(long,SCHEME_INTP,
    623                                SCHEME_INT_VAL,scheme_make_integer_value,
    624                                float,SCHEME_REALP,
    625                                scheme_real_to_double,scheme_make_double);
    626     specialize_std_pair_on_both(long,SCHEME_INTP,
    627                                SCHEME_INT_VAL,scheme_make_integer_value,
    628                                std::string,SCHEME_STRINGP,
    629                                swig_scm_to_string,swig_make_string);
    630     specialize_std_pair_on_both(unsigned int,SCHEME_INTP,
    631                                SCHEME_INT_VAL,scheme_make_integer_value,
    632                                bool,SCHEME_BOOLP,
    633                                SCHEME_TRUEP,swig_make_boolean);
    634     specialize_std_pair_on_both(unsigned int,SCHEME_INTP,
    635                                SCHEME_INT_VAL,scheme_make_integer_value,
    636                                int,SCHEME_INTP,
    637                                SCHEME_INT_VAL,scheme_make_integer_value);
    638     specialize_std_pair_on_both(unsigned int,SCHEME_INTP,
    639                                SCHEME_INT_VAL,scheme_make_integer_value,
    640                                short,SCHEME_INTP,
    641                                SCHEME_INT_VAL,scheme_make_integer_value);
    642     specialize_std_pair_on_both(unsigned int,SCHEME_INTP,
    643                                SCHEME_INT_VAL,scheme_make_integer_value,
    644                                long,SCHEME_INTP,
    645                                SCHEME_INT_VAL,scheme_make_integer_value);
    646     specialize_std_pair_on_both(unsigned int,SCHEME_INTP,
    647                                SCHEME_INT_VAL,scheme_make_integer_value,
    648                                unsigned int,SCHEME_INTP,
    649                                SCHEME_INT_VAL,scheme_make_integer_value);
    650     specialize_std_pair_on_both(unsigned int,SCHEME_INTP,
    651                                SCHEME_INT_VAL,scheme_make_integer_value,
    652                                unsigned short,SCHEME_INTP,
    653                                SCHEME_INT_VAL,scheme_make_integer_value);
    654     specialize_std_pair_on_both(unsigned int,SCHEME_INTP,
    655                                SCHEME_INT_VAL,scheme_make_integer_value,
    656                                unsigned long,SCHEME_INTP,
    657                                SCHEME_INT_VAL,scheme_make_integer_value);
    658     specialize_std_pair_on_both(unsigned int,SCHEME_INTP,
    659                                SCHEME_INT_VAL,scheme_make_integer_value,
    660                                double,SCHEME_REALP,
    661                                scheme_real_to_double,scheme_make_double);
    662     specialize_std_pair_on_both(unsigned int,SCHEME_INTP,
    663                                SCHEME_INT_VAL,scheme_make_integer_value,
    664                                float,SCHEME_REALP,
    665                                scheme_real_to_double,scheme_make_double);
    666     specialize_std_pair_on_both(unsigned int,SCHEME_INTP,
    667                                SCHEME_INT_VAL,scheme_make_integer_value,
    668                                std::string,SCHEME_STRINGP,
    669                                swig_scm_to_string,swig_make_string);
    670     specialize_std_pair_on_both(unsigned short,SCHEME_INTP,
    671                                SCHEME_INT_VAL,scheme_make_integer_value,
    672                                bool,SCHEME_BOOLP,
    673                                SCHEME_TRUEP,swig_make_boolean);
    674     specialize_std_pair_on_both(unsigned short,SCHEME_INTP,
    675                                SCHEME_INT_VAL,scheme_make_integer_value,
    676                                int,SCHEME_INTP,
    677                                SCHEME_INT_VAL,scheme_make_integer_value);
    678     specialize_std_pair_on_both(unsigned short,SCHEME_INTP,
    679                                SCHEME_INT_VAL,scheme_make_integer_value,
    680                                short,SCHEME_INTP,
    681                                SCHEME_INT_VAL,scheme_make_integer_value);
    682     specialize_std_pair_on_both(unsigned short,SCHEME_INTP,
    683                                SCHEME_INT_VAL,scheme_make_integer_value,
    684                                long,SCHEME_INTP,
    685                                SCHEME_INT_VAL,scheme_make_integer_value);
    686     specialize_std_pair_on_both(unsigned short,SCHEME_INTP,
    687                                SCHEME_INT_VAL,scheme_make_integer_value,
    688                                unsigned int,SCHEME_INTP,
    689                                SCHEME_INT_VAL,scheme_make_integer_value);
    690     specialize_std_pair_on_both(unsigned short,SCHEME_INTP,
    691                                SCHEME_INT_VAL,scheme_make_integer_value,
    692                                unsigned short,SCHEME_INTP,
    693                                SCHEME_INT_VAL,scheme_make_integer_value);
    694     specialize_std_pair_on_both(unsigned short,SCHEME_INTP,
    695                                SCHEME_INT_VAL,scheme_make_integer_value,
    696                                unsigned long,SCHEME_INTP,
    697                                SCHEME_INT_VAL,scheme_make_integer_value);
    698     specialize_std_pair_on_both(unsigned short,SCHEME_INTP,
    699                                SCHEME_INT_VAL,scheme_make_integer_value,
    700                                double,SCHEME_REALP,
    701                                scheme_real_to_double,scheme_make_double);
    702     specialize_std_pair_on_both(unsigned short,SCHEME_INTP,
    703                                SCHEME_INT_VAL,scheme_make_integer_value,
    704                                float,SCHEME_REALP,
    705                                scheme_real_to_double,scheme_make_double);
    706     specialize_std_pair_on_both(unsigned short,SCHEME_INTP,
    707                                SCHEME_INT_VAL,scheme_make_integer_value,
    708                                std::string,SCHEME_STRINGP,
    709                                swig_scm_to_string,swig_make_string);
    710     specialize_std_pair_on_both(unsigned long,SCHEME_INTP,
    711                                SCHEME_INT_VAL,scheme_make_integer_value,
    712                                bool,SCHEME_BOOLP,
    713                                SCHEME_TRUEP,swig_make_boolean);
    714     specialize_std_pair_on_both(unsigned long,SCHEME_INTP,
    715                                SCHEME_INT_VAL,scheme_make_integer_value,
    716                                int,SCHEME_INTP,
    717                                SCHEME_INT_VAL,scheme_make_integer_value);
    718     specialize_std_pair_on_both(unsigned long,SCHEME_INTP,
    719                                SCHEME_INT_VAL,scheme_make_integer_value,
    720                                short,SCHEME_INTP,
    721                                SCHEME_INT_VAL,scheme_make_integer_value);
    722     specialize_std_pair_on_both(unsigned long,SCHEME_INTP,
    723                                SCHEME_INT_VAL,scheme_make_integer_value,
    724                                long,SCHEME_INTP,
    725                                SCHEME_INT_VAL,scheme_make_integer_value);
    726     specialize_std_pair_on_both(unsigned long,SCHEME_INTP,
    727                                SCHEME_INT_VAL,scheme_make_integer_value,
    728                                unsigned int,SCHEME_INTP,
    729                                SCHEME_INT_VAL,scheme_make_integer_value);
    730     specialize_std_pair_on_both(unsigned long,SCHEME_INTP,
    731                                SCHEME_INT_VAL,scheme_make_integer_value,
    732                                unsigned short,SCHEME_INTP,
    733                                SCHEME_INT_VAL,scheme_make_integer_value);
    734     specialize_std_pair_on_both(unsigned long,SCHEME_INTP,
    735                                SCHEME_INT_VAL,scheme_make_integer_value,
    736                                unsigned long,SCHEME_INTP,
    737                                SCHEME_INT_VAL,scheme_make_integer_value);
    738     specialize_std_pair_on_both(unsigned long,SCHEME_INTP,
    739                                SCHEME_INT_VAL,scheme_make_integer_value,
    740                                double,SCHEME_REALP,
    741                                scheme_real_to_double,scheme_make_double);
    742     specialize_std_pair_on_both(unsigned long,SCHEME_INTP,
    743                                SCHEME_INT_VAL,scheme_make_integer_value,
    744                                float,SCHEME_REALP,
    745                                scheme_real_to_double,scheme_make_double);
    746     specialize_std_pair_on_both(unsigned long,SCHEME_INTP,
    747                                SCHEME_INT_VAL,scheme_make_integer_value,
    748                                std::string,SCHEME_STRINGP,
    749                                swig_scm_to_string,swig_make_string);
    750     specialize_std_pair_on_both(double,SCHEME_REALP,
    751                                scheme_real_to_double,scheme_make_double,
    752                                bool,SCHEME_BOOLP,
    753                                SCHEME_TRUEP,swig_make_boolean);
    754     specialize_std_pair_on_both(double,SCHEME_REALP,
    755                                scheme_real_to_double,scheme_make_double,
    756                                int,SCHEME_INTP,
    757                                SCHEME_INT_VAL,scheme_make_integer_value);
    758     specialize_std_pair_on_both(double,SCHEME_REALP,
    759                                scheme_real_to_double,scheme_make_double,
    760                                short,SCHEME_INTP,
    761                                SCHEME_INT_VAL,scheme_make_integer_value);
    762     specialize_std_pair_on_both(double,SCHEME_REALP,
    763                                scheme_real_to_double,scheme_make_double,
    764                                long,SCHEME_INTP,
    765                                SCHEME_INT_VAL,scheme_make_integer_value);
    766     specialize_std_pair_on_both(double,SCHEME_REALP,
    767                                scheme_real_to_double,scheme_make_double,
    768                                unsigned int,SCHEME_INTP,
    769                                SCHEME_INT_VAL,scheme_make_integer_value);
    770     specialize_std_pair_on_both(double,SCHEME_REALP,
    771                                scheme_real_to_double,scheme_make_double,
    772                                unsigned short,SCHEME_INTP,
    773                                SCHEME_INT_VAL,scheme_make_integer_value);
    774     specialize_std_pair_on_both(double,SCHEME_REALP,
    775                                scheme_real_to_double,scheme_make_double,
    776                                unsigned long,SCHEME_INTP,
    777                                SCHEME_INT_VAL,scheme_make_integer_value);
    778     specialize_std_pair_on_both(double,SCHEME_REALP,
    779                                scheme_real_to_double,scheme_make_double,
    780                                double,SCHEME_REALP,
    781                                scheme_real_to_double,scheme_make_double);
    782     specialize_std_pair_on_both(double,SCHEME_REALP,
    783                                scheme_real_to_double,scheme_make_double,
    784                                float,SCHEME_REALP,
    785                                scheme_real_to_double,scheme_make_double);
    786     specialize_std_pair_on_both(double,SCHEME_REALP,
    787                                scheme_real_to_double,scheme_make_double,
    788                                std::string,SCHEME_STRINGP,
    789                                swig_scm_to_string,swig_make_string);
    790     specialize_std_pair_on_both(float,SCHEME_REALP,
    791                                scheme_real_to_double,scheme_make_double,
    792                                bool,SCHEME_BOOLP,
    793                                SCHEME_TRUEP,swig_make_boolean);
    794     specialize_std_pair_on_both(float,SCHEME_REALP,
    795                                scheme_real_to_double,scheme_make_double,
    796                                int,SCHEME_INTP,
    797                                SCHEME_INT_VAL,scheme_make_integer_value);
    798     specialize_std_pair_on_both(float,SCHEME_REALP,
    799                                scheme_real_to_double,scheme_make_double,
    800                                short,SCHEME_INTP,
    801                                SCHEME_INT_VAL,scheme_make_integer_value);
    802     specialize_std_pair_on_both(float,SCHEME_REALP,
    803                                scheme_real_to_double,scheme_make_double,
    804                                long,SCHEME_INTP,
    805                                SCHEME_INT_VAL,scheme_make_integer_value);
    806     specialize_std_pair_on_both(float,SCHEME_REALP,
    807                                scheme_real_to_double,scheme_make_double,
    808                                unsigned int,SCHEME_INTP,
    809                                SCHEME_INT_VAL,scheme_make_integer_value);
    810     specialize_std_pair_on_both(float,SCHEME_REALP,
    811                                scheme_real_to_double,scheme_make_double,
    812                                unsigned short,SCHEME_INTP,
    813                                SCHEME_INT_VAL,scheme_make_integer_value);
    814     specialize_std_pair_on_both(float,SCHEME_REALP,
    815                                scheme_real_to_double,scheme_make_double,
    816                                unsigned long,SCHEME_INTP,
    817                                SCHEME_INT_VAL,scheme_make_integer_value);
    818     specialize_std_pair_on_both(float,SCHEME_REALP,
    819                                scheme_real_to_double,scheme_make_double,
    820                                double,SCHEME_REALP,
    821                                scheme_real_to_double,scheme_make_double);
    822     specialize_std_pair_on_both(float,SCHEME_REALP,
    823                                scheme_real_to_double,scheme_make_double,
    824                                float,SCHEME_REALP,
    825                                scheme_real_to_double,scheme_make_double);
    826     specialize_std_pair_on_both(float,SCHEME_REALP,
    827                                scheme_real_to_double,scheme_make_double,
    828                                std::string,SCHEME_STRINGP,
    829                                swig_scm_to_string,swig_make_string);
    830     specialize_std_pair_on_both(std::string,SCHEME_STRINGP,
    831                                swig_scm_to_string,swig_make_string,
    832                                bool,SCHEME_BOOLP,
    833                                SCHEME_TRUEP,swig_make_boolean);
    834     specialize_std_pair_on_both(std::string,SCHEME_STRINGP,
    835                                swig_scm_to_string,swig_make_string,
    836                                int,SCHEME_INTP,
    837                                SCHEME_INT_VAL,scheme_make_integer_value);
    838     specialize_std_pair_on_both(std::string,SCHEME_STRINGP,
    839                                swig_scm_to_string,swig_make_string,
    840                                short,SCHEME_INTP,
    841                                SCHEME_INT_VAL,scheme_make_integer_value);
    842     specialize_std_pair_on_both(std::string,SCHEME_STRINGP,
    843                                swig_scm_to_string,swig_make_string,
    844                                long,SCHEME_INTP,
    845                                SCHEME_INT_VAL,scheme_make_integer_value);
    846     specialize_std_pair_on_both(std::string,SCHEME_STRINGP,
    847                                swig_scm_to_string,swig_make_string,
    848                                unsigned int,SCHEME_INTP,
    849                                SCHEME_INT_VAL,scheme_make_integer_value);
    850     specialize_std_pair_on_both(std::string,SCHEME_STRINGP,
    851                                swig_scm_to_string,swig_make_string,
    852                                unsigned short,SCHEME_INTP,
    853                                SCHEME_INT_VAL,scheme_make_integer_value);
    854     specialize_std_pair_on_both(std::string,SCHEME_STRINGP,
    855                                swig_scm_to_string,swig_make_string,
    856                                unsigned long,SCHEME_INTP,
    857                                SCHEME_INT_VAL,scheme_make_integer_value);
    858     specialize_std_pair_on_both(std::string,SCHEME_STRINGP,
    859                                swig_scm_to_string,swig_make_string,
    860                                double,SCHEME_REALP,
    861                                scheme_real_to_double,scheme_make_double);
    862     specialize_std_pair_on_both(std::string,SCHEME_STRINGP,
    863                                swig_scm_to_string,swig_make_string,
    864                                float,SCHEME_REALP,
    865                                scheme_real_to_double,scheme_make_double);
    866     specialize_std_pair_on_both(std::string,SCHEME_STRINGP,
    867                                swig_scm_to_string,swig_make_string,
    868                                std::string,SCHEME_STRINGP,
    869                                swig_scm_to_string,swig_make_string);
    870 }
    871