From 34c97ffdbd528f4c53873ccc8f60238579c2a22d Mon Sep 17 00:00:00 2001 From: Olly Betts Date: Sun, 23 Feb 2014 18:05:50 +1300 Subject: [PATCH] Improve the class example for several languages. Fix numerous inaccuracies in index.html (where it exists) and eliminate unnecessary differences between the example code being wrapped. --- Examples/java/class/example.cxx | 10 ++-- Examples/java/class/example.h | 25 ++++----- Examples/java/class/index.html | 49 +++-------------- Examples/perl5/class/example.cxx | 10 ++-- Examples/perl5/class/example.h | 29 +++++------ Examples/perl5/class/example.i | 1 - Examples/perl5/class/index.html | 87 +++++++------------------------ Examples/perl5/class/runme.pl | 2 +- Examples/php/class/example.cxx | 23 +++----- Examples/php/class/example.h | 16 +++--- Examples/php/class/runme.php | 4 +- Examples/python/class/example.cxx | 10 ++-- Examples/python/class/example.h | 25 ++++----- Examples/python/class/index.html | 87 +++++-------------------------- Examples/python/class/runme.py | 4 +- Examples/ruby/class/example.cxx | 10 ++-- Examples/ruby/class/example.h | 25 ++++----- Examples/ruby/class/index.html | 61 ++++------------------ Examples/ruby/class/runme.rb | 4 ++ Examples/tcl/class/example.cxx | 10 ++-- Examples/tcl/class/example.h | 25 ++++----- Examples/tcl/class/example.i | 1 - Examples/tcl/class/index.html | 48 +++-------------- 23 files changed, 154 insertions(+), 412 deletions(-) diff --git a/Examples/java/class/example.cxx b/Examples/java/class/example.cxx index 1e8e203dd..046304519 100644 --- a/Examples/java/class/example.cxx +++ b/Examples/java/class/example.cxx @@ -1,4 +1,4 @@ -/* File : example.c */ +/* File : example.cxx */ #include "example.h" #define M_PI 3.14159265358979323846 @@ -11,18 +11,18 @@ void Shape::move(double dx, double dy) { int Shape::nshapes = 0; -double Circle::area(void) { +double Circle::area() { return M_PI*radius*radius; } -double Circle::perimeter(void) { +double Circle::perimeter() { return 2*M_PI*radius; } -double Square::area(void) { +double Square::area() { return width*width; } -double Square::perimeter(void) { +double Square::perimeter() { return 4*width; } diff --git a/Examples/java/class/example.h b/Examples/java/class/example.h index 46d901361..0dff185b2 100644 --- a/Examples/java/class/example.h +++ b/Examples/java/class/example.h @@ -7,11 +7,11 @@ public: } virtual ~Shape() { nshapes--; - }; - double x, y; + } + double x, y; void move(double dx, double dy); - virtual double area(void) = 0; - virtual double perimeter(void) = 0; + virtual double area() = 0; + virtual double perimeter() = 0; static int nshapes; }; @@ -19,21 +19,16 @@ class Circle : public Shape { private: double radius; public: - Circle(double r) : radius(r) { }; - virtual double area(void); - virtual double perimeter(void); + Circle(double r) : radius(r) { } + virtual double area(); + virtual double perimeter(); }; class Square : public Shape { private: double width; public: - Square(double w) : width(w) { }; - virtual double area(void); - virtual double perimeter(void); + Square(double w) : width(w) { } + virtual double area(); + virtual double perimeter(); }; - - - - - diff --git a/Examples/java/class/index.html b/Examples/java/class/index.html index cf9130c62..b0a5e221d 100644 --- a/Examples/java/class/index.html +++ b/Examples/java/class/index.html @@ -32,8 +32,8 @@ public: } virtual ~Shape() { nshapes--; - }; - double x, y; + } + double x, y; void move(double dx, double dy); virtual double area() = 0; virtual double perimeter() = 0; @@ -44,7 +44,7 @@ class Circle : public Shape { private: double radius; public: - Circle(double r) : radius(r) { }; + Circle(double r) : radius(r) { } virtual double area(); virtual double perimeter(); }; @@ -53,7 +53,7 @@ class Square : public Shape { private: double width; public: - Square(double w) : width(w) { }; + Square(double w) : width(w) { } virtual double area(); virtual double perimeter(); }; @@ -146,50 +146,15 @@ Shape.setNshapes(13); // Set a static data member
diff --git a/Examples/perl5/class/example.cxx b/Examples/perl5/class/example.cxx index 1e8e203dd..046304519 100644 --- a/Examples/perl5/class/example.cxx +++ b/Examples/perl5/class/example.cxx @@ -1,4 +1,4 @@ -/* File : example.c */ +/* File : example.cxx */ #include "example.h" #define M_PI 3.14159265358979323846 @@ -11,18 +11,18 @@ void Shape::move(double dx, double dy) { int Shape::nshapes = 0; -double Circle::area(void) { +double Circle::area() { return M_PI*radius*radius; } -double Circle::perimeter(void) { +double Circle::perimeter() { return 2*M_PI*radius; } -double Square::area(void) { +double Square::area() { return width*width; } -double Square::perimeter(void) { +double Square::perimeter() { return 4*width; } diff --git a/Examples/perl5/class/example.h b/Examples/perl5/class/example.h index b0671d583..fd6943541 100644 --- a/Examples/perl5/class/example.h +++ b/Examples/perl5/class/example.h @@ -7,11 +7,11 @@ public: } virtual ~Shape() { nshapes--; - }; - double x, y; + } + double x, y; void move(double dx, double dy); - virtual double area(void) = 0; - virtual double perimeter(void) = 0; + virtual double area() = 0; + virtual double perimeter() = 0; static int nshapes; }; @@ -19,29 +19,24 @@ class Circle : public Shape { private: double radius; public: - Circle(double r) : radius(r) { }; - virtual double area(void); - virtual double perimeter(void); + Circle(double r) : radius(r) { } + virtual double area(); + virtual double perimeter(); }; class Square : public Shape { private: double width; public: - Square(double w) : width(w) { }; - virtual double area(void); - virtual double perimeter(void); + Square(double w) : width(w) { } + virtual double area(); + virtual double perimeter(); }; typedef Square TSquare; class CFoo { public: - static Square MakeSquare(void) {return Square(4.0);}; - static TSquare MakeTSquare(void) {return Square(4.0);}; + static Square MakeSquare(void) {return Square(4.0);} + static TSquare MakeTSquare(void) {return Square(4.0);} }; - - - - - diff --git a/Examples/perl5/class/example.i b/Examples/perl5/class/example.i index 23ee8a822..75700b305 100644 --- a/Examples/perl5/class/example.i +++ b/Examples/perl5/class/example.i @@ -6,6 +6,5 @@ %} /* Let's just grab the original header file here */ - %include "example.h" diff --git a/Examples/perl5/class/index.html b/Examples/perl5/class/index.html index 58a50ad2e..b4f923b5a 100644 --- a/Examples/perl5/class/index.html +++ b/Examples/perl5/class/index.html @@ -32,8 +32,8 @@ public: } virtual ~Shape() { nshapes--; - }; - double x, y; + } + double x, y; void move(double dx, double dy); virtual double area() = 0; virtual double perimeter() = 0; @@ -44,7 +44,7 @@ class Circle : public Shape { private: double radius; public: - Circle(double r) : radius(r) { }; + Circle(double r) : radius(r) { } virtual double area(); virtual double perimeter(); }; @@ -53,7 +53,7 @@ class Square : public Shape { private: double width; public: - Square(double w) : width(w) { }; + Square(double w) : width(w) { } virtual double area(); virtual double perimeter(); }; @@ -82,7 +82,7 @@ like this: Note: when creating a C++ extension, you must run SWIG with the -c++ option like this:
-% swig -c++ -python example.i
+% swig -c++ -perl example.i
 
