mirror of https://github.com/swig/swig
Add some tests for typedef to member function pointers
This commit is contained in:
parent
fc638814ae
commit
2a5068bcf2
|
@ -49,6 +49,8 @@ public class member_pointer_const_runme {
|
|||
check( "Square area ", 100.0, member_pointer_const.do_op(s,member_pointer_const.AREAPT) );
|
||||
check( "Square perim", 40.0, member_pointer_const.do_op(s,member_pointer_const.PERIMPT) );
|
||||
|
||||
// Typedefs
|
||||
check( "Square perim", 40.0, member_pointer_const.do_op_td(s,perim_pt) );
|
||||
}
|
||||
|
||||
private static void check(String what, double expected, double actual) {
|
||||
|
|
|
@ -49,6 +49,8 @@ public class member_pointer_runme {
|
|||
check( "Square area ", 100.0, member_pointer.do_op(s,member_pointer.AREAPT) );
|
||||
check( "Square perim", 40.0, member_pointer.do_op(s,member_pointer.PERIMPT) );
|
||||
|
||||
// Typedefs
|
||||
check( "Square perim", 40.0, member_pointer.do_op_td(s,perim_pt) );
|
||||
}
|
||||
|
||||
private static void check(String what, double expected, double actual) {
|
||||
|
|
|
@ -44,17 +44,22 @@ public:
|
|||
virtual double perimeter(void);
|
||||
};
|
||||
|
||||
/* Typedef */
|
||||
typedef double (Shape::*PerimeterFunc_td)(void);
|
||||
|
||||
extern double do_op(Shape *s, double (Shape::*m)(void));
|
||||
extern double do_op_td(Shape *s, PerimeterFunc_td m);
|
||||
|
||||
/* Functions that return member pointers */
|
||||
|
||||
extern double (Shape::*areapt())(void);
|
||||
extern double (Shape::*perimeterpt())(void);
|
||||
extern PerimeterFunc_td perimeterpt_td();
|
||||
|
||||
/* Global variables that are member pointers */
|
||||
extern double (Shape::*areavar)(void);
|
||||
extern double (Shape::*perimetervar)(void);
|
||||
|
||||
extern PerimeterFunc_td perimetervar_td;
|
||||
%}
|
||||
|
||||
%{
|
||||
|
@ -88,6 +93,10 @@ double do_op(Shape *s, double (Shape::*m)(void)) {
|
|||
return (s->*m)();
|
||||
}
|
||||
|
||||
double do_op_td(Shape *s, PerimeterFunc_td m) {
|
||||
return (s->*m)();
|
||||
}
|
||||
|
||||
double (Shape::*areapt())(void) {
|
||||
return &Shape::area;
|
||||
}
|
||||
|
@ -96,9 +105,14 @@ double (Shape::*perimeterpt())(void) {
|
|||
return &Shape::perimeter;
|
||||
}
|
||||
|
||||
PerimeterFunc_td perimeterpt_td() {
|
||||
return &Shape::perimeter;
|
||||
}
|
||||
|
||||
/* Member pointer variables */
|
||||
double (Shape::*areavar)(void) = &Shape::area;
|
||||
double (Shape::*perimetervar)(void) = &Shape::perimeter;
|
||||
PerimeterFunc_td perimetervar_td = &Shape::perimeter;
|
||||
%}
|
||||
|
||||
|
||||
|
|
|
@ -45,17 +45,22 @@ public:
|
|||
virtual double perimeter(void) const;
|
||||
};
|
||||
|
||||
/* Typedef */
|
||||
typedef double (Shape::*PerimeterFunc_td)(void) const;
|
||||
|
||||
extern double do_op(Shape *s, double (Shape::*m)(void) const);
|
||||
extern double do_op_td(Shape *s, PerimeterFunc_td m);
|
||||
|
||||
/* Functions that return member pointers */
|
||||
|
||||
extern double (Shape::*areapt())(void) const;
|
||||
extern double (Shape::*perimeterpt())(void) const;
|
||||
extern PerimeterFunc_td perimeterpt_td();
|
||||
|
||||
/* Global variables that are member pointers */
|
||||
extern double (Shape::*areavar)(void) const;
|
||||
extern double (Shape::*perimetervar)(void) const;
|
||||
|
||||
extern PerimeterFunc_td perimetervar_td;
|
||||
%}
|
||||
|
||||
%{
|
||||
|
@ -89,6 +94,10 @@ double do_op(Shape *s, double (Shape::*m)(void) const) {
|
|||
return (s->*m)();
|
||||
}
|
||||
|
||||
double do_op_td(Shape *s, PerimeterFunc_td m) {
|
||||
return (s->*m)();
|
||||
}
|
||||
|
||||
double (Shape::*areapt())(void) const {
|
||||
return &Shape::area;
|
||||
}
|
||||
|
@ -97,9 +106,14 @@ double (Shape::*perimeterpt())(void) const {
|
|||
return &Shape::perimeter;
|
||||
}
|
||||
|
||||
PerimeterFunc_td perimeterpt_td() {
|
||||
return &Shape::perimeter;
|
||||
}
|
||||
|
||||
/* Member pointer variables */
|
||||
double (Shape::*areavar)(void) const = &Shape::area;
|
||||
double (Shape::*perimetervar)(void) const = &Shape::perimeter;
|
||||
PerimeterFunc_td perimetervar_td = &Shape::perimeter;
|
||||
%}
|
||||
|
||||
|
||||
|
|
|
@ -43,6 +43,9 @@ memberPtr = NULLPT
|
|||
check("Square area ", 100.0, do_op(s, AREAPT))
|
||||
check("Square perim", 40.0, do_op(s, PERIMPT))
|
||||
|
||||
# Typedefs
|
||||
check("Square perim", 40.0, do_op_td(s, perim_pt));
|
||||
|
||||
check("Add by value", 3, call1(ADD_BY_VALUE, 1, 2))
|
||||
#check("Add by pointer", 7, call2(ADD_BY_POINTER, 3, 4))
|
||||
#check("Add by reference", 11, call3(ADD_BY_REFERENCE, 5, 6))
|
||||
|
|
|
@ -43,6 +43,9 @@ memberPtr = NULLPT
|
|||
check("Square area ", 100.0, do_op(s, AREAPT))
|
||||
check("Square perim", 40.0, do_op(s, PERIMPT))
|
||||
|
||||
# Typedefs
|
||||
check("Square perim", 40.0, do_op_td(s, perim_pt));
|
||||
|
||||
check("Add by value", 3, call1(ADD_BY_VALUE, 1, 2))
|
||||
check("Add by pointer", 7, call2(ADD_BY_POINTER, 3, 4))
|
||||
check("Add by reference", 11, call3(ADD_BY_REFERENCE, 5, 6))
|
||||
|
|
Loading…
Reference in New Issue