diff options
Diffstat (limited to 'Examples/lua/class')
-rw-r--r-- | Examples/lua/class/Makefile | 19 | ||||
-rw-r--r-- | Examples/lua/class/example.cxx | 28 | ||||
-rw-r--r-- | Examples/lua/class/example.h | 39 | ||||
-rw-r--r-- | Examples/lua/class/example.i | 10 | ||||
-rw-r--r-- | Examples/lua/class/runme.lua | 62 |
5 files changed, 158 insertions, 0 deletions
diff --git a/Examples/lua/class/Makefile b/Examples/lua/class/Makefile new file mode 100644 index 0000000..44888f6 --- /dev/null +++ b/Examples/lua/class/Makefile @@ -0,0 +1,19 @@ +TOP = ../.. +SWIG = $(TOP)/../preinst-swig +CXXSRCS = example.cxx +TARGET = example +INTERFACE = example.i +LIBS = -lm + +all:: + $(MAKE) -f $(TOP)/Makefile CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \ + TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' lua_cpp + +static:: + $(MAKE) -f $(TOP)/Makefile CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \ + TARGET='mylua' INTERFACE='$(INTERFACE)' lua_cpp_static + +clean:: + $(MAKE) -f $(TOP)/Makefile lua_clean + +check: all diff --git a/Examples/lua/class/example.cxx b/Examples/lua/class/example.cxx new file mode 100644 index 0000000..1e8e203 --- /dev/null +++ b/Examples/lua/class/example.cxx @@ -0,0 +1,28 @@ +/* File : example.c */ + +#include "example.h" +#define M_PI 3.14159265358979323846 + +/* Move the shape to a new location */ +void Shape::move(double dx, double dy) { + x += dx; + y += dy; +} + +int Shape::nshapes = 0; + +double Circle::area(void) { + return M_PI*radius*radius; +} + +double Circle::perimeter(void) { + return 2*M_PI*radius; +} + +double Square::area(void) { + return width*width; +} + +double Square::perimeter(void) { + return 4*width; +} diff --git a/Examples/lua/class/example.h b/Examples/lua/class/example.h new file mode 100644 index 0000000..46d9013 --- /dev/null +++ b/Examples/lua/class/example.h @@ -0,0 +1,39 @@ +/* File : example.h */ + +class Shape { +public: + Shape() { + nshapes++; + } + virtual ~Shape() { + nshapes--; + }; + double x, y; + void move(double dx, double dy); + virtual double area(void) = 0; + virtual double perimeter(void) = 0; + static int nshapes; +}; + +class Circle : public Shape { +private: + double radius; +public: + Circle(double r) : radius(r) { }; + virtual double area(void); + virtual double perimeter(void); +}; + +class Square : public Shape { +private: + double width; +public: + Square(double w) : width(w) { }; + virtual double area(void); + virtual double perimeter(void); +}; + + + + + diff --git a/Examples/lua/class/example.i b/Examples/lua/class/example.i new file mode 100644 index 0000000..75700b3 --- /dev/null +++ b/Examples/lua/class/example.i @@ -0,0 +1,10 @@ +/* File : example.i */ +%module example + +%{ +#include "example.h" +%} + +/* Let's just grab the original header file here */ +%include "example.h" + diff --git a/Examples/lua/class/runme.lua b/Examples/lua/class/runme.lua new file mode 100644 index 0000000..2c3ad8c --- /dev/null +++ b/Examples/lua/class/runme.lua @@ -0,0 +1,62 @@ +-- file: runme.lua + +-- This file illustrates class C++ interface generated +-- by SWIG. + +---- importing ---- +if string.sub(_VERSION,1,7)=='Lua 5.0' then + -- lua5.0 doesnt have a nice way to do this + lib=loadlib('example.dll','luaopen_example') or loadlib('example.so','luaopen_example') + assert(lib)() +else + -- lua 5.1 does + require('example') +end + +----- Object creation ----- + +print("Creating some objects:") +c = example.Circle(10) +print(" Created circle", c) +s = example.Square(10) +print(" Created square", s) + +----- Access a static member ----- + +print("\nA total of",example.Shape_nshapes,"shapes were created") + +----- Member data access ----- + +-- Set the location of the object + +c.x = 20 +c.y = 30 + +s.x = -10 +s.y = 5 + +print("\nHere is their current position:") +print(string.format(" Circle = (%f, %f)",c.x,c.y)) +print(string.format(" Square = (%f, %f)",s.x,s.y)) + +----- Call some methods ----- + +print("\nHere are some properties of the shapes:") +for _,o in pairs({c,s}) do + print(" ", o) + print(" area = ", o:area()) + print(" perimeter = ", o:perimeter()) +end + +print("\nGuess I'll clean up now") + +-- Note: this invokes the virtual destructor +c=nil +s=nil +s = 3 + +-- call gc to make sure they are collected +collectgarbage() + +print(example.Shape_nshapes,"shapes remain") +print "Goodbye" |