(declare (unit precsi)) (declare (uses example)) (if (not (member "-quiet" (cdr (argv)))) (begin ;; display prelude to csi (display "class\n\n") (display " A SWIG example for the CHICKEN compiler\n") (display " Author: Jonah Beckford, December 2002\n\n") (display "C++ Interface\n") (display "-------------\n") (display " class Shape { public: Shape(); virtual ~Shape(); double x, y; void move(double dx, double dy); virtual double area(void) = 0; virtual double perimeter(void) = 0; static int nshapes; enum SomeEnum { First = 0, Second, Third, Last = 1000 }; }; class Circle : public Shape { private: double radius; public: Circle(double r); virtual double area(void); virtual double perimeter(void); }; class Square : public Shape { private: double width; public: Square(double w); virtual double area(void); virtual double perimeter(void); }; ") (display "\n") (display "CHICKEN Low-Level Procedures\n") (display "----------------------------\n") (display " (define A-CIRCLE-SHAPE (example-new-Circle %radius)) (example-Circle-area %circle) (example-Circle-perimeter %circle) (example-delete-Circle %circle) (define A-SQUARE-SHAPE (example-new-Square %width)) (example-Square-area %square) (example-Square-perimeter %square) (example-delete-Square %square) (example-delete-Shape %shape) (example-Shape-x-set %shape %x) (example-Shape-x-get %shape) (example-Shape-y-set %shape %y) (example-Shape-y-get %shape) (example-Shape-move %shape %dx %dy) (example-Shape-area %shape) (example-Shape-perimeter %shape) (example-Shape-nshapes) (example-Shape-nshapes %nshapes-int) (example-Shape-First) (example-Shape-Second) (example-Shape-Third) (example-Shape-Last) ") (display "\n") (display "TinyCLOS Classes\n") (display "----------------\n") (display " ;; ALL generic methods must be included first (include \"example_generic\") ;; After generic methods are defined, can include TinyCLOS code (include \"example_clos\") (define A-CIRCLE-SHAPE (make %radius)) (-get-x- %shapeObject) (-set-x!- %shapeObject %x) (-get-y- %shapeObject) (-set-y!- %shapeObject %y) (-move!- %shapeObject %dx %dy) (-area- %shapeObject) (-perimeter- %shapeObject) (+example-Shape-nshapes+) (+example-Shape-nshapes+ %nshapes-int) ;; do not use (example-delete-Shape (slot-ref %shapeObject 'this)) ;; as %shapeObject is always garbage-collected ") (display "\n")))