Re: Lua-cxx - C++11 APIs for creating Lua modules

"Rodrigo 'Skhaz' Delduca" <[email protected]> Thu, 29 May 2014 13:48:51 -0300
Newsgroups gmane.comp.lang.lua.bind.user
Message-ID <CAJNE8CnWPskBmLgQXVF1vUqAt4fD1wCH84cEmv2S7PFv5KoxYg@mail.gmail.com>
YXdlc29tZSEKcmVhbGx5IGEgZ3JlYXQgam9iISBJJ2xsIHBvcnQgbXkgcHJvamVjdCB0aGF0IHVz
ZSBsdWFiaW5kIHRvIGx1YS1jeHggc29vbgoKaHR0cDovL3d3dy5udWxsb25lcnJvci5vcmcvCi0t
IGZsaXBwaW5nIGJpdHMgd2hpbHN0IHVwZGF0aW5nIHBpeGVscwoKCk9uIFdlZCwgTWF5IDI4LCAy
MDE0IGF0IDg6NTMgUE0sIEFhcm9uIEZhYW5lcyA8ZGFmcml0b0BnbWFpbC5jb20+IHdyb3RlOgo+
IEhlbGxvIQo+Cj4gSSB3b3VsZCBsaWtlIHRvIHNoYXJlIEx1YS1jeHgsIGEgTUlULWxpY2Vuc2Vk
IHByb2plY3QgdGhhdCBJIHdyb3RlIHRoYXQgYWlkcwo+IGluIHdyaXRpbmcgbW9kdWxlcyBhbmQg
YmluZGluZ3MgZm9yIEx1YS4gSSBwb3N0ZWQgdGhpcyB0byB0aGUgTHVhIG1haWxpbmcKPiBsaXN0
LCBidXQgSSBmaWd1cmVkIHRob3NlCj4gd2hvIHVzZSBMdWFiaW5kIHdvdWxkIGJlIGludGVyZXN0
ZWQgdG8gc2VlIGFub3RoZXIgQysrIHRha2Ugb24gTHVhJ3MgQVBJLCBzbwo+IEkgZGVjaWRlZCB0
byBwb3N0IGhlcmUgYXMgd2VsbC4gOikKPgo+IENvbXBhcmVkIHRvIEx1YWJpbmQsIEx1YS1jeHgg
aXMgbG93ZXItbGV2ZWwuIEx1YS1jeHggZG9lcyBub3QgaW50cm9kdWNlIGFuCj4gb2JqZWN0IG1v
ZGVsIGZvciBMdWEsIG5vciBkb2VzIGl0IHVzZSBMdWFiaW5kJ3MgcG9saWN5IG1vZGVsIGZvciBh
cmd1bWVudHMuCj4gSXQgZG9lcyB1c2UgdGVtcGxhdGVzIHdpZGVseSwgaW5jbHVkaW5nIHRob3Nl
IGZlYXR1cmVzIGxpa2UgdmFyaWFkaWMKPiB0ZW1wbGF0ZXMgYWRkZWQgaW4gQysrMTEsIHRvIHBy
b3ZpZGUgYSBzaW1pbGFyIGxldmVsIG9mIGV4cHJlc3NpdmUgcG93ZXIgYXMKPiBMdWFiaW5kLgo+
Cj4gTHVhLWN4eCwgbGlrZSBMdWFiaW5kLCBkb2Vzbid0IHByb3ZpZGUgYSBjb21wbGV0ZSBmYcOn
YWRlIG92ZXIgTHVhJ3MgQyBBUEkuCj4gT24gdGhlIGNvbnRyYXJ5LCBJIGZpbmQgTHVhJ3MgQyBB
UEkgdG8gYmUgYW1hemluZ2x5IHdlbGwtZGVzaWduZWQsIHNvIEkndmUKPiB0cmllZCB0byBlbnN1
cmUgdGhhdCBMdWEtY3h4IGNhbiBiZSBpbnRlcm1peGVkIGZyZWVseSB3aXRoIEx1YSdzIEMgQVBJ
LiBJbgo+IGZhY3QsIG1vc3Qgb2YgdGhlIEx1YSBDIEFQSSBoYXMgbm8gYW5hbG9nIGluIEx1YS1j
eHggLSBJIGp1c3QgdXNlIHRoZQo+IG9yaWdpbmFsLiA7KQo+Cj4gICAgIC8vIEFkZCBhbGwgYXJn
dW1lbnRzCj4gICAgIGludCBhZGRfc2V2ZXJhbChsdWE6OnN0YXRlKiBjb25zdCBzdGF0ZSkKPiAg
ICAgewo+ICAgICAgICAgLy8gR2V0IGVhY2ggYXJndW1lbnQKPiAgICAgICAgIGludCBzdW0gPSAw
Owo+ICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbHVhX2dldHRvcChzdGF0ZSk7ICsraSkg
ewo+ICAgICAgICAgICAgIHN1bSArPSBsdWE6OmdldDxpbnQ+KHN0YXRlLCBpKTsKPiAgICAgICAg
IH0KPgo+ICAgICAgICAgLy8gUmV0dXJuIHRoZSB2YWx1ZQo+ICAgICAgICAgbHVhOjpwdXNoKHN0
YXRlLCBzdW0pOwo+ICAgICAgICAgbHVhX3JlcGxhY2Uoc3RhdGUsIDEpOwo+ICAgICAgICAgcmV0
dXJuIDE7Cj4gICAgIH0KPgo+IFRoYXQgYmVpbmcgc2FpZCwgdGhlcmUgYXJlIHNldmVyYWwgcGxh
Y2VzIHdoZXJlIEx1YS1jeHggZ3JlYXRseSBzaW1wbGlmeQo+IGNvbW1vbiB0YXNrcy4gRm9yIGlu
c3RhbmNlLCBMdWEgaGFzIGEgbnVtYmVyIG9mIGx1YV9wdXNoKiBmdW5jdGlvbnMgdGhhdCBjYW4K
PiBiZSByZXBsYWNlZCB3aXRoIEx1YS1jeHgncyBsdWE6OnB1c2ggdGVtcGxhdGUgYW5kIGFwcHJv
cHJpYXRlCj4gc3BlY2lhbGl6YXRpb25zLiBZb3UgY2FuIGV4dGVuZCB0aGlzIHNwZWNpYWxpemF0
aW9uIHdpdGggeW91ciBvd24gdHlwZXMsIGFuZAo+IEx1YS1jeHgncyBvdGhlciBmZWF0dXJlcyB3
aWxsIGltbWVkaWF0ZWx5IHN1cHBvcnQgdGhlbS4KPgo+IEMrKzExIGFkZGVkIHZhcmlhZGljIHRl
bXBsYXRlcywgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcHJvdmlkZSBhIHdheSB0byBwdXNoIGEKPiBm
dW5jdGlvbiBvZiBhbnkgYXJpdHkgaW50byBMdWEgd2l0aG91dCBuZWVkaW5nIHRvIHdyaXRlIHRo
ZSBtYXJzaGFsbGluZyBjb2RlCj4geW91cnNlbGYgb3IgcnVubmluZyBhIHByZXByb2Nlc3NvcjoK
Pgo+IC8vIFN0YW5kYXJkIEMgQVBJIGlzLCBvZiBjb3Vyc2UsIHN1cHBvcnRlZAo+IGludCBjcmVh
dGVfZm9vKGx1YTo6c3RhdGUqIGNvbnN0KTsKPiBsdWE6OnB1c2goc3RhdGUsIGNyZWF0ZV9mb28p
Owo+Cj4gLy8gRnVuZGFtZW50YWwgdHlwZXMgd29yaywgdG9vCj4gaW50IHN1bShpbnQgYSwgaW50
IGIpOwo+IGx1YTo6cHVzaChzdGF0ZSwgc3VtKTsKPgo+IC8vIEFzIGFyZSBwb2ludGVycyB0byB1
c2VyZGF0YSBhbmQgY29udmVyc2lvbnMgdG8gQysrIHN0cmluZ3MuCj4gdm9pZCBjaGFuZ2VUaXRs
ZShRV2luZG93KiB3aW5kb3csIGNvbnN0IHN0ZDo6c3RyaW5nJiB0aXRsZSk7Cj4gbHVhOjpwdXNo
KHN0YXRlLCBjaGFuZ2VUaXRsZSk7Cj4KPiAvLyBFdmVuIGxhbWJkYXMgd29yayB0b28sIHdpdGgg
YSBiaXQgb2YgaGVscAo+IGx1YTo6cHVzaF9mdW5jdGlvbjwgaW50KGludCwgaW50KSA+KHN0YXRl
LCBbXShpbnQgZmlyc3QsIGludCBzZWNvbmQpIHsKPiAgICAgcmV0dXJuIGZpcnN0ICsgc2Vjb25k
Owo+IH0pOwo+Cj4gQmV5b25kIHRoaXMsIEx1YS1jeHggYWxzbyBoYXMgb3V0LW9mLXRoZS1ib3gg
c3VwcG9ydCBmb3IgUXQncyBRT2JqZWN0IG1vZGVsLAo+IGFzIHdlbGwgYXMgcnVkaW1lbnRhcnkg
c3VwcG9ydCBmb3IgR3RrJ3MgR09iamVjdCBtb2RlbCwgc28geW91IGNhbiBwdXNoCj4gdGhlc2Ug
dHlwZXMgYW5kIHRoZWlyIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgd2lsbCBhdXRvbWF0aWNhbGx5
IGJlIGV4cG9zZWQKPiB0byBMdWEuIFlvdSBjYW4gdGhlbiBzcGVjaWFsaXplIGZ1cnRoZXIgb24g
YSBzcGVjaWZpYyBzdWJ0eXBlIHRvIGFkZAo+IGJlaGF2aW9yIG5vdCBwcm92aWRlZCBieSB0aGF0
IGxpYnJhcnkncyBtZXRhZGF0YS4KPgo+IEhlcmUncyBhIHNpbXBsZSBleGFtcGxlIG9mIHdoYXQg
Y2FuIGJlIGRvbmU6Cj4KPiAgICAgLy8gQ3JlYXRlIGEgbmV3IEx1YSBlbnZpcm9ubWVudCB0byBw
bGF5IHdpdGguCj4gICAgIGF1dG8gZW52ID0gbHVhOjpjcmVhdGUoKTsKPgo+ICAgICAvLyBJbnRy
b2R1Y2UgYSBnbG9iYWwgaW50byBMdWEKPiAgICAgZW52WyJmb28iXSA9ICJObyB0aW1lIjsKPgo+
ICAgICAvLyBSdW4gc29tZSBMdWEgY29kZSBkaXJlY3RseQo+ICAgICBsdWE6OnJ1bl9zdHJpbmco
ImFzc2VydChmb28gPT0gJ05vIHRpbWUnKSIpOwo+Cj4gICAgIC8vIFJldHJpZXZlIGEgZ2xvYmFs
Cj4gICAgIGF1dG8gdmFsdWUgPSBlbnZbImZvbyJdLmdldDxzdGQ6OnN0cmluZz4oKTsKPgo+IEFu
ZCBoZXJlJ3MgYW5vdGhlciwgbW9yZSBjb21wbGV4IHZhcmlhbnQgdGhhdCBzaG93cyBob3cgYSBM
dWEgbW9kdWxlIGZvcgo+IFF0J3MgUVdpbmRvdyBjbGFzcyBjb3VsZCBiZSBjcmVhdGVkOgo+Cj4g
ICAgICNpbmNsdWRlIDxsdWFjeHgvc3RhY2suaHBwPgo+ICAgICAjaW5jbHVkZSA8bHVhY3h4L3R5
cGUvc3RhbmRhcmQuaHBwPgo+ICAgICAjaW5jbHVkZSA8bHVhY3h4L3R5cGUvZnVuY3Rpb24uaHBw
Pgo+Cj4gICAgICNpbmNsdWRlIDxRV2luZG93Pgo+Cj4gICAgIGludCBRV2luZG93X25ldyhsdWE6
OnN0YXRlKiBjb25zdCBzdGF0ZSkKPiAgICAgewo+ICAgICAgICAgaWYgKGx1YV9nZXR0b3Aoc3Rh
dGUpID4gMSkgewo+ICAgICAgICAgICAgIGF1dG8gcGFyZW50ID0gbHVhOjpnZXQ8UU9iamVjdCo+
KHN0YXRlLCAyKTsKPiAgICAgICAgICAgICBsdWFfc2V0dG9wKHN0YXRlLCAwKTsKPgo+ICAgICAg
ICAgICAgIGlmIChwYXJlbnQpIHsKPiAgICAgICAgICAgICAgICAgaWYgKHBhcmVudC0+aW5oZXJp
dHMoIlFXaW5kb3ciKSkgewo+ICAgICAgICAgICAgICAgICAgICAgbHVhOjptYWtlPFFXaW5kb3c+
KHN0YXRlLAo+IHN0YXRpY19jYXN0PFFXaW5kb3cqPihwYXJlbnQpKTsKPiAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKPiAgICAgICAgICAgICAgICAgICAgIGx1YTo6bWFrZTxRV2luZG93PihzdGF0
ZSwKPiBzdGF0aWNfY2FzdDxRU2NyZWVuKj4ocGFyZW50KSk7Cj4gICAgICAgICAgICAgICAgIH0K
PiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7Cj4gICAgICAgICAgICAgfQo+Cj4gICAgICAgICAg
ICAgLy8gT3RoZXJ3aXNlLCBmYWxsIHRocm91Z2gKPiAgICAgICAgIH0KPgo+ICAgICAgICAgLy8g
Q3JlYXRlIGEgUVdpbmRvdyB3aXRoaW4gTHVhCj4gICAgICAgICBsdWE6Om1ha2U8UVdpbmRvdz4o
c3RhdGUsIHN0YXRpY19jYXN0PFFXaW5kb3cqPihudWxscHRyKSk7Cj4gICAgICAgICByZXR1cm4g
MTsKPiAgICAgfQo+Cj4gICAgIGludCBsdWFvcGVuX1FXaW5kb3cobHVhOjpzdGF0ZSogY29uc3Qg
c3RhdGUpCj4gICAgIHsKPiAgICAgICAgIGx1YTo6dGhyZWFkIGVudihzdGF0ZSk7Cj4KPiAgICAg
ICAgIGVudlsiUVdpbmRvdyJdID0gbHVhOjp2YWx1ZTo6dGFibGU7Cj4gICAgICAgICBlbnZbIlFX
aW5kb3ciXVsibmV3Il0gPSBRV2luZG93X25ldzsKPgo+ICAgICAgICAgcmV0dXJuIDE7Cj4gICAg
IH0KPgo+ICAgICAvLyBXaXRoaW4gTHVhCj4KPiAgICAgcmVxdWlyZSAiUVdpbmRvdyI7Cj4KPiAg
ICAgbG9jYWwgd2luZG93ID0gUVdpbmRvdzpuZXcoKTsKPiAgICAgd2luZG93LndpZHRoID0gMzAw
Owo+ICAgICB3aW5kb3cuaGVpZ2h0ID0gMzAwOwo+ICAgICB3aW5kb3cudGl0bGUgPSAiSGVsbG8s
IHdvcmxkIjsKPiAgICAgd2luZG93OnNob3coKTsKPgo+IEkndmUgdHJpZWQgdG8gZG9jdW1lbnQg
aXQgd2VsbCBhbmQga2VlcCB0aGluZ3MgdGlkeS4gVGhlIHNvdXJjZSBpbiB0b3RhbCBpcwo+IGFs
bW9zdCA3LDAwMCBsaW5lcyBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbiBhbmQgdW5pdCB0ZXN0cy4g
VGhlIGRvY3VtZW50YXRpb24KPiBmb3IgZWFjaCBmaWxlIGNhbiBiZSBmb3JtYXR0ZWQgZm9yIGVh
c2llciB2aWV3aW5nIHVzaW5nIHRoZSB0aW55IGJhc2ggc2NyaXB0Cj4gY2FsbGVkIGNwb2QuIEl0
J3MgaW4gLi9zcmMuIEl0IGp1c3QgZG9lcyBhIGZldyByZWdleGVzIHRvIG1ha2UgdGhlIHNvdXJj
ZQo+IGxvb2sgbGlrZSBwZXJsZG9jIGFuZCBjYWxscyB0aGF0LCBzbyB5b3UnbGwgbmVlZCB0aGF0
IHRvby4KPgo+IFRoYW5rcyBmb3IgcmVhZGluZzsgSSBob3BlIHlvdSB0YWtlIGEgbG9vayEgVGhl
IGRvY3VtZW50YXRpb24gaW4KPiBzcmMvc3RhY2suaHBwIG9yIHBlcmhhcHMgdGhlIHVuaXQgdGVz
dHMgaW4gc3JjL3Rlc3RzL2NvcmUuY3BwIGFyZSBnb29kIGZpcnN0Cj4gcGxhY2VzIHRvIHN0YXJ0
Lgo+Cj4gaHR0cHM6Ly9naXRodWIuY29tL2RhZnJpdG8vbHVhLWN4eC5naXQKPgo+IC0tIEFhcm9u
Cj4KPiAtLQo+IEFhcm9uIEZhYW5lcyA8ZGFmcml0b0BnbWFpbC5jb20+Cj4KPiAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KPiBUaW1lIGlzIG1vbmV5LiBTdG9wIHdhc3RpbmcgaXQhIEdldCB5b3VyIHdl
YiBBUEkgaW4gNSBtaW51dGVzLgo+IHd3dy5yZXN0bGV0LmNvbS9kb3dubG9hZAo+IGh0dHA6Ly9w
LnNmLm5ldC9zZnUvcmVzdGxldAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCj4gbHVhYmluZC11c2VyIG1haWxpbmcgbGlzdAo+IGx1YWJpbmQtdXNlckBs
aXN0cy5zb3VyY2Vmb3JnZS5uZXQKPiBodHRwczovL2xpc3RzLnNvdXJjZWZvcmdlLm5ldC9saXN0
cy9saXN0aW5mby9sdWFiaW5kLXVzZXIKPgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRpbWUgaXMg
bW9uZXkuIFN0b3Agd2FzdGluZyBpdCEgR2V0IHlvdXIgd2ViIEFQSSBpbiA1IG1pbnV0ZXMuCnd3
dy5yZXN0bGV0LmNvbS9kb3dubG9hZApodHRwOi8vcC5zZi5uZXQvc2Z1L3Jlc3RsZXQKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbHVhYmluZC11c2VyIG1h
aWxpbmcgbGlzdApsdWFiaW5kLXVzZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0Cmh0dHBzOi8vbGlz
dHMuc291cmNlZm9yZ2UubmV0L2xpc3RzL2xpc3RpbmZvL2x1YWJpbmQtdXNlcgo=