1
+ // Copyright (c) 2024 Li Shuangquan. All Rights Reserved.
2
+ //
3
+ // Licensed under the MIT License (the "License"); you may not use this file
4
+ // except in compliance with the License. You may obtain a copy of the License
5
+ // at
6
+ //
7
+ // http://opensource.org/licenses/MIT
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11
+ // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12
+ // License for the specific language governing permissions and limitations
13
+ // under the License.
14
+
15
+ #include < peacalm/luaw.h>
16
+
17
+ #include < vector>
18
+
19
+ int main () {
20
+ peacalm::luaw l;
21
+
22
+ using VD = std::vector<double >;
23
+ using SharedVD = std::shared_ptr<VD>;
24
+
25
+ // Constructor
26
+ l.set (" NewVD" , []() { return std::make_shared<VD>(); });
27
+
28
+ l.register_member <const double & (VD::*)(size_t ) const >(" at" , &VD::at);
29
+ // Fake member function: to stimulate the operator[]
30
+ l.register_member <void (VD::*)(int , double )>(
31
+ " set_at" , [](VD* p, int idx, double v) { (*p)[idx] = v; });
32
+
33
+ l.register_member (" size" , &VD::size);
34
+ l.register_member (" empty" , &VD::empty);
35
+
36
+ l.register_member (" clear" , &VD::clear);
37
+ // Fake member function: to stimulate insert
38
+ l.register_member <void (VD::*)(int , double )>(
39
+ " insert_at" , [](VD* p, int idx, double v) {
40
+ p->insert (std::next (p->begin (), idx), v);
41
+ });
42
+
43
+ l.register_member <void (VD::*)(const double &)>(" push_back" , &VD::push_back);
44
+ l.register_member (" pop_back" , &VD::pop_back);
45
+
46
+ l.register_member <void (VD::*)(size_t )>(" resize" , &VD::resize);
47
+
48
+ int retcode = l.dofile (" test.lua" );
49
+ if (retcode != LUA_OK) {
50
+ l.log_error_out ();
51
+ return retcode;
52
+ }
53
+ return 0 ;
54
+ }
0 commit comments