gsl 1.12.108

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. data/README.rdoc +29 -0
  2. data/Rakefile +54 -0
  3. data/VERSION +2 -0
  4. data/ext/MANIFEST +119 -0
  5. data/ext/alf.c +206 -0
  6. data/ext/array.c +666 -0
  7. data/ext/array_complex.c +247 -0
  8. data/ext/blas.c +29 -0
  9. data/ext/blas1.c +731 -0
  10. data/ext/blas2.c +1093 -0
  11. data/ext/blas3.c +881 -0
  12. data/ext/block.c +44 -0
  13. data/ext/block_source.c +886 -0
  14. data/ext/bspline.c +130 -0
  15. data/ext/bundle.c +3 -0
  16. data/ext/cdf.c +754 -0
  17. data/ext/cheb.c +542 -0
  18. data/ext/combination.c +283 -0
  19. data/ext/common.c +325 -0
  20. data/ext/complex.c +1004 -0
  21. data/ext/const.c +673 -0
  22. data/ext/const_additional.c +120 -0
  23. data/ext/cqp.c +283 -0
  24. data/ext/deriv.c +195 -0
  25. data/ext/dht.c +361 -0
  26. data/ext/diff.c +166 -0
  27. data/ext/dirac.c +395 -0
  28. data/ext/eigen.c +2373 -0
  29. data/ext/error.c +194 -0
  30. data/ext/extconf.rb +281 -0
  31. data/ext/fcmp.c +66 -0
  32. data/ext/fft.c +1092 -0
  33. data/ext/fit.c +205 -0
  34. data/ext/fresnel.c +312 -0
  35. data/ext/function.c +524 -0
  36. data/ext/geometry.c +139 -0
  37. data/ext/graph.c +1638 -0
  38. data/ext/gsl.c +271 -0
  39. data/ext/gsl_narray.c +653 -0
  40. data/ext/histogram.c +1995 -0
  41. data/ext/histogram2d.c +1068 -0
  42. data/ext/histogram3d.c +884 -0
  43. data/ext/histogram3d_source.c +750 -0
  44. data/ext/histogram_find.c +101 -0
  45. data/ext/histogram_oper.c +159 -0
  46. data/ext/ieee.c +98 -0
  47. data/ext/integration.c +1138 -0
  48. data/ext/interp.c +512 -0
  49. data/ext/jacobi.c +739 -0
  50. data/ext/linalg.c +4047 -0
  51. data/ext/linalg_complex.c +741 -0
  52. data/ext/math.c +725 -0
  53. data/ext/matrix.c +39 -0
  54. data/ext/matrix_complex.c +1732 -0
  55. data/ext/matrix_double.c +560 -0
  56. data/ext/matrix_int.c +256 -0
  57. data/ext/matrix_source.c +2733 -0
  58. data/ext/min.c +250 -0
  59. data/ext/monte.c +992 -0
  60. data/ext/multifit.c +1879 -0
  61. data/ext/multimin.c +808 -0
  62. data/ext/multimin_fsdf.c +156 -0
  63. data/ext/multiroots.c +955 -0
  64. data/ext/ndlinear.c +321 -0
  65. data/ext/nmf.c +167 -0
  66. data/ext/nmf_wrap.c +72 -0
  67. data/ext/ntuple.c +469 -0
  68. data/ext/odeiv.c +959 -0
  69. data/ext/ool.c +879 -0
  70. data/ext/oper_complex_source.c +253 -0
  71. data/ext/permutation.c +596 -0
  72. data/ext/poly.c +42 -0
  73. data/ext/poly2.c +265 -0
  74. data/ext/poly_source.c +1885 -0
  75. data/ext/qrng.c +171 -0
  76. data/ext/randist.c +1873 -0
  77. data/ext/rational.c +480 -0
  78. data/ext/rng.c +612 -0
  79. data/ext/root.c +408 -0
  80. data/ext/sf.c +1494 -0
  81. data/ext/sf_airy.c +200 -0
  82. data/ext/sf_bessel.c +867 -0
  83. data/ext/sf_clausen.c +28 -0
  84. data/ext/sf_coulomb.c +206 -0
  85. data/ext/sf_coupling.c +118 -0
  86. data/ext/sf_dawson.c +29 -0
  87. data/ext/sf_debye.c +157 -0
  88. data/ext/sf_dilog.c +42 -0
  89. data/ext/sf_elementary.c +44 -0
  90. data/ext/sf_ellint.c +206 -0
  91. data/ext/sf_elljac.c +29 -0
  92. data/ext/sf_erfc.c +93 -0
  93. data/ext/sf_exp.c +164 -0
  94. data/ext/sf_expint.c +211 -0
  95. data/ext/sf_fermi_dirac.c +148 -0
  96. data/ext/sf_gamma.c +344 -0
  97. data/ext/sf_gegenbauer.c +96 -0
  98. data/ext/sf_hyperg.c +197 -0
  99. data/ext/sf_laguerre.c +112 -0
  100. data/ext/sf_lambert.c +47 -0
  101. data/ext/sf_legendre.c +367 -0
  102. data/ext/sf_log.c +104 -0
  103. data/ext/sf_mathieu.c +238 -0
  104. data/ext/sf_power.c +46 -0
  105. data/ext/sf_psi.c +98 -0
  106. data/ext/sf_synchrotron.c +48 -0
  107. data/ext/sf_transport.c +76 -0
  108. data/ext/sf_trigonometric.c +207 -0
  109. data/ext/sf_zeta.c +119 -0
  110. data/ext/signal.c +310 -0
  111. data/ext/siman.c +718 -0
  112. data/ext/sort.c +208 -0
  113. data/ext/spline.c +395 -0
  114. data/ext/stats.c +799 -0
  115. data/ext/sum.c +168 -0
  116. data/ext/tamu_anova.c +56 -0
  117. data/ext/tensor.c +38 -0
  118. data/ext/tensor_source.c +1123 -0
  119. data/ext/vector.c +38 -0
  120. data/ext/vector_complex.c +2236 -0
  121. data/ext/vector_double.c +1433 -0
  122. data/ext/vector_int.c +204 -0
  123. data/ext/vector_source.c +3329 -0
  124. data/ext/wavelet.c +937 -0
  125. data/include/rb_gsl.h +151 -0
  126. data/include/rb_gsl_array.h +238 -0
  127. data/include/rb_gsl_cheb.h +21 -0
  128. data/include/rb_gsl_common.h +343 -0
  129. data/include/rb_gsl_complex.h +25 -0
  130. data/include/rb_gsl_const.h +29 -0
  131. data/include/rb_gsl_dirac.h +13 -0
  132. data/include/rb_gsl_eigen.h +17 -0
  133. data/include/rb_gsl_fft.h +62 -0
  134. data/include/rb_gsl_fit.h +25 -0
  135. data/include/rb_gsl_function.h +27 -0
  136. data/include/rb_gsl_graph.h +70 -0
  137. data/include/rb_gsl_histogram.h +63 -0
  138. data/include/rb_gsl_histogram3d.h +97 -0
  139. data/include/rb_gsl_integration.h +17 -0
  140. data/include/rb_gsl_interp.h +46 -0
  141. data/include/rb_gsl_linalg.h +25 -0
  142. data/include/rb_gsl_math.h +26 -0
  143. data/include/rb_gsl_odeiv.h +21 -0
  144. data/include/rb_gsl_poly.h +71 -0
  145. data/include/rb_gsl_rational.h +37 -0
  146. data/include/rb_gsl_rng.h +21 -0
  147. data/include/rb_gsl_root.h +22 -0
  148. data/include/rb_gsl_sf.h +119 -0
  149. data/include/rb_gsl_statistics.h +17 -0
  150. data/include/rb_gsl_tensor.h +45 -0
  151. data/include/rb_gsl_with_narray.h +22 -0
  152. data/include/templates_off.h +87 -0
  153. data/include/templates_on.h +241 -0
  154. data/lib/gsl/gnuplot.rb +41 -0
  155. data/lib/gsl/oper.rb +68 -0
  156. data/lib/ool.rb +22 -0
  157. data/lib/ool/conmin.rb +30 -0
  158. metadata +224 -0
