dub 0.2.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of dub might be problematic. Click here for more details.
- data/History.txt +92 -0
- data/LICENSE +20 -0
- data/README.rdoc +115 -0
- data/Rakefile +59 -0
- data/dub.gemspec +197 -0
- data/lib/dub/argument.rb +286 -0
- data/lib/dub/entities_unescape.rb +9 -0
- data/lib/dub/function.rb +177 -0
- data/lib/dub/function_group.rb +72 -0
- data/lib/dub/generator.rb +15 -0
- data/lib/dub/group.rb +20 -0
- data/lib/dub/klass.rb +338 -0
- data/lib/dub/lua/class.cpp.erb +114 -0
- data/lib/dub/lua/class_gen.rb +96 -0
- data/lib/dub/lua/function.cpp.erb +15 -0
- data/lib/dub/lua/function_gen.rb +329 -0
- data/lib/dub/lua/group.cpp.erb +9 -0
- data/lib/dub/lua/lua_cpp_helper.cpp +259 -0
- data/lib/dub/lua/lua_cpp_helper.h +219 -0
- data/lib/dub/lua/lua_object.cpp +158 -0
- data/lib/dub/lua/lua_object.h +69 -0
- data/lib/dub/lua/namespace.cpp.erb +42 -0
- data/lib/dub/lua/namespace_gen.rb +69 -0
- data/lib/dub/lua.rb +24 -0
- data/lib/dub/member_extraction.rb +128 -0
- data/lib/dub/namespace.rb +295 -0
- data/lib/dub/opts_parser.rb +30 -0
- data/lib/dub/parser.rb +46 -0
- data/lib/dub/templates/lua_template.erb +21 -0
- data/lib/dub/version.rb +3 -0
- data/lib/dub.rb +24 -20
- data/test/argument_test.rb +581 -0
- data/test/fixtures/app/CMakeLists.txt +54 -0
- data/test/fixtures/app/Doxyfile +1600 -0
- data/test/fixtures/app/bindings/all_lua.cpp +299 -0
- data/test/fixtures/app/include/matrix.h +283 -0
- data/test/fixtures/app/make_lua_bindings.rb +13 -0
- data/test/fixtures/app/vendor/lua/CMakeLists.txt +25 -0
- data/test/fixtures/app/vendor/lua/COPYRIGHT +34 -0
- data/test/fixtures/app/vendor/lua/HISTORY +183 -0
- data/test/fixtures/app/vendor/lua/INSTALL +99 -0
- data/test/fixtures/app/vendor/lua/Makefile +183 -0
- data/test/fixtures/app/vendor/lua/README +37 -0
- data/test/fixtures/app/vendor/lua/lapi.c +1080 -0
- data/test/fixtures/app/vendor/lua/lapi.h +16 -0
- data/test/fixtures/app/vendor/lua/lauxlib.c +653 -0
- data/test/fixtures/app/vendor/lua/lauxlib.h +174 -0
- data/test/fixtures/app/vendor/lua/lbaselib.c +643 -0
- data/test/fixtures/app/vendor/lua/lcode.c +839 -0
- data/test/fixtures/app/vendor/lua/lcode.h +76 -0
- data/test/fixtures/app/vendor/lua/ldblib.c +397 -0
- data/test/fixtures/app/vendor/lua/ldebug.c +622 -0
- data/test/fixtures/app/vendor/lua/ldebug.h +33 -0
- data/test/fixtures/app/vendor/lua/ldo.c +516 -0
- data/test/fixtures/app/vendor/lua/ldo.h +57 -0
- data/test/fixtures/app/vendor/lua/ldump.c +164 -0
- data/test/fixtures/app/vendor/lua/lfunc.c +174 -0
- data/test/fixtures/app/vendor/lua/lfunc.h +34 -0
- data/test/fixtures/app/vendor/lua/lgc.c +711 -0
- data/test/fixtures/app/vendor/lua/lgc.h +110 -0
- data/test/fixtures/app/vendor/lua/liblua.a +0 -0
- data/test/fixtures/app/vendor/lua/linit.c +38 -0
- data/test/fixtures/app/vendor/lua/liolib.c +532 -0
- data/test/fixtures/app/vendor/lua/llex.c +461 -0
- data/test/fixtures/app/vendor/lua/llex.h +81 -0
- data/test/fixtures/app/vendor/lua/llimits.h +128 -0
- data/test/fixtures/app/vendor/lua/lmathlib.c +263 -0
- data/test/fixtures/app/vendor/lua/lmem.c +86 -0
- data/test/fixtures/app/vendor/lua/lmem.h +49 -0
- data/test/fixtures/app/vendor/lua/loadlib.c +664 -0
- data/test/fixtures/app/vendor/lua/lobject.c +214 -0
- data/test/fixtures/app/vendor/lua/lobject.h +381 -0
- data/test/fixtures/app/vendor/lua/lopcodes.c +102 -0
- data/test/fixtures/app/vendor/lua/lopcodes.h +268 -0
- data/test/fixtures/app/vendor/lua/loslib.c +244 -0
- data/test/fixtures/app/vendor/lua/lparser.c +1337 -0
- data/test/fixtures/app/vendor/lua/lparser.h +82 -0
- data/test/fixtures/app/vendor/lua/lstate.c +214 -0
- data/test/fixtures/app/vendor/lua/lstate.h +168 -0
- data/test/fixtures/app/vendor/lua/lstring.c +111 -0
- data/test/fixtures/app/vendor/lua/lstring.h +31 -0
- data/test/fixtures/app/vendor/lua/lstrlib.c +868 -0
- data/test/fixtures/app/vendor/lua/ltable.c +588 -0
- data/test/fixtures/app/vendor/lua/ltable.h +40 -0
- data/test/fixtures/app/vendor/lua/ltablib.c +278 -0
- data/test/fixtures/app/vendor/lua/ltm.c +75 -0
- data/test/fixtures/app/vendor/lua/ltm.h +54 -0
- data/test/fixtures/app/vendor/lua/lua.c +695 -0
- data/test/fixtures/app/vendor/lua/lua.h +385 -0
- data/test/fixtures/app/vendor/lua/lua_dub_helper.h +77 -0
- data/test/fixtures/app/vendor/lua/luac +0 -0
- data/test/fixtures/app/vendor/lua/luac.c +200 -0
- data/test/fixtures/app/vendor/lua/luaconf.h +762 -0
- data/test/fixtures/app/vendor/lua/lualib.h +53 -0
- data/test/fixtures/app/vendor/lua/lundump.c +223 -0
- data/test/fixtures/app/vendor/lua/lundump.h +36 -0
- data/test/fixtures/app/vendor/lua/lvm.c +765 -0
- data/test/fixtures/app/vendor/lua/lvm.h +36 -0
- data/test/fixtures/app/vendor/lua/lzio.c +82 -0
- data/test/fixtures/app/vendor/lua/lzio.h +67 -0
- data/test/fixtures/app/vendor/lua/matrix.h +102 -0
- data/test/fixtures/app/vendor/lua/print.c +227 -0
- data/test/fixtures/app/vendor/lua/test/README +26 -0
- data/test/fixtures/app/vendor/lua/test/bisect.lua +27 -0
- data/test/fixtures/app/vendor/lua/test/cf.lua +16 -0
- data/test/fixtures/app/vendor/lua/test/echo.lua +5 -0
- data/test/fixtures/app/vendor/lua/test/env.lua +7 -0
- data/test/fixtures/app/vendor/lua/test/factorial.lua +32 -0
- data/test/fixtures/app/vendor/lua/test/fib.lua +40 -0
- data/test/fixtures/app/vendor/lua/test/fibfor.lua +13 -0
- data/test/fixtures/app/vendor/lua/test/globals.lua +13 -0
- data/test/fixtures/app/vendor/lua/test/hello.lua +3 -0
- data/test/fixtures/app/vendor/lua/test/life.lua +111 -0
- data/test/fixtures/app/vendor/lua/test/luac.lua +7 -0
- data/test/fixtures/app/vendor/lua/test/printf.lua +7 -0
- data/test/fixtures/app/vendor/lua/test/readonly.lua +12 -0
- data/test/fixtures/app/vendor/lua/test/sieve.lua +29 -0
- data/test/fixtures/app/vendor/lua/test/sort.lua +66 -0
- data/test/fixtures/app/vendor/lua/test/table.lua +12 -0
- data/test/fixtures/app/vendor/lua/test/trace-calls.lua +32 -0
- data/test/fixtures/app/vendor/lua/test/trace-globals.lua +38 -0
- data/test/fixtures/app/vendor/lua/test/xd.lua +14 -0
- data/test/fixtures/app/xml/classdub_1_1_base.xml +85 -0
- data/test/fixtures/app/xml/classdub_1_1_custom_destructor.xml +67 -0
- data/test/fixtures/app/xml/classdub_1_1_deletable_out_of_lua.xml +43 -0
- data/test/fixtures/app/xml/classdub_1_1_matrix.xml +482 -0
- data/test/fixtures/app/xml/classdub_1_1_no_destructor.xml +49 -0
- data/test/fixtures/app/xml/classdub_1_1_priv_sub_base.xml +89 -0
- data/test/fixtures/app/xml/classdub_1_1_private_constr.xml +68 -0
- data/test/fixtures/app/xml/classdub_1_1_static_constr.xml +69 -0
- data/test/fixtures/app/xml/classdub_1_1_sub_base.xml +89 -0
- data/test/fixtures/app/xml/classdub_1_1_t_mat.xml +252 -0
- data/test/fixtures/app/xml/combine.xslt +15 -0
- data/test/fixtures/app/xml/compound.xsd +814 -0
- data/test/fixtures/app/xml/dir_53661a2bdeb1d55e60581a7e15deb763.xml +12 -0
- data/test/fixtures/app/xml/index.xml +91 -0
- data/test/fixtures/app/xml/index.xsd +66 -0
- data/test/fixtures/app/xml/matrix_8h.xml +310 -0
- data/test/fixtures/app/xml/namespacedub.xml +48 -0
- data/test/fixtures/classcv_1_1_mat.xml +1996 -0
- data/test/fixtures/classcv_1_1_point__.xml +341 -0
- data/test/fixtures/classcv_1_1_scalar__.xml +269 -0
- data/test/fixtures/classcv_1_1_size__.xml +270 -0
- data/test/fixtures/dummy_class.cpp.erb +1 -0
- data/test/fixtures/dummy_function.cpp.erb +1 -0
- data/test/fixtures/group___magic_type.xml +406 -0
- data/test/fixtures/namespacecv.xml +12659 -0
- data/test/function_group_test.rb +43 -0
- data/test/function_test.rb +405 -0
- data/test/group_test.rb +241 -0
- data/test/helper.rb +34 -0
- data/test/klass_test.rb +551 -0
- data/test/lua_function_gen_test.rb +242 -0
- data/test/namespace_test.rb +220 -0
- data/test/parser_test.rb +36 -0
- metadata +229 -272
- checksums.yaml +0 -7
- data/lib/open_api_sdk/analytics.rb +0 -99
- data/lib/open_api_sdk/domains.rb +0 -353
- data/lib/open_api_sdk/dub.rb +0 -88
- data/lib/open_api_sdk/links.rb +0 -766
- data/lib/open_api_sdk/metatags.rb +0 -54
- data/lib/open_api_sdk/models/operations/bulkcreatelinks_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/bulkupdatelinks_requestbody.rb +0 -27
- data/lib/open_api_sdk/models/operations/bulkupdatelinks_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/color.rb +0 -24
- data/lib/open_api_sdk/models/operations/createdomain_requestbody.rb +0 -33
- data/lib/open_api_sdk/models/operations/createdomain_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/createlink_requestbody.rb +0 -95
- data/lib/open_api_sdk/models/operations/createlink_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/createtag_requestbody.rb +0 -32
- data/lib/open_api_sdk/models/operations/createtag_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/data.rb +0 -83
- data/lib/open_api_sdk/models/operations/deletedomain_request.rb +0 -24
- data/lib/open_api_sdk/models/operations/deletedomain_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/deletedomain_responsebody.rb +0 -24
- data/lib/open_api_sdk/models/operations/deletelink_request.rb +0 -24
- data/lib/open_api_sdk/models/operations/deletelink_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/deletelink_responsebody.rb +0 -24
- data/lib/open_api_sdk/models/operations/event.rb +0 -21
- data/lib/open_api_sdk/models/operations/getlinkinfo_request.rb +0 -33
- data/lib/open_api_sdk/models/operations/getlinkinfo_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/getlinks_request.rb +0 -51
- data/lib/open_api_sdk/models/operations/getlinks_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/getlinkscount_request.rb +0 -48
- data/lib/open_api_sdk/models/operations/getlinkscount_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/getmetatags_request.rb +0 -24
- data/lib/open_api_sdk/models/operations/getmetatags_response.rb +0 -33
- data/lib/open_api_sdk/models/operations/getmetatags_responsebody.rb +0 -30
- data/lib/open_api_sdk/models/operations/getqrcode_request.rb +0 -39
- data/lib/open_api_sdk/models/operations/getqrcode_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/gettags_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/getworkspace_request.rb +0 -24
- data/lib/open_api_sdk/models/operations/getworkspace_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/groupby.rb +0 -28
- data/lib/open_api_sdk/models/operations/interval.rb +0 -25
- data/lib/open_api_sdk/models/operations/level.rb +0 -21
- data/lib/open_api_sdk/models/operations/listdomains_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/paymentprocessor.rb +0 -20
- data/lib/open_api_sdk/models/operations/requestbody.rb +0 -95
- data/lib/open_api_sdk/models/operations/retrieveanalytics_request.rb +0 -81
- data/lib/open_api_sdk/models/operations/retrieveanalytics_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/sort.rb +0 -20
- data/lib/open_api_sdk/models/operations/trackcustomer_requestbody.rb +0 -33
- data/lib/open_api_sdk/models/operations/trackcustomer_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/trackcustomer_responsebody.rb +0 -33
- data/lib/open_api_sdk/models/operations/tracklead_requestbody.rb +0 -42
- data/lib/open_api_sdk/models/operations/tracklead_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/tracklead_responsebody.rb +0 -42
- data/lib/open_api_sdk/models/operations/tracksale_requestbody.rb +0 -42
- data/lib/open_api_sdk/models/operations/tracksale_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/tracksale_responsebody.rb +0 -42
- data/lib/open_api_sdk/models/operations/updatedomain_request.rb +0 -27
- data/lib/open_api_sdk/models/operations/updatedomain_requestbody.rb +0 -33
- data/lib/open_api_sdk/models/operations/updatedomain_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/updatelink_request.rb +0 -27
- data/lib/open_api_sdk/models/operations/updatelink_requestbody.rb +0 -95
- data/lib/open_api_sdk/models/operations/updatelink_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/updatetag_color.rb +0 -24
- data/lib/open_api_sdk/models/operations/updatetag_request.rb +0 -27
- data/lib/open_api_sdk/models/operations/updatetag_requestbody.rb +0 -32
- data/lib/open_api_sdk/models/operations/updatetag_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/updateworkspace_request.rb +0 -27
- data/lib/open_api_sdk/models/operations/updateworkspace_requestbody.rb +0 -27
- data/lib/open_api_sdk/models/operations/updateworkspace_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/upsertlink_requestbody.rb +0 -95
- data/lib/open_api_sdk/models/operations/upsertlink_response.rb +0 -60
- data/lib/open_api_sdk/models/operations.rb +0 -74
- data/lib/open_api_sdk/models/shared/badrequest.rb +0 -24
- data/lib/open_api_sdk/models/shared/code.rb +0 -18
- data/lib/open_api_sdk/models/shared/color.rb +0 -24
- data/lib/open_api_sdk/models/shared/conflict.rb +0 -24
- data/lib/open_api_sdk/models/shared/conflict_code.rb +0 -18
- data/lib/open_api_sdk/models/shared/conflict_error.rb +0 -30
- data/lib/open_api_sdk/models/shared/countrycode.rb +0 -267
- data/lib/open_api_sdk/models/shared/domains.rb +0 -27
- data/lib/open_api_sdk/models/shared/domainschema.rb +0 -48
- data/lib/open_api_sdk/models/shared/error.rb +0 -30
- data/lib/open_api_sdk/models/shared/forbidden.rb +0 -24
- data/lib/open_api_sdk/models/shared/forbidden_code.rb +0 -18
- data/lib/open_api_sdk/models/shared/forbidden_error.rb +0 -30
- data/lib/open_api_sdk/models/shared/geo.rb +0 -771
- data/lib/open_api_sdk/models/shared/internalservererror.rb +0 -24
- data/lib/open_api_sdk/models/shared/internalservererror_code.rb +0 -18
- data/lib/open_api_sdk/models/shared/internalservererror_error.rb +0 -30
- data/lib/open_api_sdk/models/shared/inviteexpired.rb +0 -24
- data/lib/open_api_sdk/models/shared/inviteexpired_code.rb +0 -18
- data/lib/open_api_sdk/models/shared/inviteexpired_error.rb +0 -30
- data/lib/open_api_sdk/models/shared/linkgeotargeting.rb +0 -771
- data/lib/open_api_sdk/models/shared/linkschema.rb +0 -142
- data/lib/open_api_sdk/models/shared/notfound.rb +0 -24
- data/lib/open_api_sdk/models/shared/notfound_code.rb +0 -18
- data/lib/open_api_sdk/models/shared/notfound_error.rb +0 -30
- data/lib/open_api_sdk/models/shared/plan.rb +0 -24
- data/lib/open_api_sdk/models/shared/ratelimitexceeded.rb +0 -24
- data/lib/open_api_sdk/models/shared/ratelimitexceeded_code.rb +0 -18
- data/lib/open_api_sdk/models/shared/ratelimitexceeded_error.rb +0 -30
- data/lib/open_api_sdk/models/shared/role.rb +0 -19
- data/lib/open_api_sdk/models/shared/security.rb +0 -24
- data/lib/open_api_sdk/models/shared/tagschema.rb +0 -30
- data/lib/open_api_sdk/models/shared/unauthorized.rb +0 -24
- data/lib/open_api_sdk/models/shared/unauthorized_code.rb +0 -18
- data/lib/open_api_sdk/models/shared/unauthorized_error.rb +0 -30
- data/lib/open_api_sdk/models/shared/unprocessableentity.rb +0 -24
- data/lib/open_api_sdk/models/shared/unprocessableentity_code.rb +0 -18
- data/lib/open_api_sdk/models/shared/unprocessableentity_error.rb +0 -30
- data/lib/open_api_sdk/models/shared/users.rb +0 -24
- data/lib/open_api_sdk/models/shared/workspaceschema.rb +0 -81
- data/lib/open_api_sdk/models/shared.rb +0 -49
- data/lib/open_api_sdk/qr_codes.rb +0 -97
- data/lib/open_api_sdk/sdkconfiguration.rb +0 -52
- data/lib/open_api_sdk/tags.rb +0 -272
- data/lib/open_api_sdk/track.rb +0 -276
- data/lib/open_api_sdk/utils/metadata_fields.rb +0 -150
- data/lib/open_api_sdk/utils/t.rb +0 -59
- data/lib/open_api_sdk/utils/utils.rb +0 -772
- data/lib/open_api_sdk/workspaces.rb +0 -192
@@ -0,0 +1,299 @@
|
|
1
|
+
#include "matrix.h"
|
2
|
+
|
3
|
+
#include "lua_cpp_helper.h"
|
4
|
+
|
5
|
+
|
6
|
+
using namespace dub;
|
7
|
+
|
8
|
+
|
9
|
+
/* ============================ Constructors ====================== */
|
10
|
+
|
11
|
+
|
12
|
+
/** dub::Matrix::Matrix()
|
13
|
+
* app/include/matrix.h:14
|
14
|
+
*/
|
15
|
+
static int Matrix_Matrix1(lua_State *L) {
|
16
|
+
Matrix * retval__ = new Matrix();
|
17
|
+
lua_pushclass<Matrix>(L, retval__, "dub.Matrix");
|
18
|
+
return 1;
|
19
|
+
}
|
20
|
+
|
21
|
+
|
22
|
+
/** dub::Matrix::Matrix(int rows, int cols)
|
23
|
+
* app/include/matrix.h:16
|
24
|
+
*/
|
25
|
+
static int Matrix_Matrix2(lua_State *L) {
|
26
|
+
int rows = luaL_checkint (L, 1);
|
27
|
+
int cols = luaL_checkint (L, 2);
|
28
|
+
Matrix * retval__ = new Matrix(rows, cols);
|
29
|
+
lua_pushclass<Matrix>(L, retval__, "dub.Matrix");
|
30
|
+
return 1;
|
31
|
+
}
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
/** Overloaded function chooser for Matrix(...) */
|
36
|
+
static int Matrix_Matrix(lua_State *L) {
|
37
|
+
int type__ = lua_type(L, 1);
|
38
|
+
if (type__ == LUA_TNUMBER) {
|
39
|
+
return Matrix_Matrix2(L);
|
40
|
+
} else if (type__ == LUA_TNONE) {
|
41
|
+
return Matrix_Matrix1(L);
|
42
|
+
} else {
|
43
|
+
// use any to raise errors
|
44
|
+
return Matrix_Matrix1(L);
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
48
|
+
/* ============================ Destructor ====================== */
|
49
|
+
|
50
|
+
static int Matrix_destructor(lua_State *L) {
|
51
|
+
Matrix **userdata = (Matrix**)luaL_checkudata(L, 1, "dub.Matrix");
|
52
|
+
if (*userdata) delete *userdata;
|
53
|
+
*userdata = NULL;
|
54
|
+
return 0;
|
55
|
+
}
|
56
|
+
|
57
|
+
/* ============================ tostring ====================== */
|
58
|
+
|
59
|
+
static int Matrix__tostring(lua_State *L) {
|
60
|
+
Matrix **userdata = (Matrix**)luaL_checkudata(L, 1, "dub.Matrix");
|
61
|
+
lua_pushfstring(L, "dub.Matrix: %p", *userdata);
|
62
|
+
return 1;
|
63
|
+
}
|
64
|
+
|
65
|
+
/* ============================ Member Methods ====================== */
|
66
|
+
|
67
|
+
|
68
|
+
/** double dub::Matrix::cols()
|
69
|
+
* app/include/matrix.h:29
|
70
|
+
*/
|
71
|
+
static int Matrix_cols(lua_State *L) {
|
72
|
+
Matrix *self__ = *((Matrix**)luaL_checkudata(L, 1, "dub.Matrix"));
|
73
|
+
lua_remove(L, 1);
|
74
|
+
double retval__ = self__->cols();
|
75
|
+
lua_pushnumber(L, retval__);
|
76
|
+
return 1;
|
77
|
+
}
|
78
|
+
|
79
|
+
|
80
|
+
/** double dub::Matrix::rows()
|
81
|
+
* app/include/matrix.h:33
|
82
|
+
*/
|
83
|
+
static int Matrix_rows(lua_State *L) {
|
84
|
+
Matrix *self__ = *((Matrix**)luaL_checkudata(L, 1, "dub.Matrix"));
|
85
|
+
lua_remove(L, 1);
|
86
|
+
double retval__ = self__->rows();
|
87
|
+
lua_pushnumber(L, retval__);
|
88
|
+
return 1;
|
89
|
+
}
|
90
|
+
|
91
|
+
|
92
|
+
/** size_t dub::Matrix::size()
|
93
|
+
* app/include/matrix.h:25
|
94
|
+
*/
|
95
|
+
static int Matrix_size(lua_State *L) {
|
96
|
+
Matrix *self__ = *((Matrix**)luaL_checkudata(L, 1, "dub.Matrix"));
|
97
|
+
lua_remove(L, 1);
|
98
|
+
size_t retval__ = self__->size();
|
99
|
+
lua_pushnumber(L, retval__);
|
100
|
+
return 1;
|
101
|
+
}
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
|
106
|
+
/* ============================ Lua Registration ====================== */
|
107
|
+
|
108
|
+
static const struct luaL_Reg Matrix_member_methods[] = {
|
109
|
+
{"cols" , Matrix_cols},
|
110
|
+
{"rows" , Matrix_rows},
|
111
|
+
{"size" , Matrix_size},
|
112
|
+
{"__tostring" , Matrix__tostring},
|
113
|
+
{"__gc" , Matrix_destructor},
|
114
|
+
{NULL, NULL},
|
115
|
+
};
|
116
|
+
|
117
|
+
static const struct luaL_Reg Matrix_namespace_methods[] = {
|
118
|
+
{"Matrix" , Matrix_Matrix},
|
119
|
+
{NULL, NULL},
|
120
|
+
};
|
121
|
+
|
122
|
+
static void luaopen_dub_Matrix(lua_State *L) {
|
123
|
+
// Create the metatable which will contain all the member methods
|
124
|
+
luaL_newmetatable(L, "dub.Matrix"); // "dub.Matrix"
|
125
|
+
|
126
|
+
// metatable.__index = metatable (find methods in the table itself)
|
127
|
+
lua_pushvalue(L, -1);
|
128
|
+
lua_setfield(L, -2, "__index");
|
129
|
+
|
130
|
+
// register member methods
|
131
|
+
luaL_register(L, NULL, Matrix_member_methods); // dub_Matrix_member_methods
|
132
|
+
|
133
|
+
// register class methods in a global table like "dub.Matrix"
|
134
|
+
luaL_register(L, "dub", Matrix_namespace_methods); // dub_Matrix_class_methods
|
135
|
+
}
|
136
|
+
#include "matrix.h"
|
137
|
+
|
138
|
+
#include "lua_cpp_helper.h"
|
139
|
+
|
140
|
+
|
141
|
+
using namespace dub;
|
142
|
+
|
143
|
+
|
144
|
+
/* ============================ Constructors ====================== */
|
145
|
+
|
146
|
+
|
147
|
+
/** dub::FloatMat::FloatMat()
|
148
|
+
* app/include/matrix.h:62
|
149
|
+
*/
|
150
|
+
static int FloatMat_FloatMat1(lua_State *L) {
|
151
|
+
FloatMat * retval__ = new FloatMat();
|
152
|
+
lua_pushclass<FloatMat>(L, retval__, "dub.FloatMat");
|
153
|
+
return 1;
|
154
|
+
}
|
155
|
+
|
156
|
+
|
157
|
+
/** dub::FloatMat::FloatMat(int rows, int cols)
|
158
|
+
* app/include/matrix.h:64
|
159
|
+
*/
|
160
|
+
static int FloatMat_FloatMat2(lua_State *L) {
|
161
|
+
int rows = luaL_checkint (L, 1);
|
162
|
+
int cols = luaL_checkint (L, 2);
|
163
|
+
FloatMat * retval__ = new FloatMat(rows, cols);
|
164
|
+
lua_pushclass<FloatMat>(L, retval__, "dub.FloatMat");
|
165
|
+
return 1;
|
166
|
+
}
|
167
|
+
|
168
|
+
|
169
|
+
|
170
|
+
/** Overloaded function chooser for FloatMat(...) */
|
171
|
+
static int FloatMat_FloatMat(lua_State *L) {
|
172
|
+
int type__ = lua_type(L, 1);
|
173
|
+
if (type__ == LUA_TNUMBER) {
|
174
|
+
return FloatMat_FloatMat2(L);
|
175
|
+
} else if (type__ == LUA_TNONE) {
|
176
|
+
return FloatMat_FloatMat1(L);
|
177
|
+
} else {
|
178
|
+
// use any to raise errors
|
179
|
+
return FloatMat_FloatMat1(L);
|
180
|
+
}
|
181
|
+
}
|
182
|
+
|
183
|
+
/* ============================ Destructor ====================== */
|
184
|
+
|
185
|
+
static int FloatMat_destructor(lua_State *L) {
|
186
|
+
FloatMat **userdata = (FloatMat**)luaL_checkudata(L, 1, "dub.FloatMat");
|
187
|
+
if (*userdata) delete *userdata;
|
188
|
+
*userdata = NULL;
|
189
|
+
return 0;
|
190
|
+
}
|
191
|
+
|
192
|
+
/* ============================ tostring ====================== */
|
193
|
+
|
194
|
+
static int FloatMat__tostring(lua_State *L) {
|
195
|
+
FloatMat **userdata = (FloatMat**)luaL_checkudata(L, 1, "dub.FloatMat");
|
196
|
+
lua_pushfstring(L, "dub.FloatMat: %p", *userdata);
|
197
|
+
return 1;
|
198
|
+
}
|
199
|
+
|
200
|
+
/* ============================ Member Methods ====================== */
|
201
|
+
|
202
|
+
|
203
|
+
/** size_t dub::FloatMat::cols()
|
204
|
+
* app/include/matrix.h:77
|
205
|
+
*/
|
206
|
+
static int FloatMat_cols(lua_State *L) {
|
207
|
+
FloatMat *self__ = *((FloatMat**)luaL_checkudata(L, 1, "dub.FloatMat"));
|
208
|
+
lua_remove(L, 1);
|
209
|
+
size_t retval__ = self__->cols();
|
210
|
+
lua_pushnumber(L, retval__);
|
211
|
+
return 1;
|
212
|
+
}
|
213
|
+
|
214
|
+
|
215
|
+
/** void dub::FloatMat::fill(T value)
|
216
|
+
* app/include/matrix.h:85
|
217
|
+
*/
|
218
|
+
static int FloatMat_fill(lua_State *L) {
|
219
|
+
FloatMat *self__ = *((FloatMat**)luaL_checkudata(L, 1, "dub.FloatMat"));
|
220
|
+
lua_remove(L, 1);
|
221
|
+
float value = luaL_checknumber(L, 1);
|
222
|
+
self__->fill(value);
|
223
|
+
return 0;
|
224
|
+
}
|
225
|
+
|
226
|
+
|
227
|
+
/** T dub::FloatMat::get(size_t row, size_t col)
|
228
|
+
* app/include/matrix.h:89
|
229
|
+
*/
|
230
|
+
static int FloatMat_get(lua_State *L) {
|
231
|
+
FloatMat *self__ = *((FloatMat**)luaL_checkudata(L, 1, "dub.FloatMat"));
|
232
|
+
lua_remove(L, 1);
|
233
|
+
size_t row = luaL_checknumber(L, 1);
|
234
|
+
size_t col = luaL_checknumber(L, 2);
|
235
|
+
float retval__ = self__->get(row, col);
|
236
|
+
lua_pushnumber(L, retval__);
|
237
|
+
return 1;
|
238
|
+
}
|
239
|
+
|
240
|
+
|
241
|
+
/** size_t dub::FloatMat::rows()
|
242
|
+
* app/include/matrix.h:81
|
243
|
+
*/
|
244
|
+
static int FloatMat_rows(lua_State *L) {
|
245
|
+
FloatMat *self__ = *((FloatMat**)luaL_checkudata(L, 1, "dub.FloatMat"));
|
246
|
+
lua_remove(L, 1);
|
247
|
+
size_t retval__ = self__->rows();
|
248
|
+
lua_pushnumber(L, retval__);
|
249
|
+
return 1;
|
250
|
+
}
|
251
|
+
|
252
|
+
|
253
|
+
/** size_t dub::FloatMat::size()
|
254
|
+
* app/include/matrix.h:73
|
255
|
+
*/
|
256
|
+
static int FloatMat_size(lua_State *L) {
|
257
|
+
FloatMat *self__ = *((FloatMat**)luaL_checkudata(L, 1, "dub.FloatMat"));
|
258
|
+
lua_remove(L, 1);
|
259
|
+
size_t retval__ = self__->size();
|
260
|
+
lua_pushnumber(L, retval__);
|
261
|
+
return 1;
|
262
|
+
}
|
263
|
+
|
264
|
+
|
265
|
+
|
266
|
+
|
267
|
+
/* ============================ Lua Registration ====================== */
|
268
|
+
|
269
|
+
static const struct luaL_Reg FloatMat_member_methods[] = {
|
270
|
+
{"cols" , FloatMat_cols},
|
271
|
+
{"fill" , FloatMat_fill},
|
272
|
+
{"get" , FloatMat_get},
|
273
|
+
{"rows" , FloatMat_rows},
|
274
|
+
{"size" , FloatMat_size},
|
275
|
+
{"__tostring" , FloatMat__tostring},
|
276
|
+
{"__gc" , FloatMat_destructor},
|
277
|
+
{NULL, NULL},
|
278
|
+
};
|
279
|
+
|
280
|
+
static const struct luaL_Reg FloatMat_namespace_methods[] = {
|
281
|
+
{"FloatMat" , FloatMat_FloatMat},
|
282
|
+
{"FMatrix" , FloatMat_FloatMat},
|
283
|
+
{NULL, NULL},
|
284
|
+
};
|
285
|
+
|
286
|
+
static void luaopen_dub_FloatMat(lua_State *L) {
|
287
|
+
// Create the metatable which will contain all the member methods
|
288
|
+
luaL_newmetatable(L, "dub.FloatMat"); // "dub.Matrix"
|
289
|
+
|
290
|
+
// metatable.__index = metatable (find methods in the table itself)
|
291
|
+
lua_pushvalue(L, -1);
|
292
|
+
lua_setfield(L, -2, "__index");
|
293
|
+
|
294
|
+
// register member methods
|
295
|
+
luaL_register(L, NULL, FloatMat_member_methods); // dub_Matrix_member_methods
|
296
|
+
|
297
|
+
// register class methods in a global table like "dub.Matrix"
|
298
|
+
luaL_register(L, "dub", FloatMat_namespace_methods); // dub_Matrix_class_methods
|
299
|
+
}
|
@@ -0,0 +1,283 @@
|
|
1
|
+
#ifndef DOXY_GENERATOR_TEST_FIXTURES_APP_MATRIX_H_
|
2
|
+
#define DOXY_GENERATOR_TEST_FIXTURES_APP_MATRIX_H_
|
3
|
+
|
4
|
+
#include <cstring>
|
5
|
+
#include <stdlib.h> // malloc
|
6
|
+
|
7
|
+
|
8
|
+
/** @file */
|
9
|
+
typedef int LuaStackSize;
|
10
|
+
|
11
|
+
namespace dub {
|
12
|
+
|
13
|
+
/** Matrix class.
|
14
|
+
*
|
15
|
+
* @dub var_from_dub:'dummy value'
|
16
|
+
* other_from_dub: "some other value"
|
17
|
+
* ignore: 'bad_method'
|
18
|
+
*/
|
19
|
+
class Matrix {
|
20
|
+
|
21
|
+
Q_PROPERTY(size_t foo_prop READ size)
|
22
|
+
Q_PROPERTY(size_t size READ size WRITE setSize)
|
23
|
+
public:
|
24
|
+
Matrix() : data_(NULL), rows_(0), cols_(0) {}
|
25
|
+
|
26
|
+
Matrix(int rows, int cols) : rows_(rows), cols_(cols) {
|
27
|
+
data_ = (double*)malloc(size() * sizeof(double));
|
28
|
+
}
|
29
|
+
|
30
|
+
~Matrix() {
|
31
|
+
if (data_) free(data_);
|
32
|
+
}
|
33
|
+
|
34
|
+
/** Return size of matrix (rows * cols). */
|
35
|
+
size_t size() {
|
36
|
+
return rows_ * cols_;
|
37
|
+
}
|
38
|
+
|
39
|
+
double cols() {
|
40
|
+
return cols_;
|
41
|
+
}
|
42
|
+
|
43
|
+
double rows() {
|
44
|
+
return rows_;
|
45
|
+
}
|
46
|
+
|
47
|
+
/** Dummy template based class method.
|
48
|
+
*/
|
49
|
+
template<class T>
|
50
|
+
T *give_me_tea() {
|
51
|
+
return new T();
|
52
|
+
}
|
53
|
+
|
54
|
+
operator size_t() {
|
55
|
+
return size();
|
56
|
+
}
|
57
|
+
|
58
|
+
void mul(TMat<int> other) {
|
59
|
+
// dummy
|
60
|
+
}
|
61
|
+
|
62
|
+
void do_something(int i, bool fast=false) {
|
63
|
+
|
64
|
+
}
|
65
|
+
|
66
|
+
void do_something(int i, const char *baz) {
|
67
|
+
// overloaded member method
|
68
|
+
}
|
69
|
+
|
70
|
+
void bad_method(int i) {
|
71
|
+
// method should not exist in bindings
|
72
|
+
}
|
73
|
+
|
74
|
+
void use_other_lib(const std::string &name) {
|
75
|
+
// dummy
|
76
|
+
}
|
77
|
+
|
78
|
+
int *ptr() {
|
79
|
+
// dummy
|
80
|
+
}
|
81
|
+
|
82
|
+
bool true() {
|
83
|
+
// dummy
|
84
|
+
return true;
|
85
|
+
}
|
86
|
+
|
87
|
+
const char *name() {
|
88
|
+
// should make method return string
|
89
|
+
}
|
90
|
+
|
91
|
+
int *lua_thing(int a, lua_State *L, int b) {
|
92
|
+
// dummy
|
93
|
+
}
|
94
|
+
|
95
|
+
LuaStackSize work_with_lua(int a, int b) {
|
96
|
+
// method that directly pushes lua values on the stack
|
97
|
+
return 2;
|
98
|
+
}
|
99
|
+
|
100
|
+
/** Named constructor.
|
101
|
+
*/
|
102
|
+
static Matrix *MakeMatrix(int rows, int cols) {
|
103
|
+
return new Matrix(rows, cols);
|
104
|
+
}
|
105
|
+
|
106
|
+
private:
|
107
|
+
Matrix(int x) {
|
108
|
+
// private constructor
|
109
|
+
}
|
110
|
+
|
111
|
+
int private_method() {
|
112
|
+
// should not be implemented
|
113
|
+
return 0;
|
114
|
+
}
|
115
|
+
|
116
|
+
protected:
|
117
|
+
|
118
|
+
int protected_method() {
|
119
|
+
// should not be implemented
|
120
|
+
return 0;
|
121
|
+
}
|
122
|
+
|
123
|
+
double *data_;
|
124
|
+
size_t rows_;
|
125
|
+
size_t cols_;
|
126
|
+
};
|
127
|
+
|
128
|
+
|
129
|
+
/** Test that private constructors are not used.
|
130
|
+
*/
|
131
|
+
class PrivateConstr {
|
132
|
+
public:
|
133
|
+
|
134
|
+
PrivateConstr(int x) {}
|
135
|
+
|
136
|
+
~PrivateConstr() {}
|
137
|
+
|
138
|
+
private:
|
139
|
+
// should not be used to build a FunctionGroup
|
140
|
+
PrivateConstr(const char *name) {}
|
141
|
+
};
|
142
|
+
|
143
|
+
/** Test that custom destructors are used.
|
144
|
+
* @dub destructor: 'dub_destroy'
|
145
|
+
*/
|
146
|
+
class CustomDestructor : public DeletableOutOfLua
|
147
|
+
{
|
148
|
+
public:
|
149
|
+
|
150
|
+
CustomDestructor(int x) {}
|
151
|
+
|
152
|
+
~CustomDestructor() {}
|
153
|
+
|
154
|
+
void do_this(int x) {
|
155
|
+
|
156
|
+
}
|
157
|
+
};
|
158
|
+
|
159
|
+
/** Test that no destructor option is used.
|
160
|
+
*
|
161
|
+
* @dub destructor: ''
|
162
|
+
*/
|
163
|
+
class NoDestructor {
|
164
|
+
public:
|
165
|
+
|
166
|
+
NoDestructor(int x) {}
|
167
|
+
|
168
|
+
~NoDestructor() {}
|
169
|
+
};
|
170
|
+
|
171
|
+
/** Test that we can use a static constructor.
|
172
|
+
* @dub constructor: 'MakeStaticConstr'
|
173
|
+
*/
|
174
|
+
class StaticConstr {
|
175
|
+
public:
|
176
|
+
|
177
|
+
StaticConstr(int x) {}
|
178
|
+
|
179
|
+
~StaticConstr() {}
|
180
|
+
|
181
|
+
// We usually want to push the userdata ourself in
|
182
|
+
// such cases.
|
183
|
+
static LuaStackSize MakeStaticConstr(lua_State *L) {
|
184
|
+
return 0; // fake error (nil return)
|
185
|
+
}
|
186
|
+
};
|
187
|
+
|
188
|
+
// class inheritence tests
|
189
|
+
class Base {
|
190
|
+
public:
|
191
|
+
Base() {}
|
192
|
+
~Base() {}
|
193
|
+
|
194
|
+
const char *method_in_base(int x, float y) {
|
195
|
+
return "nothing";
|
196
|
+
}
|
197
|
+
};
|
198
|
+
|
199
|
+
// class inheritence tests
|
200
|
+
class SubBase : public Base {
|
201
|
+
public:
|
202
|
+
SubBase() {}
|
203
|
+
~SubBase() {}
|
204
|
+
|
205
|
+
void method_in_sub(float y) {
|
206
|
+
return "nothing";
|
207
|
+
}
|
208
|
+
};
|
209
|
+
|
210
|
+
// class inheritence tests
|
211
|
+
class PrivSubBase : private Base {
|
212
|
+
public:
|
213
|
+
SubBase() {}
|
214
|
+
~SubBase() {}
|
215
|
+
|
216
|
+
void method_in_sub(float y) {
|
217
|
+
return "nothing";
|
218
|
+
}
|
219
|
+
};
|
220
|
+
template<class T>
|
221
|
+
class TMat {
|
222
|
+
public:
|
223
|
+
TMat() : data_(NULL), rows_(0), cols_(0) {}
|
224
|
+
|
225
|
+
TMat(int rows, int cols) : rows_(rows), cols_(cols) {
|
226
|
+
data_ = (T*)malloc(size() * sizeof(T));
|
227
|
+
}
|
228
|
+
|
229
|
+
// test constructor with T parameter
|
230
|
+
TMat(T dummy) {
|
231
|
+
|
232
|
+
}
|
233
|
+
|
234
|
+
~TMat() {
|
235
|
+
if (data_) free(data_);
|
236
|
+
}
|
237
|
+
|
238
|
+
/** Dummy template based class method.
|
239
|
+
*/
|
240
|
+
template<class T2>
|
241
|
+
T2 *give_me_tea() {
|
242
|
+
return new T2();
|
243
|
+
}
|
244
|
+
|
245
|
+
/** Return size of matrix (rows * cols). */
|
246
|
+
size_t size() {
|
247
|
+
return rows_ * cols_;
|
248
|
+
}
|
249
|
+
|
250
|
+
size_t cols() {
|
251
|
+
return cols_;
|
252
|
+
}
|
253
|
+
|
254
|
+
size_t rows() {
|
255
|
+
return rows_;
|
256
|
+
}
|
257
|
+
|
258
|
+
void fill(T value) {
|
259
|
+
// dummy
|
260
|
+
}
|
261
|
+
|
262
|
+
void FunkyThing(double v[7]) {
|
263
|
+
|
264
|
+
}
|
265
|
+
|
266
|
+
T get(size_t row, size_t col) {
|
267
|
+
return data_[row * cols_ + col];
|
268
|
+
}
|
269
|
+
|
270
|
+
private:
|
271
|
+
T *data_;
|
272
|
+
size_t rows_;
|
273
|
+
size_t cols_;
|
274
|
+
};
|
275
|
+
|
276
|
+
/** @var FloatMat
|
277
|
+
*/
|
278
|
+
typedef TMat<float> FloatMat;
|
279
|
+
typedef FloatMat FMatrix;
|
280
|
+
|
281
|
+
} // dub
|
282
|
+
|
283
|
+
#endif // DOXY_GENERATOR_TEST_FIXTURES_APP_MATRIX_H_
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'dub'
|
2
|
+
require 'dub/lua'
|
3
|
+
require 'pathname'
|
4
|
+
|
5
|
+
dub = Dub.parse(Pathname(__FILE__).dirname + 'xml/namespacedub.xml')[:dub]
|
6
|
+
|
7
|
+
Dub::Lua.bind(dub)
|
8
|
+
|
9
|
+
File.open(Pathname(__FILE__).dirname + "bindings/all_lua.cpp", 'wb') do |f|
|
10
|
+
%w{Matrix FloatMat}.each do |name|
|
11
|
+
f.puts dub[name]
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# ----------------------------------------------------------------------------
|
2
|
+
# CMake file for Lua. See root CMakeLists.txt
|
3
|
+
#
|
4
|
+
# ----------------------------------------------------------------------------
|
5
|
+
project(lua)
|
6
|
+
|
7
|
+
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
|
8
|
+
|
9
|
+
# ----------------------------------------------------------------------------------
|
10
|
+
# Define the library target:
|
11
|
+
# ----------------------------------------------------------------------------------
|
12
|
+
|
13
|
+
set(the_target "lua")
|
14
|
+
|
15
|
+
file(GLOB lib_srcs *.c)
|
16
|
+
list (REMOVE_ITEM lib_srcs ${CMAKE_CURRENT_SOURCE_DIR}/lua.c ${CMAKE_CURRENT_SOURCE_DIR}/luac.c)
|
17
|
+
file(GLOB lib_hdrs *.h)
|
18
|
+
set(lib_ext_hdrs)
|
19
|
+
|
20
|
+
add_library(${the_target} STATIC ${lib_srcs} ${lib_hdrs} ${lib_ext_hdrs})
|
21
|
+
|
22
|
+
set_target_properties(${the_target}
|
23
|
+
PROPERTIES OUTPUT_NAME "${the_target}"
|
24
|
+
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/vendor_lib
|
25
|
+
)
|
@@ -0,0 +1,34 @@
|
|
1
|
+
Lua License
|
2
|
+
-----------
|
3
|
+
|
4
|
+
Lua is licensed under the terms of the MIT license reproduced below.
|
5
|
+
This means that Lua is free software and can be used for both academic
|
6
|
+
and commercial purposes at absolutely no cost.
|
7
|
+
|
8
|
+
For details and rationale, see http://www.lua.org/license.html .
|
9
|
+
|
10
|
+
===============================================================================
|
11
|
+
|
12
|
+
Copyright (C) 1994-2007 Lua.org, PUC-Rio.
|
13
|
+
|
14
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
15
|
+
of this software and associated documentation files (the "Software"), to deal
|
16
|
+
in the Software without restriction, including without limitation the rights
|
17
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
18
|
+
copies of the Software, and to permit persons to whom the Software is
|
19
|
+
furnished to do so, subject to the following conditions:
|
20
|
+
|
21
|
+
The above copyright notice and this permission notice shall be included in
|
22
|
+
all copies or substantial portions of the Software.
|
23
|
+
|
24
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
25
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
26
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
27
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
28
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
29
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
30
|
+
THE SOFTWARE.
|
31
|
+
|
32
|
+
===============================================================================
|
33
|
+
|
34
|
+
(end of COPYRIGHT)
|