Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(926)

Side by Side Diff: swig/Lib/typemaps/implicit.swg

Issue 553095: Checkin swig binaries for win, linux and Mac... (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/
Patch Set: '' Created 10 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « swig/Lib/typemaps/fragments.swg ('k') | swig/Lib/typemaps/inoutlist.swg » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 The %implict macro allows a SwigType (Class) to be accepted
3 as an input parameter and use its implicit constructors when needed.
4
5 For example:
6
7
8 %implicit(A, int, double, B);
9
10 %inline
11 {
12 struct B { };
13 struct A
14 {
15 int ii;
16 A(int i) { ii = 1; }
17 A(double d) { ii = 2; }
18 A(const B& b) { ii = 3; }
19 };
20
21 int get(A a) { return a.ii; }
22 }
23
24 Here, you can call 'get' as
25
26 get(1) ==> get(A(1))
27 get(2.0) ==> get(A(2.0))
28 get(B()) ==> get(A(B()))
29
30 and swig will construct an 'A' temporal variable using the
31 corresponding implicit constructor.
32
33
34 The plain implicit macro takes care of simple type list. If it doesn't
35 work because you are passing template types with commas, then use
36 the %implicit_{1,2,3} versions and/or the %arg macro.
37
38 */
39
40 %define %implicit_type(Type...)
41 %traits_swigtype(Type);
42 %enddef
43
44 %define %implicit_frag(Type...) ,fragment=SWIG_Traits_frag(Type) %enddef
45
46 %define %implicit_code(Type...)
47 {
48 Type _v;
49 int res = swig::asval<Type >(obj, &_v);
50 if (SWIG_IsOK(res)) {
51 if (val) *val = new value_type(static_cast<const Type& >(_v));
52 return SWIG_AddNewMask(res);
53 }
54 }
55 %enddef
56
57 /* implicit */
58
59 %define %implicit(Type, ...)
60
61 %formacro_1(%implicit_type,__VA_ARGS__);
62
63 %fragment(SWIG_Traits_frag(Type),"header",
64 fragment="StdTraits"
65 %formacro_1(%implicit_frag,__VA_ARGS__)) %{
66 namespace swig {
67 template <> struct traits<Type > {
68 typedef pointer_category category;
69 static const char* type_name() { return "Type"; }
70 };
71
72 template <> struct traits_asptr< Type > {
73 typedef Type value_type;
74 static int asptr(SWIG_Object obj, value_type **val) {
75 Type *vptr;
76 static swig_type_info* desc = SWIG_TypeQuery("Type *");
77 int res = SWIG_ConvertPtr(obj, (void **)&vptr, desc, 0);
78 if (SWIG_IsOK(res)) {
79 if (val) *val = vptr;
80 return res;
81 } else {
82 %formacro_1(%implicit_code,__VA_ARGS__)
83 }
84 return SWIG_TypeError;
85 }
86 };
87 }
88 %}
89
90 %typemap_traits_ptr(%checkcode(POINTER),Type);
91 %enddef
92
93 /* implicit_1 */
94
95
96 %define %implicit_1(Type, Imp1)
97 %traits_swigtype(Imp1);
98
99 %fragment(SWIG_Traits_frag(Type),"header",
100 fragment="StdTraits",
101 fragment=SWIG_Traits_frag(Imp1)) %{
102 namespace swig {
103 template <> struct traits< Type > {
104 typedef pointer_category category;
105 static const char* type_name() { return "Type"; }
106 };
107
108 template <> struct traits_asptr< Type > {
109 typedef Type value_type;
110 static int asptr(SWIG_Object obj, value_type **val) {
111 Type *vptr;
112 static swig_type_info* desc = SWIG_TypeQuery("Type *");
113 int res = SWIG_ConvertPtr(obj, (void **)&vptr, desc, 0);
114 if (SWIG_IsOK(res)) {
115 if (val) *val = vptr;
116 return res;
117 } else {
118 %implicit_code(Imp1);
119 }
120 return SWIG_TypeError;
121 }
122 };
123 }
124 %}
125
126 %typemap_traits_ptr(%checkcode(POINTER),Type);
127
128 %enddef
129
130 /* implicit_2 */
131
132 %define %implicit_2(Type, Imp1, Imp2)
133 %traits_swigtype(Imp1);
134 %traits_swigtype(Imp2);
135
136 %fragment(SWIG_Traits_frag(Type),"header",
137 fragment="StdTraits",
138 fragment=SWIG_Traits_frag(Imp1),
139 fragment=SWIG_Traits_frag(Imp2)) %{
140 namespace swig {
141 template <> struct traits< Type > {
142 typedef pointer_category category;
143 static const char* type_name() { return "Type"; }
144 };
145
146 template <> struct traits_asptr< Type > {
147 typedef Type value_type;
148 static int asptr(SWIG_Object obj, value_type **val) {
149 Type *vptr;
150 static swig_type_info* desc = SWIG_TypeQuery("Type *");
151 int res = SWIG_ConvertPtr(obj, (void **)&vptr, desc, 0);
152 if (SWIG_IsOK(res)) {
153 if (val) *val = vptr;
154 return SWIG_OLDOBJ;
155 } else {
156 %implicit_code(Imp1);
157 %implicit_code(Imp2);
158 }
159 return SWIG_TypeError;
160 }
161 };
162 }
163 %}
164
165 %typemap_traits_ptr(%checkcode(POINTER),Type);
166 %enddef
167
168
169 /* implicit_3 */
170
171 %define %implicit_3(Type, Imp1, Imp2, Imp3)
172 %traits_swigtype(Imp1);
173 %traits_swigtype(Imp2);
174 %traits_swigtype(Imp3);
175
176 %fragment(SWIG_Traits_frag(Type),"header",
177 fragment="StdTraits",
178 fragment=SWIG_Traits_frag(Imp1),
179 fragment=SWIG_Traits_frag(Imp2),
180 fragment=SWIG_Traits_frag(Imp3)) %{
181 namespace swig {
182 template <> struct traits< Type > {
183 typedef pointer_category category;
184 static const char* type_name() { return "Type"; }
185 };
186
187 template <> struct traits_asptr< Type > {
188 typedef Type value_type;
189 static int asptr(SWIG_Object obj, value_type **val) {
190 Type *vptr;
191 static swig_type_info* desc = SWIG_TypeQuery("Type *");
192 int res = SWIG_ConvertPtr(obj, (void **)&vptr, desc, 0);
193 if (SWIG_IsOK(res)) {
194 if (val) *val = vptr;
195 return res;
196 } else {
197 %implicit_code(Imp1);
198 %implicit_code(Imp2);
199 %implicit_code(Imp3);
200 }
201 return SWIG_TypeError;
202 }
203 };
204 }
205 %}
206
207 %typemap_traits_ptr(%checkcode(POINTER),Type);
208 %enddef
OLDNEW
« no previous file with comments | « swig/Lib/typemaps/fragments.swg ('k') | swig/Lib/typemaps/inoutlist.swg » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698