@@ -0,0 +1,44 @@
1
+ /*
2
+ block.c
3
+ Ruby/GSL: Ruby extension library for GSL (GNU Scientific Library)
4
+ (C) Copyright 2001-2006 by Yoshiki Tsunesada
5
+
6
+ Ruby/GSL is free software: you can redistribute it and/or modify it
7
+ under the terms of the GNU General Public License.
8
+ This library is distributed in the hope that it will be useful, but
9
+ WITHOUT ANY WARRANTY.
10
+ */
11
+
12
+ /*
13
+ This code uses "templates_on.h" and "templates_off.h",
14
+ which are provided by the GSL source.
15
+ */
16
+
17
+ #include "rb_gsl_config.h"
18
+ #include "rb_gsl_array.h"
19
+ #include "rb_gsl_histogram.h"
20
+ #include "rb_gsl_complex.h"
21
+ #include "rb_gsl_poly.h"
22
+
23
+ #ifdef HAVE_NARRAY_H
24
+ #include "rb_gsl_with_narray.h"
25
+ #endif
26
+
27
+ #define BASE_DOUBLE
28
+ #include "templates_on.h"
29
+ #include "block_source.c"
30
+ #include "templates_off.h"
31
+ #undef BASE_DOUBLE
32
+
33
+ #define BASE_INT
34
+ #include "templates_on.h"
35
+ #include "block_source.c"
36
+ #include "templates_off.h"
37
+ #undef BASE_INT
38
+
39
+ #define BASE_UCHAR
40
+ #include "templates_on.h"
41
+ #include "block_source.c"
42
+ #include "templates_off.h"
43
+ #undef BASE_UCHAR
44
+
@@ -0,0 +1,886 @@
1
+ /*
2
+ block_source.c
3
+ Ruby/GSL: Ruby extension library for GSL (GNU Scientific Library)
4
+ (C) Copyright 2001-2005 by Yoshiki Tsunesada
5
+ Cameron McBride
6
+
7
+ Ruby/GSL is free software: you can redistribute it and/or modify it
8
+ under the terms of the GNU General Public License.
9
+ This library is distributed in the hope that it will be useful, but
10
+ WITHOUT ANY WARRANTY.
11
+ */
12
+
13
+ #ifdef BASE_DOUBLE
14
+ #define CHECK_BL CHECK_BLOCK
15
+ #define C_TO_VALUE rb_float_new
16
+ #define BL_P BLOCK_P
17
+ #elif defined(BASE_INT)
18
+ #define C_TO_VALUE INT2FIX
19
+ #define CHECK_BL CHECK_BLOCK_INT
20
+ #define BL_P BLOCK_INT_P
21
+ #else
22
+ #define C_TO_VALUE INT2FIX
23
+ #define CHECK_BL CHECK_BLOCK_UCHAR
24
+ #define BL_P BLOCK_UCHAR_P
25
+ #endif
26
+
27
+ static VALUE FUNCTION(rb_gsl_block,new)(VALUE klass, VALUE nn)
28
+ {
29
+ GSL_TYPE(gsl_block) *block = NULL;
30
+ CHECK_FIXNUM(nn);
31
+ block = FUNCTION(gsl_block,alloc)(FIX2INT(nn));
32
+ return Data_Wrap_Struct(klass, 0, FUNCTION(gsl_block,free), block);
33
+ }
34
+
35
+ static VALUE FUNCTION(rb_gsl_block,calloc)(VALUE klass, VALUE nn)
36
+ {
37
+ GSL_TYPE(gsl_block) *block = NULL;
38
+ CHECK_FIXNUM(nn);
39
+ block = FUNCTION(gsl_block,calloc)(FIX2INT(nn));
40
+ return Data_Wrap_Struct(klass, 0, FUNCTION(gsl_block,free), block);
41
+ }
42
+
43
+ static VALUE FUNCTION(rb_gsl_block,size)(VALUE obj)
44
+ {
45
+ GSL_TYPE(gsl_block) *block = NULL;
46
+ Data_Get_Struct(obj, GSL_TYPE(gsl_block), block);
47
+ return INT2FIX(block->size);
48
+ }
49
+
50
+ static VALUE FUNCTION(rb_gsl_block,fwrite)(VALUE obj, VALUE io)
51
+ {
52
+ GSL_TYPE(gsl_block) *h = NULL;
53
+ FILE *f = NULL;
54
+ int status, flag = 0;
55
+ Data_Get_Struct(obj, GSL_TYPE(gsl_block), h);
56
+ f = rb_gsl_open_writefile(io, &flag);
57
+ status = FUNCTION(gsl_block,fwrite)(f, h);
58
+ if (flag == 1) fclose(f);
59
+ return INT2FIX(status);
60
+ }
61
+
62
+ static VALUE FUNCTION(rb_gsl_block,fread)(VALUE obj, VALUE io)
63
+ {
64
+ GSL_TYPE(gsl_block) *h = NULL;
65
+ FILE *f = NULL;
66
+ int status, flag = 0;
67
+ Data_Get_Struct(obj, GSL_TYPE(gsl_block), h);
68
+ f = rb_gsl_open_readfile(io, &flag);
69
+ status = FUNCTION(gsl_block,fread)(f, h);
70
+ if (flag == 1) fclose(f);
71
+ return INT2FIX(status);
72
+ }
73
+
74
+ #ifdef BASE_DOUBLE
75
+ #define FORMAT_DEFAULT "%g"
76
+ #else
77
+ #define FORMAT_DEFAULT "%d"
78
+ #endif
79
+
80
+ static VALUE FUNCTION(rb_gsl_block,fprintf)(int argc, VALUE *argv, VALUE obj)
81
+ {
82
+ GSL_TYPE(gsl_block) *h = NULL;
83
+ FILE *fp = NULL;
84
+ int status, flag = 0;
85
+ if (argc != 1 && argc != 2)
86
+ rb_raise(rb_eArgError,
87
+ "wrong number of arguments (%d for 1 or 2)", argc);
88
+ Data_Get_Struct(obj, GSL_TYPE(gsl_block), h);
89
+ fp = rb_gsl_open_writefile(argv[0], &flag);
90
+ if (argc == 2) {
91
+ Check_Type(argv[1], T_STRING);
92
+ status = FUNCTION(gsl_block,fprintf)(fp, h, STR2CSTR(argv[1]));
93
+ } else {
94
+ status = FUNCTION(gsl_block,fprintf)(fp, h, FORMAT_DEFAULT);
95
+ }
96
+ if (flag == 1) fclose(fp);
97
+ return INT2FIX(status);
98
+ }
99
+
100
+ static VALUE FUNCTION(rb_gsl_block,printf)(int argc, VALUE *argv, VALUE obj)
101
+ {
102
+ GSL_TYPE(gsl_block) *h = NULL;
103
+ int status;
104
+ Data_Get_Struct(obj, GSL_TYPE(gsl_block), h);
105
+ if (argc == 1) {
106
+ Check_Type(argv[0], T_STRING);
107
+ status = FUNCTION(gsl_block,fprintf)(stdout, h, STR2CSTR(argv[0]));
108
+ } else {
109
+ status = FUNCTION(gsl_block,fprintf)(stdout, h, FORMAT_DEFAULT);
110
+ }
111
+ return INT2FIX(status);
112
+ }
113
+
114
+ #undef FORMAT_DEFAULT
115
+
116
+ static VALUE FUNCTION(rb_gsl_block,fscanf)(VALUE obj, VALUE io)
117
+ {
118
+ GSL_TYPE(gsl_block) *h = NULL;
119
+ FILE *fp = NULL;
120
+ int status, flag = 0;
121
+ Data_Get_Struct(obj, GSL_TYPE(gsl_block), h);
122
+ fp = rb_gsl_open_readfile(io, &flag);
123
+ status = FUNCTION(gsl_block,fscanf)(fp, h);
124
+ if (flag == 1) fclose(fp);
125
+ return INT2FIX(status);
126
+ }
127
+
128
+ #ifdef BASE_DOUBLE
129
+ #define SHOW_ELM 6
130
+ #define PRINTF_FORMAT "%4.3e "
131
+ #define TYPE2 double
132
+ #else
133
+ #define SHOW_ELM 15
134
+ #define PRINTF_FORMAT "%d "
135
+ #define TYPE2 int
136
+ #endif
137
+
138
+ static VALUE FUNCTION(rb_gsl_block,to_s)(VALUE obj)
139
+ {
140
+ GSL_TYPE(gsl_block) *v = NULL;
141
+ char buf[32];
142
+ size_t i, n;
143
+ VALUE str;
144
+ Data_Get_Struct(obj, GSL_TYPE(gsl_block), v);
145
+ str = rb_str_new2("[ ");
146
+ n = v->size;
147
+ if (rb_obj_is_kind_of(obj, cgsl_block_complex)) n *= 2;
148
+ for (i = 0; i < n; i++) {
149
+ sprintf(buf, PRINTF_FORMAT, (TYPE2) v->data[i]);
150
+ rb_str_cat(str, buf, strlen(buf));
151
+ if (i == SHOW_ELM && i != v->size-1) {
152
+ strcpy(buf, "... ");
153
+ rb_str_cat(str, buf, strlen(buf));
154
+ break;
155
+ }
156
+ }
157
+ sprintf(buf, "]");
158
+ rb_str_cat(str, buf, strlen(buf));
159
+ return str;
160
+ }
161
+ #undef SHOW_ELM
162
+ #undef PRINTF_FORMAT
163
+
164
+ static VALUE FUNCTION(rb_gsl_block,inspect)(VALUE obj)
165
+ {
166
+ VALUE str;
167
+ char buf[64];
168
+ sprintf(buf, "%s\n", rb_class2name(CLASS_OF(obj)));
169
+ str = rb_str_new2(buf);
170
+ return rb_str_concat(str, FUNCTION(rb_gsl_block,to_s)(obj));
171
+ }
172
+
173
+ #ifdef BASE_DOUBLE
174
+ #define C_TO_VALUE rb_float_new
175
+ #define NUMCONV NUM2DBL
176
+ #else
177
+ #define C_TO_VALUE INT2FIX
178
+ #define NUMCONV FIX2INT
179
+ #endif
180
+
181
+ void get_range_int_beg_en_n(VALUE range, int *beg, int *en, size_t *n, int *step);
182
+ static VALUE FUNCTION(rb_gsl_block,get)(int argc, VALUE *argv, VALUE obj)
183
+ {
184
+ GSL_TYPE(gsl_block) *b, *bnew;
185
+ gsl_index *p;
186
+ int beg, en, i, step;
187
+ size_t n, j, k;
188
+
189
+ Data_Get_Struct(obj, GSL_TYPE(gsl_block), b);
190
+ switch (argc) {
191
+ case 0:
192
+ rb_raise(rb_eArgError, "too few arguments (%d for >= 1)", argc);
193
+ break;
194
+ case 1:
195
+ switch (TYPE(argv[0])) {
196
+ case T_FIXNUM:
197
+ i = FIX2INT(argv[0]);
198
+ if (i < 0) j = b->size + i; else j = (size_t) i;
199
+ return C_TO_VALUE(b->data[j]);
200
+ break;
201
+ case T_ARRAY:
202
+ // n = RARRAY(argv[0])->len;
203
+ n = RARRAY_LEN(argv[0]);
204
+ bnew = FUNCTION(gsl_block,alloc)(n);
205
+ for (j = 0; j < n; j++) {
206
+ i = FIX2INT(rb_ary_entry(argv[0], j));
207
+ if (i < 0) k = b->size + i; else k = i;
208
+ bnew->data[j] = b->data[k];
209
+ }
210
+ return Data_Wrap_Struct(GSL_TYPE(cgsl_block), 0, FUNCTION(gsl_block,free), bnew);
211
+ break;
212
+ default:
213
+ if (PERMUTATION_P(argv[0])) {
214
+ Data_Get_Struct(argv[0], gsl_index, p);
215
+ bnew = FUNCTION(gsl_block,alloc)(p->size);
216
+ for (j = 0; j < p->size; j++) bnew->data[j] = b->data[p->data[j]];
217
+ return Data_Wrap_Struct(GSL_TYPE(cgsl_block), 0, FUNCTION(gsl_block,free), bnew);
218
+ } else if (CLASS_OF(argv[0]) == rb_cRange) {
219
+ get_range_int_beg_en_n(argv[0], &beg, &en, &n, &step);
220
+ bnew = FUNCTION(gsl_block,alloc)(n);
221
+ for (j = 0; j < n; j++)
222
+ bnew->data[j] = b->data[beg+j];
223
+ return Data_Wrap_Struct(GSL_TYPE(cgsl_block), 0, FUNCTION(gsl_block,free),
224
+ bnew);
225
+ } else {
226
+ rb_raise(rb_eArgError, "wrong argument type %s (Fixnum, Array, or Range expected)", rb_class2name(CLASS_OF(argv[0])));
227
+ break;
228
+ }
229
+ }
230
+ break;
231
+ default:
232
+ bnew = FUNCTION(gsl_block,alloc)(argc);
233
+ for (j = 0; j < argc; j++) {
234
+ i = FIX2INT(argv[j]);
235
+ if (i < 0) k = b->size + i; else k = i;
236
+ bnew->data[j] = b->data[k];
237
+ }
238
+ return Data_Wrap_Struct(GSL_TYPE(cgsl_block), 0, FUNCTION(gsl_block,free), bnew);
239
+
240
+
241
+ break;
242
+ }
243
+ return Qnil;
244
+ }
245
+
246
+ static VALUE FUNCTION(rb_gsl_block,set)(VALUE obj, VALUE ii, VALUE xx)
247
+ {
248
+ GSL_TYPE(gsl_block) *b;
249
+ BASE x;
250
+ size_t i;
251
+ CHECK_FIXNUM(ii);
252
+ i = FIX2INT(ii);
253
+ x = (BASE) NUMCONV(xx);
254
+ Data_Get_Struct(obj, GSL_TYPE(gsl_block), b);
255
+ b->data[i] = x;
256
+ return obj;
257
+ }
258
+
259
+
260
+ static int FUNCTION(gsl_block,eq)(const GSL_TYPE(gsl_block) *a,
261
+ const GSL_TYPE(gsl_block) *b,
262
+ gsl_block_uchar *c)
263
+ {
264
+ size_t i;
265
+ BASE x, y;
266
+ if (a->size != b->size) return -1;
267
+ if (a->size != c->size) return -2;
268
+ for (i = 0; i < a->size; i++) {
269
+ x = a->data[i];
270
+ y = b->data[i];
271
+ c->data[i] = (x > y || x < y) ? 0 : 1;
272
+ }
273
+ return 0;
274
+ }
275
+
276
+ static int FUNCTION(gsl_block,ne)(const GSL_TYPE(gsl_block) *a,
277
+ const GSL_TYPE(gsl_block) *b,
278
+ gsl_block_uchar *c)
279
+ {
280
+ size_t i;
281
+ BASE x, y;
282
+ if (a->size != b->size) return -1;
283
+ if (a->size != c->size) return -2;
284
+ for (i = 0; i < a->size; i++) {
285
+ x = a->data[i];
286
+ y = b->data[i];
287
+ c->data[i] = (x > y || x < y) ? 1 : 0;
288
+ }
289
+ return 0;
290
+ }
291
+
292
+ static int FUNCTION(gsl_block,gt)(const GSL_TYPE(gsl_block) *a,
293
+ const GSL_TYPE(gsl_block) *b,
294
+ gsl_block_uchar *c)
295
+ {
296
+ size_t i;
297
+ BASE x, y;
298
+ if (a->size != b->size) return -1;
299
+ if (a->size != c->size) return -2;
300
+ for (i = 0; i < a->size; i++) {
301
+ x = a->data[i];
302
+ y = b->data[i];
303
+ c->data[i] = (x > y) ? 1 : 0;
304
+ }
305
+ return 0;
306
+ }
307
+
308
+ static int FUNCTION(gsl_block,ge)(const GSL_TYPE(gsl_block) *a,
309
+ const GSL_TYPE(gsl_block) *b,
310
+ gsl_block_uchar *c)
311
+ {
312
+ size_t i;
313
+ BASE x, y;
314
+ if (a->size != b->size) return -1;
315
+ if (a->size != c->size) return -2;
316
+ for (i = 0; i < a->size; i++) {
317
+ x = a->data[i];
318
+ y = b->data[i];
319
+ c->data[i] = (x >= y) ? 1 : 0;
320
+ }
321
+ return 0;
322
+ }
323
+
324
+ static int FUNCTION(gsl_block,lt)(const GSL_TYPE(gsl_block) *a,
325
+ const GSL_TYPE(gsl_block) *b,
326
+ gsl_block_uchar *c)
327
+ {
328
+ size_t i;
329
+ BASE x, y;
330
+ if (a->size != b->size) return -1;
331
+ if (a->size != c->size) return -2;
332
+ for (i = 0; i < a->size; i++) {
333
+ x = a->data[i];
334
+ y = b->data[i];
335
+ c->data[i] = (x < y) ? 1 : 0;
336
+ }
337
+ return 0;
338
+ }
339
+
340
+ static int FUNCTION(gsl_block,le)(const GSL_TYPE(gsl_block) *a,
341
+ const GSL_TYPE(gsl_block) *b,
342
+ gsl_block_uchar *c)
343
+ {
344
+ size_t i;
345
+ BASE x, y;
346
+ if (a->size != b->size) return -1;
347
+ if (a->size != c->size) return -2;
348
+ for (i = 0; i < a->size; i++) {
349
+ x = a->data[i];
350
+ y = b->data[i];
351
+ c->data[i] = (x <= y) ? 1 : 0;
352
+ }
353
+ return 0;
354
+ }
355
+
356
+ static int FUNCTION(gsl_block,and)(const GSL_TYPE(gsl_block) *a,
357
+ const GSL_TYPE(gsl_block) *b,
358
+ gsl_block_uchar *c)
359
+ {
360
+ size_t i;
361
+ BASE x, y;
362
+ if (a->size != b->size) return -1;
363
+ if (a->size != c->size) return -2;
364
+ for (i = 0; i < a->size; i++) {
365
+ x = a->data[i];
366
+ y = b->data[i];
367
+ c->data[i] = (x != 0 && y != 0) ? 1 : 0;
368
+ }
369
+ return 0;
370
+ }
371
+
372
+ static int FUNCTION(gsl_block,or)(const GSL_TYPE(gsl_block) *a,
373
+ const GSL_TYPE(gsl_block) *b,
374
+ gsl_block_uchar *c)
375
+ {
376
+ size_t i;
377
+ BASE x, y;
378
+ if (a->size != b->size) return -1;
379
+ if (a->size != c->size) return -2;
380
+ for (i = 0; i < a->size; i++) {
381
+ x = a->data[i];
382
+ y = b->data[i];
383
+ c->data[i] = (x != 0 || y != 0) ? 1 : 0;
384
+ }
385
+ return 0;
386
+ }
387
+
388
+ static int FUNCTION(gsl_block,xor)(const GSL_TYPE(gsl_block) *a,
389
+ const GSL_TYPE(gsl_block) *b,
390
+ gsl_block_uchar *c)
391
+ {
392
+ size_t i;
393
+ BASE x, y;
394
+ if (a->size != b->size) return -1;
395
+ if (a->size != c->size) return -2;
396
+ for (i = 0; i < a->size; i++) {
397
+ x = a->data[i];
398
+ y = b->data[i];
399
+ c->data[i] = ((x != 0) == (y != 0)) ? 0 : 1;
400
+ }
401
+ return 0;
402
+ }
403
+
404
+ static int FUNCTION(gsl_block,eq2)(const GSL_TYPE(gsl_block) *a,
405
+ BASE b, gsl_block_uchar *c)
406
+ {
407
+ size_t i;
408
+ BASE x, y;
409
+ if (a->size != c->size) return -2;
410
+ for (i = 0; i < a->size; i++) {
411
+ x = a->data[i];
412
+ y = b;
413
+ c->data[i] = (x > y || x < y) ? 0 : 1;
414
+ }
415
+ return 0;
416
+ }
417
+
418
+ static int FUNCTION(gsl_block,ne2)(const GSL_TYPE(gsl_block) *a,
419
+ BASE b,
420
+ gsl_block_uchar *c)
421
+ {
422
+ size_t i;
423
+ BASE x, y;
424
+ if (a->size != c->size) return -2;
425
+ for (i = 0; i < a->size; i++) {
426
+ x = a->data[i];
427
+ y = b;
428
+ c->data[i] = (x > y || x < y) ? 1 : 0;
429
+ }
430
+ return 0;
431
+ }
432
+
433
+ static int FUNCTION(gsl_block,gt2)(const GSL_TYPE(gsl_block) *a,
434
+ BASE b,
435
+ gsl_block_uchar *c)
436
+ {
437
+ size_t i;
438
+ BASE x, y;
439
+ if (a->size != c->size) return -2;
440
+ for (i = 0; i < a->size; i++) {
441
+ x = a->data[i];
442
+ y = b;
443
+ c->data[i] = (x > y) ? 1 : 0;
444
+ }
445
+ return 0;
446
+ }
447
+
448
+ static int FUNCTION(gsl_block,ge2)(const GSL_TYPE(gsl_block) *a,
449
+ BASE b,
450
+ gsl_block_uchar *c)
451
+ {
452
+ size_t i;
453
+ BASE x, y;
454
+ if (a->size != c->size) return -2;
455
+ for (i = 0; i < a->size; i++) {
456
+ x = a->data[i];
457
+ y = b;
458
+ c->data[i] = (x >= y) ? 1 : 0;
459
+ }
460
+ return 0;
461
+ }
462
+
463
+ static int FUNCTION(gsl_block,lt2)(const GSL_TYPE(gsl_block) *a,
464
+ BASE b,
465
+ gsl_block_uchar *c)
466
+ {
467
+ size_t i;
468
+ BASE x, y;
469
+ if (a->size != c->size) return -2;
470
+ for (i = 0; i < a->size; i++) {
471
+ x = a->data[i];
472
+ y = b;
473
+ c->data[i] = (x < y) ? 1 : 0;
474
+ }
475
+ return 0;
476
+ }
477
+
478
+ static int FUNCTION(gsl_block,le2)(const GSL_TYPE(gsl_block) *a,
479
+ BASE b,
480
+ gsl_block_uchar *c)
481
+ {
482
+ size_t i;
483
+ BASE x, y;
484
+ if (a->size != c->size) return -2;
485
+ for (i = 0; i < a->size; i++) {
486
+ x = a->data[i];
487
+ y = b;
488
+ c->data[i] = (x <= y) ? 1 : 0;
489
+ }
490
+ return 0;
491
+ }
492
+
493
+ static int FUNCTION(gsl_block,and2)(const GSL_TYPE(gsl_block) *a,
494
+ BASE b,
495
+ gsl_block_uchar *c)
496
+ {
497
+ size_t i;
498
+ BASE x, y;
499
+ if (a->size != c->size) return -2;
500
+ for (i = 0; i < a->size; i++) {
501
+ x = a->data[i];
502
+ y = b;
503
+ c->data[i] = (x != 0 && y != 0) ? 1 : 0;
504
+ }
505
+ return 0;
506
+ }
507
+
508
+ static int FUNCTION(gsl_block,or2)(const GSL_TYPE(gsl_block) *a,
509
+ BASE b,
510
+ gsl_block_uchar *c)
511
+ {
512
+ size_t i;
513
+ BASE x, y;
514
+ if (a->size != c->size) return -2;
515
+ for (i = 0; i < a->size; i++) {
516
+ x = a->data[i];
517
+ y = b;
518
+ c->data[i] = (x != 0 || y != 0) ? 1 : 0;
519
+ }
520
+ return 0;
521
+ }
522
+
523
+ static int FUNCTION(gsl_block,xor2)(const GSL_TYPE(gsl_block) *a,
524
+ BASE b,
525
+ gsl_block_uchar *c)
526
+ {
527
+ size_t i;
528
+ BASE x, y;
529
+ if (a->size != c->size) return -2;
530
+ for (i = 0; i < a->size; i++) {
531
+ x = a->data[i];
532
+ y = b;
533
+ c->data[i] = ((x != 0) == (y != 0)) ? 0 : 1;
534
+ }
535
+ return 0;
536
+ }
537
+
538
+
539
+ static VALUE FUNCTION(rb_gsl_block,compare)(VALUE aa, VALUE bb,
540
+ int (*cmp)(const GSL_TYPE(gsl_block)*,
541
+ const GSL_TYPE(gsl_block)*,
542
+ gsl_block_uchar*),
543
+ int (*cmp2)(const GSL_TYPE(gsl_block)*,
544
+ BASE,
545
+ gsl_block_uchar*))
546
+ {
547
+ GSL_TYPE(gsl_block) *a, *b;
548
+ /* gsl_block_int *c;*/
549
+ gsl_block_uchar *c;
550
+ int status;
551
+ Data_Get_Struct(aa, GSL_TYPE(gsl_block), a);
552
+ c = gsl_block_uchar_alloc(a->size);
553
+ if (BL_P(bb)) {
554
+ Data_Get_Struct(bb, GSL_TYPE(gsl_block), b);
555
+ if (a->size != b->size)
556
+ rb_raise(rb_eRuntimeError, "Block size mismatch, %d and %d", (int) a->size,
557
+ (int) b->size);
558
+ status = (*cmp)(a, b, c);
559
+ } else {
560
+ status = (*cmp2)(a, NUMCONV(bb), c);
561
+ }
562
+ return Data_Wrap_Struct(cgsl_block_uchar, 0, gsl_block_uchar_free, c);
563
+ }
564
+
565
+ static VALUE FUNCTION(rb_gsl_block,eq)(VALUE aa, VALUE bb)
566
+ {
567
+ return FUNCTION(rb_gsl_block,compare)(aa, bb, FUNCTION(gsl_block,eq),
568
+ FUNCTION(gsl_block,eq2));
569
+ }
570
+
571
+ static VALUE FUNCTION(rb_gsl_block,ne)(VALUE aa, VALUE bb)
572
+ {
573
+ return FUNCTION(rb_gsl_block,compare)(aa, bb, FUNCTION(gsl_block,ne),
574
+ FUNCTION(gsl_block,ne2));
575
+ }
576
+
577
+ static VALUE FUNCTION(rb_gsl_block,gt)(VALUE aa, VALUE bb)
578
+ {
579
+ return FUNCTION(rb_gsl_block,compare)(aa, bb, FUNCTION(gsl_block,gt),
580
+ FUNCTION(gsl_block,gt2));
581
+ }
582
+
583
+ static VALUE FUNCTION(rb_gsl_block,ge)(VALUE aa, VALUE bb)
584
+ {
585
+ return FUNCTION(rb_gsl_block,compare)(aa, bb, FUNCTION(gsl_block,ge),
586
+ FUNCTION(gsl_block,ge2));
587
+ }
588
+
589
+ static VALUE FUNCTION(rb_gsl_block,lt)(VALUE aa, VALUE bb)
590
+ {
591
+ return FUNCTION(rb_gsl_block,compare)(aa, bb, FUNCTION(gsl_block,lt),
592
+ FUNCTION(gsl_block,lt2));
593
+ }
594
+
595
+ static VALUE FUNCTION(rb_gsl_block,le)(VALUE aa, VALUE bb)
596
+ {
597
+ return FUNCTION(rb_gsl_block,compare)(aa, bb, FUNCTION(gsl_block,le),
598
+ FUNCTION(gsl_block,le2));
599
+ }
600
+
601
+ static VALUE FUNCTION(rb_gsl_block,and)(VALUE aa, VALUE bb)
602
+ {
603
+ return FUNCTION(rb_gsl_block,compare)(aa, bb, FUNCTION(gsl_block,and),
604
+ FUNCTION(gsl_block,and2));
605
+ }
606
+
607
+ static VALUE FUNCTION(rb_gsl_block,or)(VALUE aa, VALUE bb)
608
+ {
609
+ return FUNCTION(rb_gsl_block,compare)(aa, bb, FUNCTION(gsl_block,or),
610
+ FUNCTION(gsl_block,or2));
611
+ }
612
+
613
+ static VALUE FUNCTION(rb_gsl_block,xor)(VALUE aa, VALUE bb)
614
+ {
615
+ return FUNCTION(rb_gsl_block,compare)(aa, bb, FUNCTION(gsl_block,xor),
616
+ FUNCTION(gsl_block,xor2));
617
+ }
618
+
619
+ static VALUE FUNCTION(rb_gsl_block,not)(VALUE obj)
620
+ {
621
+ GSL_TYPE(gsl_block) *v;
622
+ gsl_block_uchar *vv;
623
+ size_t i;
624
+ Data_Get_Struct(obj, GSL_TYPE(gsl_block), v);
625
+ vv = gsl_block_uchar_alloc(v->size);
626
+ for (i = 0; i < v->size; i++) vv->data[i] = (v->data[i] != 0) ? 0 : 1;
627
+ return Data_Wrap_Struct(cgsl_block_uchar, 0, gsl_block_uchar_free, vv);
628
+ }
629
+
630
+ static VALUE FUNCTION(rb_gsl_block,any)(VALUE obj)
631
+ {
632
+ GSL_TYPE(gsl_block) *v = NULL;
633
+ size_t i;
634
+
635
+ Data_Get_Struct(obj, GSL_TYPE(gsl_block), v);
636
+ if (rb_block_given_p()) {
637
+ for (i = 0; i < v->size; i++) {
638
+ if (rb_yield(C_TO_VALUE(v->data[i]))) return INT2FIX(1);
639
+ }
640
+ return INT2FIX(0);
641
+ } else {
642
+ for (i = 0; i < v->size; i++) if (v->data[i]) return INT2FIX(1);
643
+ return INT2FIX(0);
644
+ }
645
+ }
646
+
647
+ static VALUE FUNCTION(rb_gsl_block,any2)(VALUE obj)
648
+ {
649
+ GSL_TYPE(gsl_block) *v = NULL;
650
+ size_t i;
651
+
652
+ Data_Get_Struct(obj, GSL_TYPE(gsl_block), v);
653
+ if (rb_block_given_p()) {
654
+ for (i = 0; i < v->size; i++) {
655
+ if (rb_yield(C_TO_VALUE(v->data[i]))) return Qtrue;
656
+ }
657
+ return Qfalse;
658
+ } else {
659
+ for (i = 0; i < v->size; i++) if (v->data[i]) return Qtrue;
660
+ return Qfalse;
661
+ }
662
+ }
663
+
664
+ static VALUE FUNCTION(rb_gsl_block,all)(VALUE obj)
665
+ {
666
+ GSL_TYPE(gsl_block) *v;
667
+ size_t i;
668
+
669
+ Data_Get_Struct(obj, GSL_TYPE(gsl_block), v);
670
+ if (rb_block_given_p()) {
671
+ for (i = 0; i < v->size; i++)
672
+ if (!rb_yield(C_TO_VALUE(v->data[i]))) return Qfalse;
673
+ return Qtrue;
674
+ } else {
675
+ for (i = 0; i < v->size; i++)
676
+ if (!v->data[i]) return Qfalse;
677
+ return Qtrue;
678
+ }
679
+ }
680
+
681
+ static VALUE FUNCTION(rb_gsl_block,none)(VALUE obj)
682
+ {
683
+ GSL_TYPE(gsl_block) *v;
684
+ size_t i;
685
+
686
+ Data_Get_Struct(obj, GSL_TYPE(gsl_block), v);
687
+ if (rb_block_given_p()) {
688
+ for (i = 0; i < v->size; i++)
689
+ if (rb_yield(C_TO_VALUE(v->data[i]))) return Qfalse;
690
+ return Qtrue;
691
+ } else {
692
+ for (i = 0; i < v->size; i++)
693
+ if (v->data[i]) return Qfalse;
694
+ return Qtrue;
695
+ }
696
+ }
697
+
698
+ static VALUE FUNCTION(rb_gsl_block,where)(VALUE obj)
699
+ {
700
+ GSL_TYPE(gsl_block) *v;
701
+ gsl_index *vv;
702
+ gsl_block_uchar *btmp = NULL;
703
+ size_t i, j, n = 0;
704
+ Data_Get_Struct(obj, GSL_TYPE(gsl_block), v);
705
+ /* count true elements */
706
+ if (rb_block_given_p()) {
707
+ btmp = gsl_block_uchar_alloc(v->size);
708
+ for (i = 0; i < v->size; i++) {
709
+ if (rb_yield(C_TO_VALUE(v->data[i]))) {
710
+ btmp->data[i] = 1;
711
+ n++;
712
+ } else {
713
+ btmp->data[i] = 0;
714
+ }
715
+ } /* for */
716
+ } else { /* block is not given */
717
+ for (i = 0; i < v->size; i++) { if (v->data[i]) n++; }
718
+ }
719
+ if (n == 0) {
720
+ if (btmp) gsl_block_uchar_free(btmp);
721
+ return Qnil;
722
+ }
723
+ vv = gsl_permutation_alloc(n);
724
+ for (i = 0, j = 0; i < v->size; i++) {
725
+ if ((!btmp && v->data[i]) || (btmp && btmp->data[i])) {
726
+ vv->data[j++] = i;
727
+ }
728
+ }
729
+ if (btmp) gsl_block_uchar_free(btmp);
730
+ return Data_Wrap_Struct(cgsl_index, 0, gsl_permutation_free, vv);
731
+ }
732
+
733
+ static VALUE FUNCTION(rb_gsl_block,where2)(VALUE obj)
734
+ {
735
+ GSL_TYPE(gsl_block) *v;
736
+ gsl_index *v1, *v2;
737
+ gsl_block_uchar *btmp = NULL;
738
+ VALUE vv1, vv2;
739
+ size_t i, j, k, n = 0;
740
+
741
+ Data_Get_Struct(obj, GSL_TYPE(gsl_block), v);
742
+ if (rb_block_given_p()) {
743
+ btmp = gsl_block_uchar_alloc(v->size);
744
+ for (i = 0; i < v->size; i++) {
745
+ if (rb_yield(C_TO_VALUE(v->data[i]))) {
746
+ btmp->data[i] = 1;
747
+ n++;
748
+ } else {
749
+ btmp->data[i] = 0;
750
+ }
751
+ } /* for */
752
+ } else { /* block is not given */
753
+ for (i = 0; i < v->size; i++) { if (v->data[i]) n++; }
754
+ }
755
+ /* true and false logic. need to handle both */
756
+ if (n == 0) {
757
+ v2 = gsl_permutation_calloc(v->size); /* calloc() initializes v2 */
758
+ vv1 = Qnil;
759
+ vv2 = Data_Wrap_Struct(cgsl_index, 0, gsl_permutation_free, v2);
760
+ } else if (v->size-n == 0) {
761
+ v1 = gsl_permutation_calloc(n); /* calloc() initializes v1 */
762
+ vv1 = Data_Wrap_Struct(cgsl_index, 0, gsl_permutation_free, v1);
763
+ vv2 = Qnil;
764
+ } else {
765
+ /* same case as 'where' */
766
+ v1 = gsl_permutation_alloc(n);
767
+ v2 = gsl_permutation_alloc(v->size-n);
768
+ for (i = 0, j = 0, k = 0; i < v->size; i++) {
769
+ if ((!btmp && v->data[i]) || (btmp && btmp->data[i])) v1->data[j++] = i;
770
+ else v2->data[k++] = i;
771
+ }
772
+ vv1 = Data_Wrap_Struct(cgsl_index, 0, gsl_permutation_free, v1);
773
+ vv2 = Data_Wrap_Struct(cgsl_index, 0, gsl_permutation_free, v2);
774
+ }
775
+ if (btmp) gsl_block_uchar_free(btmp);
776
+ return rb_ary_new3(2, vv1, vv2);
777
+ }
778
+
779
+ static VALUE FUNCTION(rb_gsl_block,each)(VALUE obj)
780
+ {
781
+ GSL_TYPE(gsl_block) *b = NULL;
782
+ size_t i;
783
+ Data_Get_Struct(obj, GSL_TYPE(gsl_block), b);
784
+ for (i = 0; i < b->size; i++) {
785
+ rb_yield(C_TO_VALUE(b->data[i]));
786
+ }
787
+ return obj;
788
+ }
789
+
790
+ static VALUE FUNCTION(rb_gsl_block,each_index)(VALUE obj)
791
+ {
792
+ GSL_TYPE(gsl_block) *b = NULL;
793
+ size_t i;
794
+ Data_Get_Struct(obj, GSL_TYPE(gsl_block), b);
795
+ for (i = 0; i < b->size; i++) {
796
+ rb_yield(INT2FIX(i));
797
+ }
798
+ return obj;
799
+ }
800
+
801
+ static VALUE FUNCTION(rb_gsl_block,collect)(VALUE obj)
802
+ {
803
+ GSL_TYPE(gsl_block) *b = NULL, *bnew;
804
+ size_t i;
805
+ Data_Get_Struct(obj, GSL_TYPE(gsl_block), b);
806
+ bnew = FUNCTION(gsl_block,alloc)(b->size);
807
+ for (i = 0; i < b->size; i++) {
808
+ bnew->data[i] = NUMCONV(rb_yield(C_TO_VALUE(b->data[i])));
809
+ }
810
+ return Data_Wrap_Struct(GSL_TYPE(cgsl_block), 0, FUNCTION(gsl_block,free), bnew);
811
+ }
812
+
813
+ static VALUE FUNCTION(rb_gsl_block,collect_bang)(VALUE obj)
814
+ {
815
+ GSL_TYPE(gsl_block) *b = NULL;
816
+ size_t i;
817
+ Data_Get_Struct(obj, GSL_TYPE(gsl_block), b);
818
+ for (i = 0; i < b->size; i++) {
819
+ b->data[i] = NUMCONV(rb_yield(C_TO_VALUE(b->data[i])));
820
+ }
821
+ return obj;
822
+ }
823
+
824
+ #undef C_TO_VALUE
825
+ #undef NUMCONV
826
+ #undef TYPE2
827
+ #undef CHECK_BL
828
+ #undef BL_P
829
+
830
+ void FUNCTION(Init_gsl_block,init)(VALUE module)
831
+ {
832
+ rb_define_singleton_method(GSL_TYPE(cgsl_block), "new",
833
+ FUNCTION(rb_gsl_block,new), 1);
834
+ rb_define_singleton_method(GSL_TYPE(cgsl_block), "alloc",
835
+ FUNCTION(rb_gsl_block,new), 1);
836
+ rb_define_singleton_method(GSL_TYPE(cgsl_block), "calloc",
837
+ FUNCTION(rb_gsl_block,calloc), 1);
838
+
839
+ rb_define_method(GSL_TYPE(cgsl_block), "size", FUNCTION(rb_gsl_block,size), 0);
840
+ rb_define_alias(GSL_TYPE(cgsl_block), "length", "size");
841
+ rb_define_method(GSL_TYPE(cgsl_block), "fwrite", FUNCTION(rb_gsl_block,fwrite), 1);
842
+ rb_define_method(GSL_TYPE(cgsl_block), "fread", FUNCTION(rb_gsl_block,fread), 1);
843
+ rb_define_method(GSL_TYPE(cgsl_block), "fprintf", FUNCTION(rb_gsl_block,fprintf), -1);
844
+ rb_define_method(GSL_TYPE(cgsl_block), "printf", FUNCTION(rb_gsl_block,printf), -1);
845
+ rb_define_method(GSL_TYPE(cgsl_block), "fscanf", FUNCTION(rb_gsl_block,fscanf), 1);
846
+
847
+ rb_define_method(GSL_TYPE(cgsl_block), "inspect", FUNCTION(rb_gsl_block,inspect), 0);
848
+ rb_define_method(GSL_TYPE(cgsl_block), "to_s", FUNCTION(rb_gsl_block,to_s), 0);
849
+ rb_define_method(GSL_TYPE(cgsl_block), "get", FUNCTION(rb_gsl_block,get), -1);
850
+ rb_define_alias(GSL_TYPE(cgsl_block), "[]", "get");
851
+ rb_define_method(GSL_TYPE(cgsl_block), "set", FUNCTION(rb_gsl_block,set), 2);
852
+ rb_define_alias(GSL_TYPE(cgsl_block), "[]=", "set");
853
+ /*****/
854
+ rb_define_method(GSL_TYPE(cgsl_block), "eq", FUNCTION(rb_gsl_block,eq), 1);
855
+ rb_define_method(GSL_TYPE(cgsl_block), "ne", FUNCTION(rb_gsl_block,ne), 1);
856
+ rb_define_method(GSL_TYPE(cgsl_block), "gt", FUNCTION(rb_gsl_block,gt), 1);
857
+ rb_define_alias(GSL_TYPE(cgsl_block), ">", "gt");
858
+ rb_define_method(GSL_TYPE(cgsl_block), "ge", FUNCTION(rb_gsl_block,ge), 1);
859
+ rb_define_alias(GSL_TYPE(cgsl_block), ">=", "ge");
860
+ rb_define_method(GSL_TYPE(cgsl_block), "lt", FUNCTION(rb_gsl_block,lt), 1);
861
+ rb_define_alias(GSL_TYPE(cgsl_block), "<", "lt");
862
+ rb_define_method(GSL_TYPE(cgsl_block), "le", FUNCTION(rb_gsl_block,le), 1);
863
+ rb_define_alias(GSL_TYPE(cgsl_block), "<=", "le");
864
+
865
+ rb_define_method(GSL_TYPE(cgsl_block), "and", FUNCTION(rb_gsl_block,and), 1);
866
+ rb_define_method(GSL_TYPE(cgsl_block), "or", FUNCTION(rb_gsl_block,or), 1);
867
+ rb_define_method(GSL_TYPE(cgsl_block), "xor", FUNCTION(rb_gsl_block,xor), 1);
868
+ rb_define_method(GSL_TYPE(cgsl_block), "not", FUNCTION(rb_gsl_block,not), 0);
869
+
870
+ rb_define_method(GSL_TYPE(cgsl_block), "all?", FUNCTION(rb_gsl_block,all), 0);
871
+ rb_define_method(GSL_TYPE(cgsl_block), "none?", FUNCTION(rb_gsl_block,none), 0);
872
+ rb_define_method(GSL_TYPE(cgsl_block), "any",
873
+ FUNCTION(rb_gsl_block,any), 0);
874
+ rb_define_method(GSL_TYPE(cgsl_block), "any?",
875
+ FUNCTION(rb_gsl_block,any2), 0);
876
+
877
+ rb_define_method(GSL_TYPE(cgsl_block), "where", FUNCTION(rb_gsl_block,where), 0);
878
+ rb_define_method(GSL_TYPE(cgsl_block), "where2", FUNCTION(rb_gsl_block,where2), 0);
879
+
880
+ rb_define_method(GSL_TYPE(cgsl_block), "each", FUNCTION(rb_gsl_block,each), 0);
881
+ rb_define_method(GSL_TYPE(cgsl_block), "each_index", FUNCTION(rb_gsl_block,each_index), 0);
882
+ rb_define_method(GSL_TYPE(cgsl_block), "collect", FUNCTION(rb_gsl_block,collect), 0);
883
+ rb_define_method(GSL_TYPE(cgsl_block), "collect!", FUNCTION(rb_gsl_block,collect_bang), 0);
884
+ rb_define_alias(GSL_TYPE(cgsl_block), "map", "collect");
885
+ rb_define_alias(GSL_TYPE(cgsl_block), "map!", "collect!");
886
+ }