Mercurial > mm7
comparison lib/swig/swigwin-2.0.11/Lib/lua/_std_common.i @ 1899:b3009adc0e2f
Adding swig, gitignore, hgignore
author | Nomad |
---|---|
date | Mon, 21 Oct 2013 10:42:27 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
1867:eb580660bbbb | 1899:b3009adc0e2f |
---|---|
1 /* ----------------------------------------------------------------------------- | |
2 * _std_common.i | |
3 * | |
4 * std::helpers for LUA | |
5 * ----------------------------------------------------------------------------- */ | |
6 | |
7 %include <std_except.i> // the general exceptions | |
8 | |
9 /* | |
10 The basic idea here, is instead of trying to feed SWIG all the | |
11 horribly templated STL code, to give it a neatened version. | |
12 | |
13 These %defines cover some of the more common methods | |
14 so the class declarations become just a set of %defines | |
15 | |
16 */ | |
17 | |
18 /* #define for basic container features | |
19 note: I allow front(), back() & pop_back() to throw exceptions | |
20 upon empty containers, rather than coredump | |
21 (as we haven't defined the methods, we can use %extend to add with | |
22 new features) | |
23 | |
24 */ | |
25 %define %STD_CONTAINER_METHODS(CLASS,T) | |
26 public: | |
27 CLASS(); | |
28 CLASS(const CLASS&); | |
29 unsigned int size() const; | |
30 unsigned int max_size() const; | |
31 bool empty() const; | |
32 void clear(); | |
33 %extend { // the extra stuff which must be checked | |
34 T front()const throw (std::out_of_range){ // only read front & back | |
35 if (self->empty()) | |
36 throw std::out_of_range("in "#CLASS"::front()"); | |
37 return self->front(); | |
38 } | |
39 T back()const throw (std::out_of_range){ // not write to them | |
40 if (self->empty()) | |
41 throw std::out_of_range("in "#CLASS"::back()"); | |
42 return self->back(); | |
43 } | |
44 } | |
45 %enddef | |
46 | |
47 /* push/pop for front/back | |
48 also note: front & back are read only methods, not used for writing | |
49 */ | |
50 %define %STD_FRONT_ACCESS_METHODS(CLASS,T) | |
51 public: | |
52 void push_front(const T& val); | |
53 %extend { // must check this | |
54 void pop_front() throw (std::out_of_range){ | |
55 if (self->empty()) | |
56 throw std::out_of_range("in "#CLASS"::pop_front()"); | |
57 self->pop_back(); | |
58 } | |
59 } | |
60 %enddef | |
61 | |
62 %define %STD_BACK_ACCESS_METHODS(CLASS,T) | |
63 public: | |
64 void push_back(const T& val); | |
65 %extend { // must check this | |
66 void pop_back() throw (std::out_of_range){ | |
67 if (self->empty()) | |
68 throw std::out_of_range("in "#CLASS"::pop_back()"); | |
69 self->pop_back(); | |
70 } | |
71 } | |
72 %enddef | |
73 | |
74 /* | |
75 Random access methods | |
76 */ | |
77 %define %STD_RANDOM_ACCESS_METHODS(CLASS,T) | |
78 %extend // this is a extra bit of SWIG code | |
79 { | |
80 // [] is replaced by __getitem__ & __setitem__ | |
81 // simply throws a string, which causes a lua error | |
82 T __getitem__(unsigned int idx) throw (std::out_of_range){ | |
83 if (idx>=self->size()) | |
84 throw std::out_of_range("in "#CLASS"::__getitem__()"); | |
85 return (*self)[idx]; | |
86 } | |
87 void __setitem__(unsigned int idx,const T& val) throw (std::out_of_range){ | |
88 if (idx>=self->size()) | |
89 throw std::out_of_range("in "#CLASS"::__setitem__()"); | |
90 (*self)[idx]=val; | |
91 } | |
92 }; | |
93 %enddef |