@@ -97,60 +97,45 @@ Click here to see a script that calls the C++ functions f
-$c = example::new_Circle(10.0);
+$c = new example::Circle(10.0);
 

-

  • To access member data, a pair of accessor functions are used. -For example: +
  • You can access member data like so:
    -example::Shape_x_set($c,15);    # Set member data
    -$x = example::Shape_x_get($c);   # Get member data
    -
    -
    - -Note: when accessing member data, the name of the class in which -the data member is defined is used. For example Shape_x_get(). - -

    -

  • To invoke a member function, you simply do this - -
    -
    -print "The area is ", example::Shape_area($c);
    +$c->{x} = 15;    # Set member data
    +$x = $c->{x};    # Get member data
     

    -

  • Type checking knows about the inheritance structure of C++. For example: +
  • To invoke a member function, you simply do this:
    -example::Shape_area($c);       # Works (c is a Shape)
    -example::Circle_area($c);      # Works (c is a Circle)
    -example::Square_area($c);      # Fails (c is definitely not a Square)
    +print "The area is ", $c->area();
     

    -

  • To invoke a destructor, simply do this +
  • To invoke a destructor, simply do this:
    -example::delete_Shape($c);     # Deletes a shape
    +$c->DESTROY();   # Deletes a shape
     

    -

  • Static member variables are wrapped as C global variables. For example: +
  • Static member variables are wrapped like so:
    -$n = $example::Shape_nshapes;     # Get a static data member
    -$example::Shapes_nshapes = 13;   # Set a static data member
    +$n = $example::Shape::nshapes;    # Get a static data member
    +$example::Shapes::nshapes = 13;   # Set a static data member
     
    @@ -159,47 +144,11 @@ $example::Shapes_nshapes = 13; # Set a static data member

    General Comments