rino 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -1
- data/ext/extconf.rb +1 -24
- data/ext/libinchi.so +0 -0
- data/ext/src/aux2atom.h +120 -39
- data/ext/src/comdef.h +3 -3
- data/ext/src/dispstru.c +2547 -0
- data/ext/src/dispstru.h +73 -0
- data/ext/src/extr_ct.h +5 -2
- data/ext/src/ichi.h +27 -11
- data/ext/src/ichi_bns.c +1800 -254
- data/ext/src/ichi_bns.h +205 -4
- data/ext/src/ichican2.c +197 -86
- data/ext/src/ichicano.c +8 -13
- data/ext/src/ichicano.h +2 -2
- data/ext/src/ichicans.c +11 -6
- data/ext/src/ichicant.h +2 -2
- data/ext/src/ichicomn.h +2 -2
- data/ext/src/ichicomp.h +19 -4
- data/ext/src/ichidrp.h +9 -5
- data/ext/src/ichierr.h +5 -3
- data/ext/src/ichiisot.c +2 -2
- data/ext/src/ichimain.c +461 -0
- data/ext/src/ichimain.h +23 -15
- data/ext/src/ichimak2.c +6 -6
- data/ext/src/ichimake.c +843 -42
- data/ext/src/ichimake.h +4 -2
- data/ext/src/ichimap1.c +5 -5
- data/ext/src/ichimap2.c +2 -2
- data/ext/src/ichimap4.c +34 -21
- data/ext/src/ichinorm.c +11 -5
- data/ext/src/ichinorm.h +3 -2
- data/ext/src/ichiparm.c +2 -2
- data/ext/src/ichiparm.h +232 -30
- data/ext/src/ichiprt1.c +35 -11
- data/ext/src/ichiprt2.c +78 -7
- data/ext/src/ichiprt3.c +300 -120
- data/ext/src/ichiqueu.c +17 -2
- data/ext/src/ichiread.c +6932 -0
- data/ext/src/ichiring.c +3 -2
- data/ext/src/ichiring.h +2 -2
- data/ext/src/ichirvr1.c +4891 -0
- data/ext/src/ichirvr2.c +6344 -0
- data/ext/src/ichirvr3.c +5499 -0
- data/ext/src/ichirvr4.c +3177 -0
- data/ext/src/ichirvr5.c +1166 -0
- data/ext/src/ichirvr6.c +1287 -0
- data/ext/src/ichirvr7.c +2319 -0
- data/ext/src/ichirvrs.h +882 -0
- data/ext/src/ichisize.h +2 -2
- data/ext/src/ichisort.c +5 -5
- data/ext/src/ichister.c +281 -86
- data/ext/src/ichister.h +9 -3
- data/ext/src/ichitaut.c +208 -9
- data/ext/src/ichitaut.h +13 -11
- data/ext/src/ichitime.h +16 -2
- data/ext/src/inchicmp.h +107 -0
- data/ext/src/inpdef.h +6 -3
- data/ext/src/libinchi_wrap.c +912 -0
- data/ext/src/lreadmol.h +34 -31
- data/ext/src/mode.h +244 -7
- data/ext/src/mol2atom.c +1060 -0
- data/ext/src/mol2atom.h +31 -0
- data/ext/src/readinch.c +239 -0
- data/ext/src/readmol.c +28 -0
- data/ext/src/{e_readmol.h → readmol.h} +7 -9
- data/ext/src/runichi.c +251 -177
- data/ext/src/strutil.c +444 -238
- data/ext/src/strutil.h +150 -11
- data/ext/src/util.c +176 -118
- data/ext/src/util.h +15 -3
- data/lib/rino.rb +71 -3
- data/test/test.rb +33 -4
- metadata +22 -34
- data/ext/ruby_inchi_main.so +0 -0
- data/ext/src/e_0dstereo.c +0 -3014
- data/ext/src/e_0dstereo.h +0 -31
- data/ext/src/e_comdef.h +0 -57
- data/ext/src/e_ctl_data.h +0 -147
- data/ext/src/e_ichi_io.c +0 -498
- data/ext/src/e_ichi_io.h +0 -40
- data/ext/src/e_ichi_parms.c +0 -37
- data/ext/src/e_ichi_parms.h +0 -41
- data/ext/src/e_ichicomp.h +0 -50
- data/ext/src/e_ichierr.h +0 -40
- data/ext/src/e_ichimain.c +0 -593
- data/ext/src/e_ichisize.h +0 -43
- data/ext/src/e_inchi_atom.c +0 -75
- data/ext/src/e_inchi_atom.h +0 -33
- data/ext/src/e_inpdef.h +0 -41
- data/ext/src/e_mode.h +0 -706
- data/ext/src/e_mol2atom.c +0 -649
- data/ext/src/e_readinch.c +0 -58
- data/ext/src/e_readmol.c +0 -54
- data/ext/src/e_readstru.c +0 -251
- data/ext/src/e_readstru.h +0 -33
- data/ext/src/e_util.c +0 -284
- data/ext/src/e_util.h +0 -61
- data/ext/src/ichilnct.c +0 -286
- data/ext/src/inchi_api.h +0 -670
- data/ext/src/inchi_dll.c +0 -1480
- data/ext/src/inchi_dll.h +0 -34
- data/ext/src/inchi_dll_main.c +0 -23
- data/ext/src/inchi_dll_main.h +0 -31
- data/ext/src/ruby_inchi_main.c +0 -558
data/ext/src/inpdef.h
CHANGED
@@ -2,8 +2,8 @@
|
|
2
2
|
* International Union of Pure and Applied Chemistry (IUPAC)
|
3
3
|
* International Chemical Identifier (InChI)
|
4
4
|
* Version 1
|
5
|
-
* Software version 1.
|
6
|
-
*
|
5
|
+
* Software version 1.01
|
6
|
+
* July 21, 2006
|
7
7
|
* Developed at NIST
|
8
8
|
*/
|
9
9
|
|
@@ -274,7 +274,8 @@ int DisconnectSalts( ORIG_ATOM_DATA *orig_inp_data, int bDisconnect );
|
|
274
274
|
int DisconnectMetals( ORIG_ATOM_DATA *orig_inp_data, int bCheckMetalValence, INCHI_MODE *bTautFlagsDone );
|
275
275
|
int bMayDisconnectMetals( ORIG_ATOM_DATA *orig_inp_data, int bCheckMetalValence, INCHI_MODE *bTautFlagsDone );
|
276
276
|
int bHasMetalAtom( ORIG_ATOM_DATA *orig_inp_data );
|
277
|
-
int
|
277
|
+
int FixAdjacentRadicals( int num_inp_atoms, inp_ATOM *at ); /* FIX_ADJ_RAD == 1 */
|
278
|
+
int fix_odd_things( int num_atoms, inp_ATOM *at, int bFixBug );
|
278
279
|
int post_fix_odd_things( int num_atoms, inp_ATOM *at );
|
279
280
|
int remove_ion_pairs( int num_atoms, inp_ATOM *at );
|
280
281
|
|
@@ -288,6 +289,8 @@ void FreeInpAtomData( INP_ATOM_DATA *inp_at_data );
|
|
288
289
|
void FreeCompAtomData( COMP_ATOM_DATA *inp_at_data );
|
289
290
|
void FreeInfoAtomData( INF_ATOM_DATA *inf_at_data );
|
290
291
|
|
292
|
+
int FixUnkn0DStereoBonds(inp_ATOM *at, int num_at);
|
293
|
+
|
291
294
|
inf_ATOM *CreateInfAtom( int num_atoms );
|
292
295
|
inp_ATOM *CreateInpAtom( int num_atoms );
|
293
296
|
|
@@ -0,0 +1,912 @@
|
|
1
|
+
/* ----------------------------------------------------------------------------
|
2
|
+
* This file was automatically generated by SWIG (http://www.swig.org).
|
3
|
+
* Version 1.3.24
|
4
|
+
*
|
5
|
+
* This file is not intended to be easily readable and contains a number of
|
6
|
+
* coding conventions designed to improve portability and efficiency. Do not make
|
7
|
+
* changes to this file unless you know what you are doing--modify the SWIG
|
8
|
+
* interface file instead.
|
9
|
+
* ----------------------------------------------------------------------------- */
|
10
|
+
|
11
|
+
|
12
|
+
#ifndef SWIG_TEMPLATE_DISAMBIGUATOR
|
13
|
+
# if defined(__SUNPRO_CC)
|
14
|
+
# define SWIG_TEMPLATE_DISAMBIGUATOR template
|
15
|
+
# else
|
16
|
+
# define SWIG_TEMPLATE_DISAMBIGUATOR
|
17
|
+
# endif
|
18
|
+
#endif
|
19
|
+
|
20
|
+
/* ruby.swg */
|
21
|
+
/* Implementation : RUBY */
|
22
|
+
#define SWIGRUBY 1
|
23
|
+
|
24
|
+
#include "ruby.h"
|
25
|
+
|
26
|
+
/* Flags for pointer conversion */
|
27
|
+
#define SWIG_POINTER_EXCEPTION 0x1
|
28
|
+
#define SWIG_POINTER_DISOWN 0x2
|
29
|
+
|
30
|
+
#define NUM2USHRT(n) (\
|
31
|
+
(0 <= NUM2UINT(n) && NUM2UINT(n) <= USHRT_MAX)\
|
32
|
+
? (unsigned short) NUM2UINT(n) \
|
33
|
+
: (rb_raise(rb_eArgError, "integer %d out of range of `unsigned short'",\
|
34
|
+
NUM2UINT(n)), (short)0)\
|
35
|
+
)
|
36
|
+
|
37
|
+
#define NUM2SHRT(n) (\
|
38
|
+
(SHRT_MIN <= NUM2INT(n) && NUM2INT(n) <= SHRT_MAX)\
|
39
|
+
? (short)NUM2INT(n)\
|
40
|
+
: (rb_raise(rb_eArgError, "integer %d out of range of `short'",\
|
41
|
+
NUM2INT(n)), (short)0)\
|
42
|
+
)
|
43
|
+
|
44
|
+
/* Ruby 1.7 defines NUM2LL(), LL2NUM() and ULL2NUM() macros */
|
45
|
+
#ifndef NUM2LL
|
46
|
+
#define NUM2LL(x) NUM2LONG((x))
|
47
|
+
#endif
|
48
|
+
#ifndef LL2NUM
|
49
|
+
#define LL2NUM(x) INT2NUM((long) (x))
|
50
|
+
#endif
|
51
|
+
#ifndef ULL2NUM
|
52
|
+
#define ULL2NUM(x) UINT2NUM((unsigned long) (x))
|
53
|
+
#endif
|
54
|
+
|
55
|
+
/* Ruby 1.7 doesn't (yet) define NUM2ULL() */
|
56
|
+
#ifndef NUM2ULL
|
57
|
+
#ifdef HAVE_LONG_LONG
|
58
|
+
#define NUM2ULL(x) rb_num2ull((x))
|
59
|
+
#else
|
60
|
+
#define NUM2ULL(x) NUM2ULONG(x)
|
61
|
+
#endif
|
62
|
+
#endif
|
63
|
+
|
64
|
+
/*
|
65
|
+
* Need to be very careful about how these macros are defined, especially
|
66
|
+
* when compiling C++ code or C code with an ANSI C compiler.
|
67
|
+
*
|
68
|
+
* VALUEFUNC(f) is a macro used to typecast a C function that implements
|
69
|
+
* a Ruby method so that it can be passed as an argument to API functions
|
70
|
+
* like rb_define_method() and rb_define_singleton_method().
|
71
|
+
*
|
72
|
+
* VOIDFUNC(f) is a macro used to typecast a C function that implements
|
73
|
+
* either the "mark" or "free" stuff for a Ruby Data object, so that it
|
74
|
+
* can be passed as an argument to API functions like Data_Wrap_Struct()
|
75
|
+
* and Data_Make_Struct().
|
76
|
+
*/
|
77
|
+
|
78
|
+
#ifdef __cplusplus
|
79
|
+
# ifndef RUBY_METHOD_FUNC /* These definitions should work for Ruby 1.4.6 */
|
80
|
+
# define PROTECTFUNC(f) ((VALUE (*)()) f)
|
81
|
+
# define VALUEFUNC(f) ((VALUE (*)()) f)
|
82
|
+
# define VOIDFUNC(f) ((void (*)()) f)
|
83
|
+
# else
|
84
|
+
# ifndef ANYARGS /* These definitions should work for Ruby 1.6 */
|
85
|
+
# define PROTECTFUNC(f) ((VALUE (*)()) f)
|
86
|
+
# define VALUEFUNC(f) ((VALUE (*)()) f)
|
87
|
+
# define VOIDFUNC(f) ((RUBY_DATA_FUNC) f)
|
88
|
+
# else /* These definitions should work for Ruby 1.7+ */
|
89
|
+
# define PROTECTFUNC(f) ((VALUE (*)(VALUE)) f)
|
90
|
+
# define VALUEFUNC(f) ((VALUE (*)(ANYARGS)) f)
|
91
|
+
# define VOIDFUNC(f) ((RUBY_DATA_FUNC) f)
|
92
|
+
# endif
|
93
|
+
# endif
|
94
|
+
#else
|
95
|
+
# define VALUEFUNC(f) (f)
|
96
|
+
# define VOIDFUNC(f) (f)
|
97
|
+
#endif
|
98
|
+
|
99
|
+
typedef struct {
|
100
|
+
VALUE klass;
|
101
|
+
VALUE mImpl;
|
102
|
+
void (*mark)(void *);
|
103
|
+
void (*destroy)(void *);
|
104
|
+
} swig_class;
|
105
|
+
|
106
|
+
/* Don't use for expressions have side effect */
|
107
|
+
#ifndef RB_STRING_VALUE
|
108
|
+
#define RB_STRING_VALUE(s) (TYPE(s) == T_STRING ? (s) : (*(volatile VALUE *)&(s) = rb_str_to_str(s)))
|
109
|
+
#endif
|
110
|
+
#ifndef StringValue
|
111
|
+
#define StringValue(s) RB_STRING_VALUE(s)
|
112
|
+
#endif
|
113
|
+
#ifndef StringValuePtr
|
114
|
+
#define StringValuePtr(s) RSTRING(RB_STRING_VALUE(s))->ptr
|
115
|
+
#endif
|
116
|
+
#ifndef StringValueLen
|
117
|
+
#define StringValueLen(s) RSTRING(RB_STRING_VALUE(s))->len
|
118
|
+
#endif
|
119
|
+
#ifndef SafeStringValue
|
120
|
+
#define SafeStringValue(v) do {\
|
121
|
+
StringValue(v);\
|
122
|
+
rb_check_safe_str(v);\
|
123
|
+
} while (0)
|
124
|
+
#endif
|
125
|
+
|
126
|
+
#ifndef HAVE_RB_DEFINE_ALLOC_FUNC
|
127
|
+
#define rb_define_alloc_func(klass, func) rb_define_singleton_method((klass), "new", VALUEFUNC((func)), -1)
|
128
|
+
#define rb_undef_alloc_func(klass) rb_undef_method(CLASS_OF((klass)), "new")
|
129
|
+
#endif
|
130
|
+
|
131
|
+
/* Contract support */
|
132
|
+
|
133
|
+
#define SWIG_contract_assert(expr, msg) if (!(expr)) { rb_raise(rb_eRuntimeError, (char *) msg ); } else
|
134
|
+
|
135
|
+
|
136
|
+
/***********************************************************************
|
137
|
+
* swigrun.swg
|
138
|
+
*
|
139
|
+
* This file contains generic CAPI SWIG runtime support for pointer
|
140
|
+
* type checking.
|
141
|
+
*
|
142
|
+
************************************************************************/
|
143
|
+
|
144
|
+
/* This should only be incremented when either the layout of swig_type_info changes,
|
145
|
+
or for whatever reason, the runtime changes incompatibly */
|
146
|
+
#define SWIG_RUNTIME_VERSION "1"
|
147
|
+
|
148
|
+
/* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */
|
149
|
+
#ifdef SWIG_TYPE_TABLE
|
150
|
+
#define SWIG_QUOTE_STRING(x) #x
|
151
|
+
#define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x)
|
152
|
+
#define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE)
|
153
|
+
#else
|
154
|
+
#define SWIG_TYPE_TABLE_NAME
|
155
|
+
#endif
|
156
|
+
|
157
|
+
#include <string.h>
|
158
|
+
|
159
|
+
#ifndef SWIGINLINE
|
160
|
+
#if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__))
|
161
|
+
# define SWIGINLINE inline
|
162
|
+
#else
|
163
|
+
# define SWIGINLINE
|
164
|
+
#endif
|
165
|
+
#endif
|
166
|
+
|
167
|
+
/*
|
168
|
+
You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for
|
169
|
+
creating a static or dynamic library from the swig runtime code.
|
170
|
+
In 99.9% of the cases, swig just needs to declare them as 'static'.
|
171
|
+
|
172
|
+
But only do this if is strictly necessary, ie, if you have problems
|
173
|
+
with your compiler or so.
|
174
|
+
*/
|
175
|
+
#ifndef SWIGRUNTIME
|
176
|
+
#define SWIGRUNTIME static
|
177
|
+
#endif
|
178
|
+
#ifndef SWIGRUNTIMEINLINE
|
179
|
+
#define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE
|
180
|
+
#endif
|
181
|
+
|
182
|
+
#ifdef __cplusplus
|
183
|
+
extern "C" {
|
184
|
+
#endif
|
185
|
+
|
186
|
+
typedef void *(*swig_converter_func)(void *);
|
187
|
+
typedef struct swig_type_info *(*swig_dycast_func)(void **);
|
188
|
+
|
189
|
+
typedef struct swig_type_info {
|
190
|
+
const char *name;
|
191
|
+
swig_converter_func converter;
|
192
|
+
const char *str;
|
193
|
+
void *clientdata;
|
194
|
+
swig_dycast_func dcast;
|
195
|
+
struct swig_type_info *next;
|
196
|
+
struct swig_type_info *prev;
|
197
|
+
} swig_type_info;
|
198
|
+
|
199
|
+
/*
|
200
|
+
Compare two type names skipping the space characters, therefore
|
201
|
+
"char*" == "char *" and "Class<int>" == "Class<int >", etc.
|
202
|
+
|
203
|
+
Return 0 when the two name types are equivalent, as in
|
204
|
+
strncmp, but skipping ' '.
|
205
|
+
*/
|
206
|
+
SWIGRUNTIME int
|
207
|
+
SWIG_TypeNameComp(const char *f1, const char *l1,
|
208
|
+
const char *f2, const char *l2) {
|
209
|
+
for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) {
|
210
|
+
while ((*f1 == ' ') && (f1 != l1)) ++f1;
|
211
|
+
while ((*f2 == ' ') && (f2 != l2)) ++f2;
|
212
|
+
if (*f1 != *f2) return *f1 - *f2;
|
213
|
+
}
|
214
|
+
return (l1 - f1) - (l2 - f2);
|
215
|
+
}
|
216
|
+
|
217
|
+
/*
|
218
|
+
Check type equivalence in a name list like <name1>|<name2>|...
|
219
|
+
*/
|
220
|
+
SWIGRUNTIME int
|
221
|
+
SWIG_TypeEquiv(const char *nb, const char *tb) {
|
222
|
+
int equiv = 0;
|
223
|
+
const char* te = tb + strlen(tb);
|
224
|
+
const char* ne = nb;
|
225
|
+
while (!equiv && *ne) {
|
226
|
+
for (nb = ne; *ne; ++ne) {
|
227
|
+
if (*ne == '|') break;
|
228
|
+
}
|
229
|
+
equiv = SWIG_TypeNameComp(nb, ne, tb, te) == 0;
|
230
|
+
if (*ne) ++ne;
|
231
|
+
}
|
232
|
+
return equiv;
|
233
|
+
}
|
234
|
+
|
235
|
+
/*
|
236
|
+
Register a type mapping with the type-checking
|
237
|
+
*/
|
238
|
+
SWIGRUNTIME swig_type_info *
|
239
|
+
SWIG_TypeRegisterTL(swig_type_info **tl, swig_type_info *ti) {
|
240
|
+
swig_type_info *tc, *head, *ret, *next;
|
241
|
+
/* Check to see if this type has already been registered */
|
242
|
+
tc = *tl;
|
243
|
+
while (tc) {
|
244
|
+
/* check simple type equivalence */
|
245
|
+
int typeequiv = (strcmp(tc->name, ti->name) == 0);
|
246
|
+
/* check full type equivalence, resolving typedefs */
|
247
|
+
if (!typeequiv) {
|
248
|
+
/* only if tc is not a typedef (no '|' on it) */
|
249
|
+
if (tc->str && ti->str && !strstr(tc->str,"|")) {
|
250
|
+
typeequiv = SWIG_TypeEquiv(ti->str,tc->str);
|
251
|
+
}
|
252
|
+
}
|
253
|
+
if (typeequiv) {
|
254
|
+
/* Already exists in the table. Just add additional types to the list */
|
255
|
+
if (ti->clientdata) tc->clientdata = ti->clientdata;
|
256
|
+
head = tc;
|
257
|
+
next = tc->next;
|
258
|
+
goto l1;
|
259
|
+
}
|
260
|
+
tc = tc->prev;
|
261
|
+
}
|
262
|
+
head = ti;
|
263
|
+
next = 0;
|
264
|
+
|
265
|
+
/* Place in list */
|
266
|
+
ti->prev = *tl;
|
267
|
+
*tl = ti;
|
268
|
+
|
269
|
+
/* Build linked lists */
|
270
|
+
l1:
|
271
|
+
ret = head;
|
272
|
+
tc = ti + 1;
|
273
|
+
/* Patch up the rest of the links */
|
274
|
+
while (tc->name) {
|
275
|
+
head->next = tc;
|
276
|
+
tc->prev = head;
|
277
|
+
head = tc;
|
278
|
+
tc++;
|
279
|
+
}
|
280
|
+
if (next) next->prev = head;
|
281
|
+
head->next = next;
|
282
|
+
|
283
|
+
return ret;
|
284
|
+
}
|
285
|
+
|
286
|
+
/*
|
287
|
+
Check the typename
|
288
|
+
*/
|
289
|
+
SWIGRUNTIME swig_type_info *
|
290
|
+
SWIG_TypeCheck(const char *c, swig_type_info *ty) {
|
291
|
+
swig_type_info *s;
|
292
|
+
if (!ty) return 0; /* Void pointer */
|
293
|
+
s = ty->next; /* First element always just a name */
|
294
|
+
do {
|
295
|
+
if (strcmp(s->name,c) == 0) {
|
296
|
+
if (s == ty->next) return s;
|
297
|
+
/* Move s to the top of the linked list */
|
298
|
+
s->prev->next = s->next;
|
299
|
+
if (s->next) {
|
300
|
+
s->next->prev = s->prev;
|
301
|
+
}
|
302
|
+
/* Insert s as second element in the list */
|
303
|
+
s->next = ty->next;
|
304
|
+
if (ty->next) ty->next->prev = s;
|
305
|
+
ty->next = s;
|
306
|
+
s->prev = ty;
|
307
|
+
return s;
|
308
|
+
}
|
309
|
+
s = s->next;
|
310
|
+
} while (s && (s != ty->next));
|
311
|
+
return 0;
|
312
|
+
}
|
313
|
+
|
314
|
+
/*
|
315
|
+
Cast a pointer up an inheritance hierarchy
|
316
|
+
*/
|
317
|
+
SWIGRUNTIMEINLINE void *
|
318
|
+
SWIG_TypeCast(swig_type_info *ty, void *ptr) {
|
319
|
+
return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr);
|
320
|
+
}
|
321
|
+
|
322
|
+
/*
|
323
|
+
Dynamic pointer casting. Down an inheritance hierarchy
|
324
|
+
*/
|
325
|
+
SWIGRUNTIME swig_type_info *
|
326
|
+
SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) {
|
327
|
+
swig_type_info *lastty = ty;
|
328
|
+
if (!ty || !ty->dcast) return ty;
|
329
|
+
while (ty && (ty->dcast)) {
|
330
|
+
ty = (*ty->dcast)(ptr);
|
331
|
+
if (ty) lastty = ty;
|
332
|
+
}
|
333
|
+
return lastty;
|
334
|
+
}
|
335
|
+
|
336
|
+
/*
|
337
|
+
Return the name associated with this type
|
338
|
+
*/
|
339
|
+
SWIGRUNTIMEINLINE const char *
|
340
|
+
SWIG_TypeName(const swig_type_info *ty) {
|
341
|
+
return ty->name;
|
342
|
+
}
|
343
|
+
|
344
|
+
/*
|
345
|
+
Return the pretty name associated with this type,
|
346
|
+
that is an unmangled type name in a form presentable to the user.
|
347
|
+
*/
|
348
|
+
SWIGRUNTIME const char *
|
349
|
+
SWIG_TypePrettyName(const swig_type_info *type) {
|
350
|
+
/* The "str" field contains the equivalent pretty names of the
|
351
|
+
type, separated by vertical-bar characters. We choose
|
352
|
+
to print the last name, as it is often (?) the most
|
353
|
+
specific. */
|
354
|
+
if (type->str != NULL) {
|
355
|
+
const char *last_name = type->str;
|
356
|
+
const char *s;
|
357
|
+
for (s = type->str; *s; s++)
|
358
|
+
if (*s == '|') last_name = s+1;
|
359
|
+
return last_name;
|
360
|
+
}
|
361
|
+
else
|
362
|
+
return type->name;
|
363
|
+
}
|
364
|
+
|
365
|
+
/*
|
366
|
+
Search for a swig_type_info structure
|
367
|
+
*/
|
368
|
+
SWIGRUNTIME swig_type_info *
|
369
|
+
SWIG_TypeQueryTL(swig_type_info *tl, const char *name) {
|
370
|
+
swig_type_info *ty = tl;
|
371
|
+
while (ty) {
|
372
|
+
if (ty->str && (SWIG_TypeEquiv(ty->str,name))) return ty;
|
373
|
+
if (ty->name && (strcmp(name,ty->name) == 0)) return ty;
|
374
|
+
ty = ty->prev;
|
375
|
+
}
|
376
|
+
return 0;
|
377
|
+
}
|
378
|
+
|
379
|
+
/*
|
380
|
+
Set the clientdata field for a type
|
381
|
+
*/
|
382
|
+
SWIGRUNTIME void
|
383
|
+
SWIG_TypeClientDataTL(swig_type_info *tl, swig_type_info *ti, void *clientdata) {
|
384
|
+
swig_type_info *tc, *equiv;
|
385
|
+
if (ti->clientdata) return;
|
386
|
+
/* if (ti->clientdata == clientdata) return; */
|
387
|
+
ti->clientdata = clientdata;
|
388
|
+
equiv = ti->next;
|
389
|
+
while (equiv) {
|
390
|
+
if (!equiv->converter) {
|
391
|
+
tc = tl;
|
392
|
+
while (tc) {
|
393
|
+
if ((strcmp(tc->name, equiv->name) == 0))
|
394
|
+
SWIG_TypeClientDataTL(tl,tc,clientdata);
|
395
|
+
tc = tc->prev;
|
396
|
+
}
|
397
|
+
}
|
398
|
+
equiv = equiv->next;
|
399
|
+
}
|
400
|
+
}
|
401
|
+
|
402
|
+
/*
|
403
|
+
Pack binary data into a string
|
404
|
+
*/
|
405
|
+
SWIGRUNTIME char *
|
406
|
+
SWIG_PackData(char *c, void *ptr, size_t sz) {
|
407
|
+
static char hex[17] = "0123456789abcdef";
|
408
|
+
unsigned char *u = (unsigned char *) ptr;
|
409
|
+
const unsigned char *eu = u + sz;
|
410
|
+
register unsigned char uu;
|
411
|
+
for (; u != eu; ++u) {
|
412
|
+
uu = *u;
|
413
|
+
*(c++) = hex[(uu & 0xf0) >> 4];
|
414
|
+
*(c++) = hex[uu & 0xf];
|
415
|
+
}
|
416
|
+
return c;
|
417
|
+
}
|
418
|
+
|
419
|
+
/*
|
420
|
+
Unpack binary data from a string
|
421
|
+
*/
|
422
|
+
SWIGRUNTIME const char *
|
423
|
+
SWIG_UnpackData(const char *c, void *ptr, size_t sz) {
|
424
|
+
register unsigned char *u = (unsigned char *) ptr;
|
425
|
+
register const unsigned char *eu = u + sz;
|
426
|
+
for (; u != eu; ++u) {
|
427
|
+
register int d = *(c++);
|
428
|
+
register unsigned char uu = 0;
|
429
|
+
if ((d >= '0') && (d <= '9'))
|
430
|
+
uu = ((d - '0') << 4);
|
431
|
+
else if ((d >= 'a') && (d <= 'f'))
|
432
|
+
uu = ((d - ('a'-10)) << 4);
|
433
|
+
else
|
434
|
+
return (char *) 0;
|
435
|
+
d = *(c++);
|
436
|
+
if ((d >= '0') && (d <= '9'))
|
437
|
+
uu |= (d - '0');
|
438
|
+
else if ((d >= 'a') && (d <= 'f'))
|
439
|
+
uu |= (d - ('a'-10));
|
440
|
+
else
|
441
|
+
return (char *) 0;
|
442
|
+
*u = uu;
|
443
|
+
}
|
444
|
+
return c;
|
445
|
+
}
|
446
|
+
|
447
|
+
/*
|
448
|
+
This function will propagate the clientdata field of type to any new
|
449
|
+
swig_type_info structures that have been added into the list of
|
450
|
+
equivalent types. It is like calling SWIG_TypeClientData(type,
|
451
|
+
clientdata) a second time.
|
452
|
+
*/
|
453
|
+
SWIGRUNTIME void
|
454
|
+
SWIG_PropagateClientDataTL(swig_type_info *tl, swig_type_info *type) {
|
455
|
+
swig_type_info *equiv = type->next;
|
456
|
+
swig_type_info *tc;
|
457
|
+
if (!type->clientdata) return;
|
458
|
+
while (equiv) {
|
459
|
+
if (!equiv->converter) {
|
460
|
+
tc = tl;
|
461
|
+
while (tc) {
|
462
|
+
if ((strcmp(tc->name, equiv->name) == 0) && !tc->clientdata)
|
463
|
+
SWIG_TypeClientDataTL(tl,tc, type->clientdata);
|
464
|
+
tc = tc->prev;
|
465
|
+
}
|
466
|
+
}
|
467
|
+
equiv = equiv->next;
|
468
|
+
}
|
469
|
+
}
|
470
|
+
|
471
|
+
/*
|
472
|
+
Pack 'void *' into a string buffer.
|
473
|
+
*/
|
474
|
+
SWIGRUNTIME char *
|
475
|
+
SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) {
|
476
|
+
char *r = buff;
|
477
|
+
if ((2*sizeof(void *) + 2) > bsz) return 0;
|
478
|
+
*(r++) = '_';
|
479
|
+
r = SWIG_PackData(r,&ptr,sizeof(void *));
|
480
|
+
if (strlen(name) + 1 > (bsz - (r - buff))) return 0;
|
481
|
+
strcpy(r,name);
|
482
|
+
return buff;
|
483
|
+
}
|
484
|
+
|
485
|
+
SWIGRUNTIME const char *
|
486
|
+
SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) {
|
487
|
+
if (*c != '_') {
|
488
|
+
if (strcmp(c,"NULL") == 0) {
|
489
|
+
*ptr = (void *) 0;
|
490
|
+
return name;
|
491
|
+
} else {
|
492
|
+
return 0;
|
493
|
+
}
|
494
|
+
}
|
495
|
+
return SWIG_UnpackData(++c,ptr,sizeof(void *));
|
496
|
+
}
|
497
|
+
|
498
|
+
SWIGRUNTIME char *
|
499
|
+
SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) {
|
500
|
+
char *r = buff;
|
501
|
+
size_t lname = (name ? strlen(name) : 0);
|
502
|
+
if ((2*sz + 2 + lname) > bsz) return 0;
|
503
|
+
*(r++) = '_';
|
504
|
+
r = SWIG_PackData(r,ptr,sz);
|
505
|
+
if (lname) {
|
506
|
+
strncpy(r,name,lname+1);
|
507
|
+
} else {
|
508
|
+
*r = 0;
|
509
|
+
}
|
510
|
+
return buff;
|
511
|
+
}
|
512
|
+
|
513
|
+
SWIGRUNTIME const char *
|
514
|
+
SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) {
|
515
|
+
if (*c != '_') {
|
516
|
+
if (strcmp(c,"NULL") == 0) {
|
517
|
+
memset(ptr,0,sz);
|
518
|
+
return name;
|
519
|
+
} else {
|
520
|
+
return 0;
|
521
|
+
}
|
522
|
+
}
|
523
|
+
return SWIG_UnpackData(++c,ptr,sz);
|
524
|
+
}
|
525
|
+
|
526
|
+
#ifdef __cplusplus
|
527
|
+
}
|
528
|
+
#endif
|
529
|
+
|
530
|
+
/***********************************************************************
|
531
|
+
* common.swg
|
532
|
+
*
|
533
|
+
* This file contains generic SWIG runtime support for pointer
|
534
|
+
* type checking as well as a few commonly used macros to control
|
535
|
+
* external linkage.
|
536
|
+
*
|
537
|
+
* Author : David Beazley (beazley@cs.uchicago.edu)
|
538
|
+
*
|
539
|
+
* Copyright (c) 1999-2000, The University of Chicago
|
540
|
+
*
|
541
|
+
* This file may be freely redistributed without license or fee provided
|
542
|
+
* this copyright message remains intact.
|
543
|
+
************************************************************************/
|
544
|
+
|
545
|
+
|
546
|
+
#if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
|
547
|
+
# if !defined(STATIC_LINKED)
|
548
|
+
# define SWIGEXPORT(a) __declspec(dllexport) a
|
549
|
+
# else
|
550
|
+
# define SWIGEXPORT(a) a
|
551
|
+
# endif
|
552
|
+
#else
|
553
|
+
# define SWIGEXPORT(a) a
|
554
|
+
#endif
|
555
|
+
|
556
|
+
#ifdef __cplusplus
|
557
|
+
extern "C" {
|
558
|
+
#endif
|
559
|
+
|
560
|
+
|
561
|
+
/*************************************************************************/
|
562
|
+
|
563
|
+
|
564
|
+
/* The static type info list */
|
565
|
+
|
566
|
+
static swig_type_info *swig_type_list = 0;
|
567
|
+
static swig_type_info **swig_type_list_handle = &swig_type_list;
|
568
|
+
|
569
|
+
|
570
|
+
/* Register a type mapping with the type-checking */
|
571
|
+
static swig_type_info *
|
572
|
+
SWIG_TypeRegister(swig_type_info *ti) {
|
573
|
+
return SWIG_TypeRegisterTL(swig_type_list_handle, ti);
|
574
|
+
}
|
575
|
+
|
576
|
+
/* Search for a swig_type_info structure */
|
577
|
+
static swig_type_info *
|
578
|
+
SWIG_TypeQuery(const char *name) {
|
579
|
+
return SWIG_TypeQueryTL(*swig_type_list_handle, name);
|
580
|
+
}
|
581
|
+
|
582
|
+
/* Set the clientdata field for a type */
|
583
|
+
static void
|
584
|
+
SWIG_TypeClientData(swig_type_info *ti, void *clientdata) {
|
585
|
+
SWIG_TypeClientDataTL(*swig_type_list_handle, ti, clientdata);
|
586
|
+
}
|
587
|
+
|
588
|
+
/* This function will propagate the clientdata field of type to
|
589
|
+
* any new swig_type_info structures that have been added into the list
|
590
|
+
* of equivalent types. It is like calling
|
591
|
+
* SWIG_TypeClientData(type, clientdata) a second time.
|
592
|
+
*/
|
593
|
+
static void
|
594
|
+
SWIG_PropagateClientData(swig_type_info *type) {
|
595
|
+
SWIG_PropagateClientDataTL(*swig_type_list_handle, type);
|
596
|
+
}
|
597
|
+
|
598
|
+
#ifdef __cplusplus
|
599
|
+
}
|
600
|
+
#endif
|
601
|
+
|
602
|
+
/* Common SWIG API */
|
603
|
+
#define SWIG_ConvertPtr(obj, pp, type, flags) \
|
604
|
+
SWIG_Ruby_ConvertPtr(obj, pp, type, flags)
|
605
|
+
#define SWIG_NewPointerObj(p, type, flags) \
|
606
|
+
SWIG_Ruby_NewPointerObj(p, type, flags)
|
607
|
+
#define SWIG_MustGetPtr(p, type, argnum, flags) \
|
608
|
+
SWIG_Ruby_MustGetPtr(p, type, argnum, flags)
|
609
|
+
|
610
|
+
/* Ruby-specific SWIG API */
|
611
|
+
|
612
|
+
#define SWIG_InitRuntime() \
|
613
|
+
SWIG_Ruby_InitRuntime()
|
614
|
+
#define SWIG_define_class(ty) \
|
615
|
+
SWIG_Ruby_define_class(ty)
|
616
|
+
#define SWIG_NewClassInstance(value, ty) \
|
617
|
+
SWIG_Ruby_NewClassInstance(value, ty)
|
618
|
+
#define SWIG_MangleStr(value) \
|
619
|
+
SWIG_Ruby_MangleStr(value)
|
620
|
+
#define SWIG_CheckConvert(value, ty) \
|
621
|
+
SWIG_Ruby_CheckConvert(value, ty)
|
622
|
+
#define SWIG_NewPackedObj(ptr, sz, ty) \
|
623
|
+
SWIG_Ruby_NewPackedObj(ptr, sz, ty)
|
624
|
+
#define SWIG_ConvertPacked(obj, ptr, sz, ty, flags) \
|
625
|
+
SWIG_Ruby_ConvertPacked(obj, ptr, sz, ty, flags)
|
626
|
+
|
627
|
+
/* rubydef.swg */
|
628
|
+
#ifdef __cplusplus
|
629
|
+
extern "C" {
|
630
|
+
#endif
|
631
|
+
|
632
|
+
static VALUE _mSWIG = Qnil;
|
633
|
+
static VALUE _cSWIG_Pointer = Qnil;
|
634
|
+
static VALUE swig_runtime_data_type_pointer = Qnil;
|
635
|
+
|
636
|
+
/* Initialize Ruby runtime support */
|
637
|
+
static void
|
638
|
+
SWIG_Ruby_InitRuntime(void)
|
639
|
+
{
|
640
|
+
VALUE pointer;
|
641
|
+
|
642
|
+
if (_mSWIG == Qnil) {
|
643
|
+
_mSWIG = rb_define_module("SWIG");
|
644
|
+
}
|
645
|
+
|
646
|
+
/* first check if pointer already created */
|
647
|
+
pointer = rb_gv_get("$swig_runtime_data_type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME);
|
648
|
+
if (pointer != Qnil) {
|
649
|
+
Data_Get_Struct(pointer, swig_type_info *, swig_type_list_handle);
|
650
|
+
} else {
|
651
|
+
/* register a new class */
|
652
|
+
VALUE cl = rb_define_class("swig_runtime_data", rb_cObject);
|
653
|
+
/* create and store the structure pointer to a global variable */
|
654
|
+
swig_runtime_data_type_pointer = Data_Wrap_Struct(cl, 0, 0, swig_type_list_handle);
|
655
|
+
rb_define_readonly_variable("$swig_runtime_data_type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME, &swig_runtime_data_type_pointer);
|
656
|
+
}
|
657
|
+
}
|
658
|
+
|
659
|
+
/* Define Ruby class for C type */
|
660
|
+
static void
|
661
|
+
SWIG_Ruby_define_class(swig_type_info *type)
|
662
|
+
{
|
663
|
+
VALUE klass;
|
664
|
+
char *klass_name = (char *) malloc(4 + strlen(type->name) + 1);
|
665
|
+
sprintf(klass_name, "TYPE%s", type->name);
|
666
|
+
if (NIL_P(_cSWIG_Pointer)) {
|
667
|
+
_cSWIG_Pointer = rb_define_class_under(_mSWIG, "Pointer", rb_cObject);
|
668
|
+
rb_undef_method(CLASS_OF(_cSWIG_Pointer), "new");
|
669
|
+
}
|
670
|
+
klass = rb_define_class_under(_mSWIG, klass_name, _cSWIG_Pointer);
|
671
|
+
free((void *) klass_name);
|
672
|
+
}
|
673
|
+
|
674
|
+
/* Create a new pointer object */
|
675
|
+
static VALUE
|
676
|
+
SWIG_Ruby_NewPointerObj(void *ptr, swig_type_info *type, int own)
|
677
|
+
{
|
678
|
+
char *klass_name;
|
679
|
+
swig_class *sklass;
|
680
|
+
VALUE klass;
|
681
|
+
VALUE obj;
|
682
|
+
|
683
|
+
if (!ptr)
|
684
|
+
return Qnil;
|
685
|
+
|
686
|
+
if (type->clientdata) {
|
687
|
+
sklass = (swig_class *) type->clientdata;
|
688
|
+
obj = Data_Wrap_Struct(sklass->klass, VOIDFUNC(sklass->mark), (own ? VOIDFUNC(sklass->destroy) : 0), ptr);
|
689
|
+
} else {
|
690
|
+
klass_name = (char *) malloc(4 + strlen(type->name) + 1);
|
691
|
+
sprintf(klass_name, "TYPE%s", type->name);
|
692
|
+
klass = rb_const_get(_mSWIG, rb_intern(klass_name));
|
693
|
+
free((void *) klass_name);
|
694
|
+
obj = Data_Wrap_Struct(klass, 0, 0, ptr);
|
695
|
+
}
|
696
|
+
rb_iv_set(obj, "__swigtype__", rb_str_new2(type->name));
|
697
|
+
return obj;
|
698
|
+
}
|
699
|
+
|
700
|
+
/* Create a new class instance (always owned) */
|
701
|
+
static VALUE
|
702
|
+
SWIG_Ruby_NewClassInstance(VALUE klass, swig_type_info *type)
|
703
|
+
{
|
704
|
+
VALUE obj;
|
705
|
+
swig_class *sklass = (swig_class *) type->clientdata;
|
706
|
+
obj = Data_Wrap_Struct(klass, VOIDFUNC(sklass->mark), VOIDFUNC(sklass->destroy), 0);
|
707
|
+
rb_iv_set(obj, "__swigtype__", rb_str_new2(type->name));
|
708
|
+
return obj;
|
709
|
+
}
|
710
|
+
|
711
|
+
/* Get type mangle from class name */
|
712
|
+
static SWIGINLINE char *
|
713
|
+
SWIG_Ruby_MangleStr(VALUE obj)
|
714
|
+
{
|
715
|
+
VALUE stype = rb_iv_get(obj, "__swigtype__");
|
716
|
+
return StringValuePtr(stype);
|
717
|
+
}
|
718
|
+
|
719
|
+
/* Convert a pointer value */
|
720
|
+
static int
|
721
|
+
SWIG_Ruby_ConvertPtr(VALUE obj, void **ptr, swig_type_info *ty, int flags)
|
722
|
+
{
|
723
|
+
char *c;
|
724
|
+
swig_type_info *tc;
|
725
|
+
|
726
|
+
/* Grab the pointer */
|
727
|
+
if (NIL_P(obj)) {
|
728
|
+
*ptr = 0;
|
729
|
+
return 0;
|
730
|
+
} else {
|
731
|
+
Data_Get_Struct(obj, void, *ptr);
|
732
|
+
}
|
733
|
+
|
734
|
+
/* Do type-checking if type info was provided */
|
735
|
+
if (ty) {
|
736
|
+
if (ty->clientdata) {
|
737
|
+
if (rb_obj_is_kind_of(obj, ((swig_class *) (ty->clientdata))->klass)) {
|
738
|
+
if (*ptr == 0)
|
739
|
+
rb_raise(rb_eRuntimeError, "This %s already released", ty->str);
|
740
|
+
return 0;
|
741
|
+
}
|
742
|
+
}
|
743
|
+
if ((c = SWIG_MangleStr(obj)) == NULL) {
|
744
|
+
if (flags & SWIG_POINTER_EXCEPTION)
|
745
|
+
rb_raise(rb_eTypeError, "Expected %s", ty->str);
|
746
|
+
else
|
747
|
+
return -1;
|
748
|
+
}
|
749
|
+
tc = SWIG_TypeCheck(c, ty);
|
750
|
+
if (!tc) {
|
751
|
+
if (flags & SWIG_POINTER_EXCEPTION)
|
752
|
+
rb_raise(rb_eTypeError, "Expected %s", ty->str);
|
753
|
+
else
|
754
|
+
return -1;
|
755
|
+
}
|
756
|
+
*ptr = SWIG_TypeCast(tc, *ptr);
|
757
|
+
}
|
758
|
+
return 0;
|
759
|
+
}
|
760
|
+
|
761
|
+
/* Convert a pointer value, signal an exception on a type mismatch */
|
762
|
+
static SWIGINLINE void *
|
763
|
+
SWIG_Ruby_MustGetPtr(VALUE obj, swig_type_info *ty, int argnum, int flags)
|
764
|
+
{
|
765
|
+
void *result;
|
766
|
+
SWIG_ConvertPtr(obj, &result, ty, flags | SWIG_POINTER_EXCEPTION);
|
767
|
+
return result;
|
768
|
+
}
|
769
|
+
|
770
|
+
/* Check convert */
|
771
|
+
static SWIGINLINE int
|
772
|
+
SWIG_Ruby_CheckConvert(VALUE obj, swig_type_info *ty)
|
773
|
+
{
|
774
|
+
char *c = SWIG_MangleStr(obj);
|
775
|
+
if (!c)
|
776
|
+
return 0;
|
777
|
+
return SWIG_TypeCheck(c,ty) != 0;
|
778
|
+
}
|
779
|
+
|
780
|
+
static VALUE
|
781
|
+
SWIG_Ruby_NewPackedObj(void *ptr, int sz, swig_type_info *type) {
|
782
|
+
char result[1024];
|
783
|
+
char *r = result;
|
784
|
+
if ((2*sz + 1 + strlen(type->name)) > 1000) return 0;
|
785
|
+
*(r++) = '_';
|
786
|
+
r = SWIG_PackData(r, ptr, sz);
|
787
|
+
strcpy(r, type->name);
|
788
|
+
return rb_str_new2(result);
|
789
|
+
}
|
790
|
+
|
791
|
+
/* Convert a packed value value */
|
792
|
+
static void
|
793
|
+
SWIG_Ruby_ConvertPacked(VALUE obj, void *ptr, int sz, swig_type_info *ty, int flags) {
|
794
|
+
swig_type_info *tc;
|
795
|
+
const char *c;
|
796
|
+
|
797
|
+
if (TYPE(obj) != T_STRING) goto type_error;
|
798
|
+
c = StringValuePtr(obj);
|
799
|
+
/* Pointer values must start with leading underscore */
|
800
|
+
if (*c != '_') goto type_error;
|
801
|
+
c++;
|
802
|
+
c = SWIG_UnpackData(c, ptr, sz);
|
803
|
+
if (ty) {
|
804
|
+
tc = SWIG_TypeCheck(c, ty);
|
805
|
+
if (!tc) goto type_error;
|
806
|
+
}
|
807
|
+
return;
|
808
|
+
|
809
|
+
type_error:
|
810
|
+
|
811
|
+
if (flags) {
|
812
|
+
if (ty) {
|
813
|
+
rb_raise(rb_eTypeError, "Type error. Expected %s", ty->name);
|
814
|
+
} else {
|
815
|
+
rb_raise(rb_eTypeError, "Expected a pointer");
|
816
|
+
}
|
817
|
+
}
|
818
|
+
}
|
819
|
+
|
820
|
+
#ifdef __cplusplus
|
821
|
+
}
|
822
|
+
#endif
|
823
|
+
|
824
|
+
|
825
|
+
|
826
|
+
/* -------- TYPES TABLE (BEGIN) -------- */
|
827
|
+
|
828
|
+
#define SWIGTYPE_p_unsigned_long swig_types[0]
|
829
|
+
#define SWIGTYPE_p_p_char swig_types[1]
|
830
|
+
static swig_type_info *swig_types[3];
|
831
|
+
|
832
|
+
/* -------- TYPES TABLE (END) -------- */
|
833
|
+
|
834
|
+
#define SWIG_init Init_libinchi
|
835
|
+
#define SWIG_name "Libinchi"
|
836
|
+
|
837
|
+
static VALUE mLibinchi;
|
838
|
+
static VALUE mRino;
|
839
|
+
|
840
|
+
static void SWIG_AsVal(VALUE obj, int *val)
|
841
|
+
{
|
842
|
+
*val = (int) NUM2INT(obj);
|
843
|
+
}
|
844
|
+
|
845
|
+
int run(int,char **);
|
846
|
+
static VALUE
|
847
|
+
_wrap_run(int argc, VALUE *argv, VALUE self) {
|
848
|
+
int arg1 ;
|
849
|
+
char **arg2 = (char **) 0 ;
|
850
|
+
int result;
|
851
|
+
VALUE vresult = Qnil;
|
852
|
+
|
853
|
+
if ((argc < 1) || (argc > 1))
|
854
|
+
rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc);
|
855
|
+
{
|
856
|
+
/* Get the length of the array */
|
857
|
+
int size = RARRAY(argv[0])->len;
|
858
|
+
int i;
|
859
|
+
arg1 = (int) size;
|
860
|
+
arg2 = (char **) malloc((size+1)*sizeof(char *));
|
861
|
+
/* Get the first element in memory */
|
862
|
+
VALUE *ptr = RARRAY(argv[0])->ptr;
|
863
|
+
for (i=0; i < size; i++, ptr++)
|
864
|
+
/* Convert Ruby Object String to char* */
|
865
|
+
arg2[i]= STR2CSTR(*ptr);
|
866
|
+
arg2[i]=NULL; /* End of list */
|
867
|
+
}
|
868
|
+
result = (int)run(arg1,arg2);
|
869
|
+
|
870
|
+
vresult = INT2NUM(result);
|
871
|
+
{
|
872
|
+
free((char *) arg2);
|
873
|
+
}
|
874
|
+
return vresult;
|
875
|
+
}
|
876
|
+
|
877
|
+
|
878
|
+
|
879
|
+
/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
|
880
|
+
|
881
|
+
static swig_type_info _swigt__p_unsigned_long[] = {{"_p_unsigned_long", 0, "unsigned long *|VALUE *", 0, 0, 0, 0},{"_p_unsigned_long", 0, 0, 0, 0, 0, 0},{0, 0, 0, 0, 0, 0, 0}};
|
882
|
+
static swig_type_info _swigt__p_p_char[] = {{"_p_p_char", 0, "char **", 0, 0, 0, 0},{"_p_p_char", 0, 0, 0, 0, 0, 0},{0, 0, 0, 0, 0, 0, 0}};
|
883
|
+
|
884
|
+
static swig_type_info *swig_types_initial[] = {
|
885
|
+
_swigt__p_unsigned_long,
|
886
|
+
_swigt__p_p_char,
|
887
|
+
0
|
888
|
+
};
|
889
|
+
|
890
|
+
|
891
|
+
/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */
|
892
|
+
|
893
|
+
|
894
|
+
#ifdef __cplusplus
|
895
|
+
extern "C"
|
896
|
+
#endif
|
897
|
+
SWIGEXPORT(void) Init_libinchi(void) {
|
898
|
+
int i;
|
899
|
+
|
900
|
+
SWIG_InitRuntime();
|
901
|
+
|
902
|
+
mRino = rb_define_module("Rino");
|
903
|
+
mLibinchi = rb_define_module_under(mRino, "InChI");
|
904
|
+
|
905
|
+
for (i = 0; swig_types_initial[i]; i++) {
|
906
|
+
swig_types[i] = SWIG_TypeRegister(swig_types_initial[i]);
|
907
|
+
SWIG_define_class(swig_types[i]);
|
908
|
+
}
|
909
|
+
|
910
|
+
rb_define_module_function(mLibinchi, "run", _wrap_run, -1);
|
911
|
+
}
|
912
|
+
|