carray-netcdf 1.0.0
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.
- checksums.yaml +7 -0
- data/API.html +238 -0
- data/API.md +270 -0
- data/README.md +3 -0
- data/carray-netcdf.gemspec +23 -0
- data/examples/test.rb +1 -0
- data/extconf.rb +11 -0
- data/lib/carray-netcdf.rb +2 -0
- data/lib/io/netcdf.rb +533 -0
- data/rb_netcdflib.c +1914 -0
- metadata +52 -0
data/rb_netcdflib.c
ADDED
@@ -0,0 +1,1914 @@
|
|
1
|
+
#include "ruby.h"
|
2
|
+
#include "carray.h"
|
3
|
+
#include <netcdf.h>
|
4
|
+
|
5
|
+
#define CHECK_ARGC(n) \
|
6
|
+
if ( argc != n ) \
|
7
|
+
rb_raise(rb_eRuntimeError, "invalid # of argumnet (%i for %i)", argc, n)
|
8
|
+
|
9
|
+
#define CHECK_TYPE_STRING(val) \
|
10
|
+
if ( TYPE(val) != T_STRING ) \
|
11
|
+
rb_raise(rb_eRuntimeError, "string type arg required")
|
12
|
+
|
13
|
+
#define CHECK_TYPE_STRING_OR_NIL(val) \
|
14
|
+
if ( TYPE(val) != T_STRING && !NIL_P(val)) \
|
15
|
+
rb_raise(rb_eRuntimeError, "string type arg required")
|
16
|
+
|
17
|
+
#define CHECK_TYPE_ARRAY(val) \
|
18
|
+
if ( TYPE(val) != T_ARRAY ) \
|
19
|
+
rb_raise(rb_eRuntimeError, "array type arg required")
|
20
|
+
|
21
|
+
#define CHECK_TYPE_ARRAY_OR_NIL(val) \
|
22
|
+
if ( TYPE(val) != T_ARRAY && ! NIL_P(val) ) \
|
23
|
+
rb_raise(rb_eRuntimeError, "array type arg or nil required")
|
24
|
+
|
25
|
+
#define CHECK_TYPE_INT(val) \
|
26
|
+
if ( ! rb_obj_is_kind_of(val, rb_cInteger) ) \
|
27
|
+
rb_raise(rb_eRuntimeError, "int type arg required")
|
28
|
+
|
29
|
+
#define CHECK_TYPE_NUMERIC(val) \
|
30
|
+
if ( ! rb_obj_is_kind_of(val, rb_cNumeric) ) \
|
31
|
+
rb_raise(rb_eRuntimeError, "int type arg required")
|
32
|
+
|
33
|
+
#define CHECK_TYPE_ID(val) \
|
34
|
+
if ( ! rb_obj_is_kind_of(val, rb_cInteger) ) \
|
35
|
+
rb_raise(rb_eRuntimeError, "id must be an integer")
|
36
|
+
|
37
|
+
#define CHECK_TYPE_DATA(val) \
|
38
|
+
if ( ! rb_obj_is_kind_of(val, rb_cCArray) ) \
|
39
|
+
rb_raise(rb_eRuntimeError, "CArray type arg required")
|
40
|
+
|
41
|
+
#define CHECK_STATUS(status) \
|
42
|
+
if ( (status) != NC_NOERR ) \
|
43
|
+
rb_raise(rb_eRuntimeError, "%s", nc_strerror(status))
|
44
|
+
|
45
|
+
static VALUE mNetCDF;
|
46
|
+
|
47
|
+
static int
|
48
|
+
rb_nc_typemap (nc_type nc_type)
|
49
|
+
{
|
50
|
+
switch ( nc_type ) {
|
51
|
+
case NC_CHAR:
|
52
|
+
return CA_INT8;
|
53
|
+
case NC_BYTE:
|
54
|
+
return CA_UINT8;
|
55
|
+
case NC_SHORT:
|
56
|
+
return CA_INT16;
|
57
|
+
case NC_INT:
|
58
|
+
return CA_INT32;
|
59
|
+
case NC_FLOAT:
|
60
|
+
return CA_FLOAT32;
|
61
|
+
case NC_DOUBLE:
|
62
|
+
return CA_FLOAT64;
|
63
|
+
default:
|
64
|
+
rb_raise(rb_eRuntimeError, "invalid NC_TYPE");
|
65
|
+
}
|
66
|
+
}
|
67
|
+
|
68
|
+
static nc_type
|
69
|
+
rb_nc_rtypemap (int ca_type)
|
70
|
+
{
|
71
|
+
switch ( ca_type ) {
|
72
|
+
case CA_INT8:
|
73
|
+
return NC_BYTE;
|
74
|
+
case CA_UINT8:
|
75
|
+
return NC_BYTE;
|
76
|
+
case CA_INT16:
|
77
|
+
return NC_SHORT;
|
78
|
+
case CA_INT32:
|
79
|
+
return NC_INT;
|
80
|
+
case CA_FLOAT32:
|
81
|
+
return NC_FLOAT;
|
82
|
+
case CA_FLOAT64:
|
83
|
+
return NC_DOUBLE;
|
84
|
+
default:
|
85
|
+
rb_raise(rb_eRuntimeError, "invalid CA_TYPE");
|
86
|
+
}
|
87
|
+
}
|
88
|
+
|
89
|
+
static VALUE
|
90
|
+
rb_nc_ca_type (int argc, VALUE *argv, VALUE mod)
|
91
|
+
{
|
92
|
+
int type;
|
93
|
+
|
94
|
+
CHECK_ARGC(1);
|
95
|
+
CHECK_TYPE_INT(argv[0]);
|
96
|
+
|
97
|
+
type = rb_nc_typemap(NUM2LONG(argv[0]));
|
98
|
+
|
99
|
+
return LONG2NUM(type);
|
100
|
+
}
|
101
|
+
|
102
|
+
static VALUE
|
103
|
+
rb_nc_nc_type (int argc, VALUE *argv, VALUE mod)
|
104
|
+
{
|
105
|
+
nc_type type;
|
106
|
+
|
107
|
+
CHECK_ARGC(1);
|
108
|
+
CHECK_TYPE_INT(argv[0]);
|
109
|
+
|
110
|
+
type = rb_nc_rtypemap(NUM2LONG(argv[0]));
|
111
|
+
|
112
|
+
return LONG2NUM(type);
|
113
|
+
}
|
114
|
+
|
115
|
+
static VALUE
|
116
|
+
rb_nc_create (int argc, VALUE *argv, VALUE mod)
|
117
|
+
{
|
118
|
+
int status, nc_id;
|
119
|
+
|
120
|
+
if ( argc < 1 ) {
|
121
|
+
rb_raise(rb_eArgError, "invalid # of arguments");
|
122
|
+
}
|
123
|
+
|
124
|
+
CHECK_TYPE_STRING(argv[0]);
|
125
|
+
|
126
|
+
if ( argc == 1 ) {
|
127
|
+
status = nc_create(StringValuePtr(argv[0]), NC_CLOBBER, &nc_id);
|
128
|
+
}
|
129
|
+
else {
|
130
|
+
CHECK_TYPE_INT(argv[1]);
|
131
|
+
status = nc_create(StringValuePtr(argv[0]), NUM2LONG(argv[1]), &nc_id);
|
132
|
+
}
|
133
|
+
|
134
|
+
CHECK_STATUS(status);
|
135
|
+
|
136
|
+
return LONG2NUM(nc_id);
|
137
|
+
}
|
138
|
+
|
139
|
+
static VALUE
|
140
|
+
rb_nc_open (int argc, VALUE *argv, VALUE mod)
|
141
|
+
{
|
142
|
+
int status, nc_id;
|
143
|
+
|
144
|
+
if ( argc < 1 ) {
|
145
|
+
rb_raise(rb_eArgError, "invalid # of arguments");
|
146
|
+
}
|
147
|
+
|
148
|
+
CHECK_TYPE_STRING(argv[0]);
|
149
|
+
|
150
|
+
if ( argc == 1 ) {
|
151
|
+
status = nc_open(StringValuePtr(argv[0]), NC_NOWRITE, &nc_id);
|
152
|
+
}
|
153
|
+
else {
|
154
|
+
CHECK_TYPE_INT(argv[1]);
|
155
|
+
status = nc_open(StringValuePtr(argv[0]), NUM2LONG(argv[1]), &nc_id);
|
156
|
+
}
|
157
|
+
|
158
|
+
CHECK_STATUS(status);
|
159
|
+
|
160
|
+
return LONG2NUM(nc_id);
|
161
|
+
}
|
162
|
+
|
163
|
+
static VALUE
|
164
|
+
rb_nc_close (int argc, VALUE *argv, VALUE mod)
|
165
|
+
{
|
166
|
+
int status;
|
167
|
+
|
168
|
+
CHECK_ARGC(1);
|
169
|
+
CHECK_TYPE_ID(argv[0]);
|
170
|
+
|
171
|
+
status = nc_close(NUM2LONG(argv[0]));
|
172
|
+
|
173
|
+
CHECK_STATUS(status);
|
174
|
+
|
175
|
+
return LONG2NUM(status);
|
176
|
+
}
|
177
|
+
|
178
|
+
static VALUE
|
179
|
+
rb_nc_redef (int argc, VALUE *argv, VALUE mod)
|
180
|
+
{
|
181
|
+
int status;
|
182
|
+
|
183
|
+
CHECK_ARGC(1);
|
184
|
+
CHECK_TYPE_ID(argv[0]);
|
185
|
+
|
186
|
+
status = nc_redef(NUM2LONG(argv[0]));
|
187
|
+
|
188
|
+
CHECK_STATUS(status);
|
189
|
+
|
190
|
+
return LONG2NUM(status);
|
191
|
+
}
|
192
|
+
|
193
|
+
static VALUE
|
194
|
+
rb_nc_enddef (int argc, VALUE *argv, VALUE mod)
|
195
|
+
{
|
196
|
+
int status;
|
197
|
+
|
198
|
+
CHECK_ARGC(1);
|
199
|
+
CHECK_TYPE_ID(argv[0]);
|
200
|
+
|
201
|
+
status = nc_enddef(NUM2LONG(argv[0]));
|
202
|
+
|
203
|
+
CHECK_STATUS(status);
|
204
|
+
|
205
|
+
return LONG2NUM(status);
|
206
|
+
}
|
207
|
+
|
208
|
+
static VALUE
|
209
|
+
rb_nc_sync (int argc, VALUE *argv, VALUE mod)
|
210
|
+
{
|
211
|
+
int status;
|
212
|
+
|
213
|
+
CHECK_ARGC(1);
|
214
|
+
CHECK_TYPE_ID(argv[0]);
|
215
|
+
|
216
|
+
status = nc_sync(NUM2LONG(argv[0]));
|
217
|
+
|
218
|
+
CHECK_STATUS(status);
|
219
|
+
|
220
|
+
return LONG2NUM(status);
|
221
|
+
}
|
222
|
+
|
223
|
+
static VALUE
|
224
|
+
rb_nc_inq_ndims (int argc, VALUE *argv, VALUE mod)
|
225
|
+
{
|
226
|
+
int status, ndims;
|
227
|
+
|
228
|
+
CHECK_ARGC(1);
|
229
|
+
CHECK_TYPE_ID(argv[0]);
|
230
|
+
|
231
|
+
status = nc_inq_ndims(NUM2LONG(argv[0]), &ndims);
|
232
|
+
|
233
|
+
CHECK_STATUS(status);
|
234
|
+
|
235
|
+
return LONG2NUM(ndims);
|
236
|
+
}
|
237
|
+
|
238
|
+
static VALUE
|
239
|
+
rb_nc_inq_nvars (int argc, VALUE *argv, VALUE mod)
|
240
|
+
{
|
241
|
+
int status, nvars;
|
242
|
+
|
243
|
+
CHECK_ARGC(1);
|
244
|
+
CHECK_TYPE_ID(argv[0]);
|
245
|
+
|
246
|
+
status = nc_inq_nvars(NUM2LONG(argv[0]), &nvars);
|
247
|
+
|
248
|
+
CHECK_STATUS(status);
|
249
|
+
|
250
|
+
return LONG2NUM(nvars);
|
251
|
+
}
|
252
|
+
|
253
|
+
static VALUE
|
254
|
+
rb_nc_inq_natts (int argc, VALUE *argv, VALUE mod)
|
255
|
+
{
|
256
|
+
int status, natts;
|
257
|
+
|
258
|
+
CHECK_ARGC(1);
|
259
|
+
CHECK_TYPE_ID(argv[0]);
|
260
|
+
|
261
|
+
status = nc_inq_natts(NUM2LONG(argv[0]), &natts);
|
262
|
+
|
263
|
+
CHECK_STATUS(status);
|
264
|
+
|
265
|
+
return LONG2NUM(natts);
|
266
|
+
}
|
267
|
+
|
268
|
+
static VALUE
|
269
|
+
rb_nc_inq_unlimdim (int argc, VALUE *argv, VALUE mod)
|
270
|
+
{
|
271
|
+
int status, uldim;
|
272
|
+
|
273
|
+
CHECK_ARGC(1);
|
274
|
+
CHECK_TYPE_ID(argv[0]);
|
275
|
+
|
276
|
+
status = nc_inq_unlimdim(NUM2LONG(argv[0]), &uldim);
|
277
|
+
|
278
|
+
CHECK_STATUS(status);
|
279
|
+
|
280
|
+
return LONG2NUM(uldim);
|
281
|
+
}
|
282
|
+
|
283
|
+
static VALUE
|
284
|
+
rb_nc_inq_dimid (int argc, VALUE *argv, VALUE mod)
|
285
|
+
{
|
286
|
+
int status, dimid;
|
287
|
+
|
288
|
+
CHECK_ARGC(2);
|
289
|
+
CHECK_TYPE_ID(argv[0]);
|
290
|
+
CHECK_TYPE_STRING(argv[1]);
|
291
|
+
|
292
|
+
status = nc_inq_dimid(NUM2LONG(argv[0]), StringValuePtr(argv[1]), &dimid);
|
293
|
+
|
294
|
+
return ( status != NC_NOERR ) ? Qnil : LONG2NUM(dimid);
|
295
|
+
}
|
296
|
+
|
297
|
+
static VALUE
|
298
|
+
rb_nc_inq_varid (int argc, VALUE *argv, VALUE mod)
|
299
|
+
{
|
300
|
+
int status, varid;
|
301
|
+
|
302
|
+
CHECK_ARGC(2);
|
303
|
+
CHECK_TYPE_ID(argv[0]);
|
304
|
+
CHECK_TYPE_STRING(argv[1]);
|
305
|
+
|
306
|
+
status = nc_inq_varid(NUM2LONG(argv[0]), StringValuePtr(argv[1]), &varid);
|
307
|
+
|
308
|
+
return ( status != NC_NOERR ) ? Qnil : LONG2NUM(varid);
|
309
|
+
}
|
310
|
+
|
311
|
+
static VALUE
|
312
|
+
rb_nc_inq_attid (int argc, VALUE *argv, VALUE mod)
|
313
|
+
{
|
314
|
+
int status, attid;
|
315
|
+
|
316
|
+
CHECK_ARGC(3);
|
317
|
+
CHECK_TYPE_ID(argv[0]);
|
318
|
+
CHECK_TYPE_ID(argv[1]);
|
319
|
+
CHECK_TYPE_STRING(argv[2]);
|
320
|
+
|
321
|
+
status = nc_inq_attid(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
322
|
+
StringValuePtr(argv[2]), &attid);
|
323
|
+
|
324
|
+
return ( status != NC_NOERR ) ? Qnil : LONG2NUM(attid);
|
325
|
+
}
|
326
|
+
|
327
|
+
static VALUE
|
328
|
+
rb_nc_inq_dimlen (int argc, VALUE *argv, VALUE mod)
|
329
|
+
{
|
330
|
+
size_t dimlen;
|
331
|
+
int status;
|
332
|
+
|
333
|
+
CHECK_ARGC(2);
|
334
|
+
CHECK_TYPE_ID(argv[0]);
|
335
|
+
CHECK_TYPE_ID(argv[1]);
|
336
|
+
|
337
|
+
status = nc_inq_dimlen(NUM2LONG(argv[0]), NUM2LONG(argv[1]), &dimlen);
|
338
|
+
|
339
|
+
CHECK_STATUS(status);
|
340
|
+
|
341
|
+
return ULONG2NUM(dimlen);
|
342
|
+
}
|
343
|
+
|
344
|
+
static VALUE
|
345
|
+
rb_nc_inq_dimname (int argc, VALUE *argv, VALUE mod)
|
346
|
+
{
|
347
|
+
int status;
|
348
|
+
char dimname[NC_MAX_NAME];
|
349
|
+
|
350
|
+
CHECK_ARGC(2);
|
351
|
+
CHECK_TYPE_ID(argv[0]);
|
352
|
+
CHECK_TYPE_ID(argv[1]);
|
353
|
+
|
354
|
+
status = nc_inq_dimname(NUM2LONG(argv[0]), NUM2LONG(argv[1]), dimname);
|
355
|
+
|
356
|
+
CHECK_STATUS(status);
|
357
|
+
|
358
|
+
return rb_str_new2(dimname);
|
359
|
+
}
|
360
|
+
|
361
|
+
static VALUE
|
362
|
+
rb_nc_inq_varname (int argc, VALUE *argv, VALUE mod)
|
363
|
+
{
|
364
|
+
int status;
|
365
|
+
char varname[NC_MAX_NAME];
|
366
|
+
|
367
|
+
CHECK_ARGC(2);
|
368
|
+
CHECK_TYPE_ID(argv[0]);
|
369
|
+
CHECK_TYPE_ID(argv[1]);
|
370
|
+
|
371
|
+
status = nc_inq_varname(NUM2LONG(argv[0]), NUM2LONG(argv[1]), varname);
|
372
|
+
|
373
|
+
CHECK_STATUS(status);
|
374
|
+
|
375
|
+
return rb_str_new2(varname);
|
376
|
+
}
|
377
|
+
|
378
|
+
static VALUE
|
379
|
+
rb_nc_inq_vartype (int argc, VALUE *argv, VALUE mod)
|
380
|
+
{
|
381
|
+
int status;
|
382
|
+
nc_type type;
|
383
|
+
|
384
|
+
CHECK_ARGC(2);
|
385
|
+
CHECK_TYPE_ID(argv[0]);
|
386
|
+
CHECK_TYPE_ID(argv[1]);
|
387
|
+
|
388
|
+
status = nc_inq_vartype(NUM2LONG(argv[0]), NUM2LONG(argv[1]), &type);
|
389
|
+
|
390
|
+
CHECK_STATUS(status);
|
391
|
+
|
392
|
+
return LONG2NUM(type);
|
393
|
+
}
|
394
|
+
|
395
|
+
static VALUE
|
396
|
+
rb_nc_inq_varndims (int argc, VALUE *argv, VALUE mod)
|
397
|
+
{
|
398
|
+
int status, ndims;
|
399
|
+
|
400
|
+
CHECK_ARGC(2);
|
401
|
+
CHECK_TYPE_ID(argv[0]);
|
402
|
+
CHECK_TYPE_ID(argv[1]);
|
403
|
+
|
404
|
+
status = nc_inq_varndims(NUM2LONG(argv[0]), NUM2LONG(argv[1]), &ndims);
|
405
|
+
|
406
|
+
CHECK_STATUS(status);
|
407
|
+
|
408
|
+
return LONG2NUM(ndims);
|
409
|
+
}
|
410
|
+
|
411
|
+
static VALUE
|
412
|
+
rb_nc_inq_vardimid (int argc, VALUE *argv, VALUE mod)
|
413
|
+
{
|
414
|
+
volatile VALUE rdim;
|
415
|
+
int dimid[NC_MAX_DIMS];
|
416
|
+
int ndims;
|
417
|
+
int status;
|
418
|
+
int i;
|
419
|
+
|
420
|
+
CHECK_ARGC(2);
|
421
|
+
CHECK_TYPE_ID(argv[0]); /* nc_id */
|
422
|
+
CHECK_TYPE_ID(argv[1]); /* var_id */
|
423
|
+
|
424
|
+
status = nc_inq_varndims(NUM2LONG(argv[0]), NUM2LONG(argv[1]), &ndims);
|
425
|
+
|
426
|
+
CHECK_STATUS(status);
|
427
|
+
|
428
|
+
status = nc_inq_vardimid(NUM2LONG(argv[0]), NUM2LONG(argv[1]), dimid);
|
429
|
+
|
430
|
+
CHECK_STATUS(status);
|
431
|
+
|
432
|
+
rdim = rb_ary_new();
|
433
|
+
for (i=0; i<ndims; i++) {
|
434
|
+
rb_ary_store(rdim, i, ULONG2NUM(dimid[i]));
|
435
|
+
}
|
436
|
+
|
437
|
+
return rdim;
|
438
|
+
}
|
439
|
+
|
440
|
+
static VALUE
|
441
|
+
rb_nc_inq_varnatts (int argc, VALUE *argv, VALUE mod)
|
442
|
+
{
|
443
|
+
int status, natts;
|
444
|
+
|
445
|
+
CHECK_ARGC(2);
|
446
|
+
CHECK_TYPE_ID(argv[0]);
|
447
|
+
CHECK_TYPE_ID(argv[1]);
|
448
|
+
|
449
|
+
status = nc_inq_varnatts(NUM2LONG(argv[0]), NUM2LONG(argv[1]), &natts);
|
450
|
+
|
451
|
+
CHECK_STATUS(status);
|
452
|
+
|
453
|
+
return LONG2NUM(natts);
|
454
|
+
}
|
455
|
+
|
456
|
+
|
457
|
+
static VALUE
|
458
|
+
rb_nc_inq_attname (int argc, VALUE *argv, VALUE mod)
|
459
|
+
{
|
460
|
+
int status;
|
461
|
+
char attname[NC_MAX_NAME];
|
462
|
+
|
463
|
+
CHECK_ARGC(3);
|
464
|
+
CHECK_TYPE_ID(argv[0]);
|
465
|
+
CHECK_TYPE_ID(argv[1]);
|
466
|
+
CHECK_TYPE_ID(argv[2]);
|
467
|
+
|
468
|
+
status = nc_inq_attname(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
469
|
+
NUM2LONG(argv[2]), attname);
|
470
|
+
|
471
|
+
CHECK_STATUS(status);
|
472
|
+
|
473
|
+
return rb_str_new2(attname);
|
474
|
+
}
|
475
|
+
|
476
|
+
static VALUE
|
477
|
+
rb_nc_inq_atttype (int argc, VALUE *argv, VALUE mod)
|
478
|
+
{
|
479
|
+
int status;
|
480
|
+
nc_type type;
|
481
|
+
|
482
|
+
CHECK_ARGC(3);
|
483
|
+
CHECK_TYPE_ID(argv[0]);
|
484
|
+
CHECK_TYPE_ID(argv[1]);
|
485
|
+
CHECK_TYPE_STRING(argv[2]);
|
486
|
+
|
487
|
+
status = nc_inq_atttype(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
488
|
+
StringValuePtr(argv[2]), &type);
|
489
|
+
|
490
|
+
CHECK_STATUS(status);
|
491
|
+
|
492
|
+
return LONG2NUM(type);
|
493
|
+
}
|
494
|
+
|
495
|
+
static VALUE
|
496
|
+
rb_nc_inq_attlen (int argc, VALUE *argv, VALUE mod)
|
497
|
+
{
|
498
|
+
size_t len;
|
499
|
+
int status;
|
500
|
+
|
501
|
+
CHECK_ARGC(3);
|
502
|
+
CHECK_TYPE_ID(argv[0]);
|
503
|
+
CHECK_TYPE_ID(argv[1]);
|
504
|
+
CHECK_TYPE_STRING(argv[2]);
|
505
|
+
|
506
|
+
status = nc_inq_attlen(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
507
|
+
StringValuePtr(argv[2]), &len);
|
508
|
+
|
509
|
+
CHECK_STATUS(status);
|
510
|
+
|
511
|
+
return LONG2NUM(len);
|
512
|
+
}
|
513
|
+
|
514
|
+
static VALUE
|
515
|
+
rb_nc_def_dim (int argc, VALUE *argv, VALUE mod)
|
516
|
+
{
|
517
|
+
int status, dimid;
|
518
|
+
|
519
|
+
CHECK_ARGC(3);
|
520
|
+
CHECK_TYPE_ID(argv[0]);
|
521
|
+
CHECK_TYPE_STRING(argv[1]);
|
522
|
+
CHECK_TYPE_INT(argv[2]);
|
523
|
+
|
524
|
+
status = nc_def_dim(NUM2LONG(argv[0]), StringValuePtr(argv[1]),
|
525
|
+
NUM2LONG(argv[2]), &dimid);
|
526
|
+
|
527
|
+
CHECK_STATUS(status);
|
528
|
+
|
529
|
+
return LONG2NUM(dimid);
|
530
|
+
}
|
531
|
+
|
532
|
+
static VALUE
|
533
|
+
rb_nc_def_var (int argc, VALUE *argv, VALUE mod)
|
534
|
+
{
|
535
|
+
volatile VALUE vdim;
|
536
|
+
int status, varid;
|
537
|
+
int ndims;
|
538
|
+
int dimids[NC_MAX_DIMS];
|
539
|
+
int i;
|
540
|
+
|
541
|
+
CHECK_ARGC(4);
|
542
|
+
CHECK_TYPE_ID(argv[0]);
|
543
|
+
CHECK_TYPE_STRING(argv[1]);
|
544
|
+
CHECK_TYPE_INT(argv[2]);
|
545
|
+
CHECK_TYPE_ARRAY(argv[3]);
|
546
|
+
|
547
|
+
vdim = argv[3];
|
548
|
+
|
549
|
+
ndims = RARRAY_LEN(vdim);
|
550
|
+
for (i=0; i<ndims; i++) {
|
551
|
+
dimids[i] = NUM2LONG(RARRAY_PTR(vdim)[i]);
|
552
|
+
}
|
553
|
+
|
554
|
+
status = nc_def_var(NUM2LONG(argv[0]), StringValuePtr(argv[1]),
|
555
|
+
NUM2LONG(argv[2]), ndims, dimids, &varid);
|
556
|
+
|
557
|
+
CHECK_STATUS(status);
|
558
|
+
|
559
|
+
return LONG2NUM(varid);
|
560
|
+
}
|
561
|
+
|
562
|
+
|
563
|
+
static VALUE
|
564
|
+
rb_nc_del_att (int argc, VALUE *argv, VALUE mod)
|
565
|
+
{
|
566
|
+
int status;
|
567
|
+
|
568
|
+
CHECK_ARGC(3);
|
569
|
+
CHECK_TYPE_ID(argv[0]);
|
570
|
+
CHECK_TYPE_ID(argv[1]);
|
571
|
+
CHECK_TYPE_STRING(argv[2]);
|
572
|
+
|
573
|
+
status = nc_del_att(NUM2LONG(argv[0]), NUM2LONG(argv[1]), StringValuePtr(argv[2]));
|
574
|
+
|
575
|
+
CHECK_STATUS(status);
|
576
|
+
|
577
|
+
return LONG2NUM(status);
|
578
|
+
}
|
579
|
+
|
580
|
+
static int
|
581
|
+
nc_get_att_numeric (int ncid, int varid, const char name[],
|
582
|
+
nc_type type, void *value)
|
583
|
+
{
|
584
|
+
switch (type) {
|
585
|
+
case NC_BYTE:
|
586
|
+
return nc_get_att_uchar(ncid, varid, name, value);
|
587
|
+
case NC_CHAR:
|
588
|
+
return nc_get_att_schar(ncid, varid, name, value);
|
589
|
+
case NC_SHORT:
|
590
|
+
return nc_get_att_short(ncid, varid, name, value);
|
591
|
+
case NC_INT:
|
592
|
+
return nc_get_att_int(ncid, varid, name, value);
|
593
|
+
case NC_FLOAT:
|
594
|
+
return nc_get_att_float(ncid, varid, name, value);
|
595
|
+
case NC_DOUBLE:
|
596
|
+
return nc_get_att_double(ncid, varid, name, value);
|
597
|
+
default:
|
598
|
+
return NC_EBADTYPE;
|
599
|
+
}
|
600
|
+
}
|
601
|
+
|
602
|
+
static int
|
603
|
+
nc_put_att_numeric (int ncid, int varid, const char name[],
|
604
|
+
nc_type type, nc_type xtype, size_t len, void *value)
|
605
|
+
{
|
606
|
+
switch (type) {
|
607
|
+
case NC_BYTE:
|
608
|
+
return nc_put_att_uchar(ncid, varid, name, xtype, len, value);
|
609
|
+
case NC_CHAR:
|
610
|
+
return nc_put_att_schar(ncid, varid, name, xtype, len, value);
|
611
|
+
case NC_SHORT:
|
612
|
+
return nc_put_att_short(ncid, varid, name, xtype, len, value);
|
613
|
+
case NC_INT:
|
614
|
+
return nc_put_att_int(ncid, varid, name, xtype, len, value);
|
615
|
+
case NC_FLOAT:
|
616
|
+
return nc_put_att_float(ncid, varid, name, xtype, len, value);
|
617
|
+
case NC_DOUBLE:
|
618
|
+
return nc_put_att_double(ncid, varid, name, xtype, len, value);
|
619
|
+
default:
|
620
|
+
return NC_EBADTYPE;
|
621
|
+
}
|
622
|
+
}
|
623
|
+
|
624
|
+
static VALUE
|
625
|
+
rb_nc_get_att (int argc, VALUE *argv, VALUE mod)
|
626
|
+
{
|
627
|
+
nc_type type;
|
628
|
+
size_t len;
|
629
|
+
int status;
|
630
|
+
|
631
|
+
CHECK_TYPE_ID(argv[0]);
|
632
|
+
CHECK_TYPE_ID(argv[1]);
|
633
|
+
CHECK_TYPE_STRING(argv[2]);
|
634
|
+
|
635
|
+
status = nc_inq_atttype(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
636
|
+
StringValuePtr(argv[2]), &type);
|
637
|
+
|
638
|
+
if ( status != NC_NOERR) {
|
639
|
+
return Qnil;
|
640
|
+
}
|
641
|
+
|
642
|
+
status = nc_inq_attlen(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
643
|
+
StringValuePtr(argv[2]), &len);
|
644
|
+
CHECK_STATUS(status);
|
645
|
+
|
646
|
+
if ( argc == 3 ) {
|
647
|
+
|
648
|
+
if ( type == NC_CHAR ) {
|
649
|
+
volatile VALUE text = rb_str_new(NULL, len);
|
650
|
+
status = nc_get_att_text(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
651
|
+
StringValuePtr(argv[2]),
|
652
|
+
StringValuePtr(text));
|
653
|
+
return text;
|
654
|
+
}
|
655
|
+
else if ( len == 1 ) {
|
656
|
+
switch ( type ) {
|
657
|
+
case NC_BYTE: {
|
658
|
+
uint8_t val;
|
659
|
+
status = nc_get_att_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
660
|
+
StringValuePtr(argv[2]), type, &val);
|
661
|
+
CHECK_STATUS(status);
|
662
|
+
return INT2NUM(val);
|
663
|
+
}
|
664
|
+
case NC_SHORT: {
|
665
|
+
int16_t val;
|
666
|
+
status = nc_get_att_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
667
|
+
StringValuePtr(argv[2]), type, &val);
|
668
|
+
CHECK_STATUS(status);
|
669
|
+
return INT2NUM(val);
|
670
|
+
}
|
671
|
+
case NC_INT: {
|
672
|
+
int32_t val;
|
673
|
+
status = nc_get_att_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
674
|
+
StringValuePtr(argv[2]), type, &val);
|
675
|
+
CHECK_STATUS(status);
|
676
|
+
return INT2NUM(val);
|
677
|
+
}
|
678
|
+
case NC_FLOAT: {
|
679
|
+
float32_t val;
|
680
|
+
status = nc_get_att_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
681
|
+
StringValuePtr(argv[2]), type, &val);
|
682
|
+
CHECK_STATUS(status);
|
683
|
+
return rb_float_new(val);
|
684
|
+
}
|
685
|
+
case NC_DOUBLE: {
|
686
|
+
float64_t val;
|
687
|
+
status = nc_get_att_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
688
|
+
StringValuePtr(argv[2]), type, &val);
|
689
|
+
CHECK_STATUS(status);
|
690
|
+
return rb_float_new(val);
|
691
|
+
}
|
692
|
+
default:
|
693
|
+
rb_raise(rb_eRuntimeError, "unknown att nc_type");
|
694
|
+
}
|
695
|
+
}
|
696
|
+
else {
|
697
|
+
volatile VALUE out;
|
698
|
+
CArray *ca;
|
699
|
+
int8_t data_type;
|
700
|
+
ca_size_t dim0 = len;
|
701
|
+
|
702
|
+
data_type = rb_nc_typemap (type);
|
703
|
+
out = rb_carray_new(data_type, 1, &dim0, 0, NULL);
|
704
|
+
|
705
|
+
Data_Get_Struct(out, CArray, ca);
|
706
|
+
|
707
|
+
status = nc_get_att_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
708
|
+
StringValuePtr(argv[2]), type, ca->ptr);
|
709
|
+
|
710
|
+
CHECK_STATUS(status);
|
711
|
+
|
712
|
+
return out;
|
713
|
+
}
|
714
|
+
}
|
715
|
+
else {
|
716
|
+
|
717
|
+
CHECK_ARGC(4);
|
718
|
+
|
719
|
+
if ( type == NC_CHAR ) {
|
720
|
+
volatile VALUE text = argv[3];
|
721
|
+
rb_str_resize(text, len);
|
722
|
+
status = nc_get_att_text(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
723
|
+
StringValuePtr(argv[2]),
|
724
|
+
StringValuePtr(text));
|
725
|
+
}
|
726
|
+
else {
|
727
|
+
CArray *ca;
|
728
|
+
nc_type xtype;
|
729
|
+
if ( ! rb_obj_is_kind_of(argv[3], rb_cCArray) ) {
|
730
|
+
rb_raise(rb_eTypeError, "arg4 must be a CArray object");
|
731
|
+
}
|
732
|
+
Data_Get_Struct(argv[3], CArray, ca);
|
733
|
+
xtype = rb_nc_rtypemap(ca->data_type);
|
734
|
+
ca_attach(ca);
|
735
|
+
status = nc_get_att_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
736
|
+
StringValuePtr(argv[2]), type, ca->ptr);
|
737
|
+
ca_sync(ca);
|
738
|
+
ca_detach(ca);
|
739
|
+
}
|
740
|
+
|
741
|
+
CHECK_STATUS(status);
|
742
|
+
|
743
|
+
return LONG2NUM(status);
|
744
|
+
}
|
745
|
+
}
|
746
|
+
|
747
|
+
static VALUE
|
748
|
+
rb_nc_put_att (int argc, VALUE *argv, VALUE mod)
|
749
|
+
{
|
750
|
+
int status;
|
751
|
+
|
752
|
+
CHECK_ARGC(4);
|
753
|
+
|
754
|
+
if ( TYPE(argv[3]) == T_STRING ) {
|
755
|
+
volatile VALUE text = argv[3];
|
756
|
+
status = nc_put_att_text(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
757
|
+
StringValuePtr(argv[2]),
|
758
|
+
strlen(StringValuePtr(text)), StringValuePtr(text));
|
759
|
+
}
|
760
|
+
else if ( rb_obj_is_kind_of(argv[3], rb_cInteger) ) {
|
761
|
+
int32_t val = NUM2INT(argv[3]);
|
762
|
+
status = nc_put_att_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
763
|
+
StringValuePtr(argv[2]),
|
764
|
+
NC_INT, NC_INT, 1, &val);
|
765
|
+
}
|
766
|
+
else if ( rb_obj_is_kind_of(argv[3], rb_cFloat) ) {
|
767
|
+
float64_t val = NUM2DBL(argv[3]);
|
768
|
+
status = nc_put_att_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
769
|
+
StringValuePtr(argv[2]),
|
770
|
+
NC_DOUBLE, NC_DOUBLE, 1, &val);
|
771
|
+
}
|
772
|
+
else {
|
773
|
+
CArray *ca;
|
774
|
+
nc_type xtype;
|
775
|
+
if ( ! rb_obj_is_kind_of(argv[3], rb_cCArray) ) {
|
776
|
+
rb_raise(rb_eTypeError, "arg4 must be a CArray object");
|
777
|
+
}
|
778
|
+
Data_Get_Struct(argv[3], CArray, ca);
|
779
|
+
xtype = rb_nc_rtypemap(ca->data_type);
|
780
|
+
ca_attach(ca);
|
781
|
+
status = nc_put_att_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
782
|
+
StringValuePtr(argv[2]),
|
783
|
+
xtype, xtype, ca->elements, ca->ptr);
|
784
|
+
ca_detach(ca);
|
785
|
+
}
|
786
|
+
|
787
|
+
CHECK_STATUS(status);
|
788
|
+
|
789
|
+
return LONG2NUM(status);
|
790
|
+
}
|
791
|
+
|
792
|
+
|
793
|
+
static int
|
794
|
+
nc_get_var1_numeric (int ncid, int varid,
|
795
|
+
nc_type type, size_t index[], void *value)
|
796
|
+
{
|
797
|
+
switch (type) {
|
798
|
+
case NC_BYTE:
|
799
|
+
return nc_get_var1_uchar(ncid, varid, index, value);
|
800
|
+
case NC_CHAR:
|
801
|
+
return nc_get_var1_schar(ncid, varid, index, value);
|
802
|
+
case NC_SHORT:
|
803
|
+
return nc_get_var1_short(ncid, varid, index, value);
|
804
|
+
case NC_INT:
|
805
|
+
return nc_get_var1_int(ncid, varid, index, value);
|
806
|
+
case NC_FLOAT:
|
807
|
+
return nc_get_var1_float(ncid, varid, index, value);
|
808
|
+
case NC_DOUBLE:
|
809
|
+
return nc_get_var1_double(ncid, varid, index, value);
|
810
|
+
default:
|
811
|
+
return NC_EBADTYPE;
|
812
|
+
}
|
813
|
+
}
|
814
|
+
|
815
|
+
static int
|
816
|
+
nc_put_var1_numeric (int ncid, int varid,
|
817
|
+
nc_type type, size_t index[], void *value)
|
818
|
+
{
|
819
|
+
switch (type) {
|
820
|
+
case NC_BYTE:
|
821
|
+
return nc_put_var1_uchar(ncid, varid, index, value);
|
822
|
+
case NC_CHAR:
|
823
|
+
return nc_put_var1_schar(ncid, varid, index, value);
|
824
|
+
case NC_SHORT:
|
825
|
+
return nc_put_var1_short(ncid, varid, index, value);
|
826
|
+
case NC_INT:
|
827
|
+
return nc_put_var1_int(ncid, varid, index, value);
|
828
|
+
case NC_FLOAT:
|
829
|
+
return nc_put_var1_float(ncid, varid, index, value);
|
830
|
+
case NC_DOUBLE:
|
831
|
+
return nc_put_var1_double(ncid, varid, index, value);
|
832
|
+
default:
|
833
|
+
return NC_EBADTYPE;
|
834
|
+
}
|
835
|
+
}
|
836
|
+
|
837
|
+
static int
|
838
|
+
nc_get_var_numeric (int ncid, int varid, nc_type type, void *value)
|
839
|
+
{
|
840
|
+
switch (type) {
|
841
|
+
case NC_BYTE:
|
842
|
+
return nc_get_var_uchar(ncid, varid, value);
|
843
|
+
case NC_CHAR:
|
844
|
+
return nc_get_var_schar(ncid, varid, value);
|
845
|
+
case NC_SHORT:
|
846
|
+
return nc_get_var_short(ncid, varid, value);
|
847
|
+
case NC_INT:
|
848
|
+
return nc_get_var_int(ncid, varid, value);
|
849
|
+
case NC_FLOAT:
|
850
|
+
return nc_get_var_float(ncid, varid, value);
|
851
|
+
case NC_DOUBLE:
|
852
|
+
return nc_get_var_double(ncid, varid, value);
|
853
|
+
default:
|
854
|
+
return NC_EBADTYPE;
|
855
|
+
}
|
856
|
+
}
|
857
|
+
|
858
|
+
static int
|
859
|
+
nc_put_var_numeric (int ncid, int varid, nc_type type, void *value)
|
860
|
+
{
|
861
|
+
switch (type) {
|
862
|
+
case NC_BYTE:
|
863
|
+
return nc_put_var_uchar(ncid, varid, value);
|
864
|
+
case NC_CHAR:
|
865
|
+
return nc_put_var_schar(ncid, varid, value);
|
866
|
+
case NC_SHORT:
|
867
|
+
return nc_put_var_short(ncid, varid, value);
|
868
|
+
case NC_INT:
|
869
|
+
return nc_put_var_int(ncid, varid, value);
|
870
|
+
case NC_FLOAT:
|
871
|
+
return nc_put_var_float(ncid, varid, value);
|
872
|
+
case NC_DOUBLE:
|
873
|
+
return nc_put_var_double(ncid, varid, value);
|
874
|
+
default:
|
875
|
+
return NC_EBADTYPE;
|
876
|
+
}
|
877
|
+
}
|
878
|
+
|
879
|
+
static int
|
880
|
+
nc_get_vara_numeric (int ncid, int varid, nc_type type,
|
881
|
+
const size_t start[], const size_t count[],
|
882
|
+
void *value)
|
883
|
+
{
|
884
|
+
switch (type) {
|
885
|
+
case NC_BYTE:
|
886
|
+
return nc_get_vara_uchar(ncid, varid, start, count, value);
|
887
|
+
case NC_CHAR:
|
888
|
+
return nc_get_vara_schar(ncid, varid, start, count, value);
|
889
|
+
case NC_SHORT:
|
890
|
+
return nc_get_vara_short(ncid, varid, start, count, value);
|
891
|
+
case NC_INT:
|
892
|
+
return nc_get_vara_int(ncid, varid, start, count, value);
|
893
|
+
case NC_FLOAT:
|
894
|
+
return nc_get_vara_float(ncid, varid, start, count, value);
|
895
|
+
case NC_DOUBLE:
|
896
|
+
return nc_get_vara_double(ncid, varid, start, count, value);
|
897
|
+
default:
|
898
|
+
return NC_EBADTYPE;
|
899
|
+
}
|
900
|
+
}
|
901
|
+
|
902
|
+
static int
|
903
|
+
nc_put_vara_numeric (int ncid, int varid, nc_type type,
|
904
|
+
const size_t start[], const size_t count[],
|
905
|
+
void *value)
|
906
|
+
{
|
907
|
+
switch (type) {
|
908
|
+
case NC_BYTE:
|
909
|
+
return nc_put_vara_uchar(ncid, varid, start, count, value);
|
910
|
+
case NC_CHAR:
|
911
|
+
return nc_put_vara_schar(ncid, varid, start, count, value);
|
912
|
+
case NC_SHORT:
|
913
|
+
return nc_put_vara_short(ncid, varid, start, count, value);
|
914
|
+
case NC_INT:
|
915
|
+
return nc_put_vara_int(ncid, varid, start, count, value);
|
916
|
+
case NC_FLOAT:
|
917
|
+
return nc_put_vara_float(ncid, varid, start, count, value);
|
918
|
+
case NC_DOUBLE:
|
919
|
+
return nc_put_vara_double(ncid, varid, start, count, value);
|
920
|
+
default:
|
921
|
+
return NC_EBADTYPE;
|
922
|
+
}
|
923
|
+
}
|
924
|
+
|
925
|
+
static int
|
926
|
+
nc_get_vars_numeric (int ncid, int varid, nc_type type,
|
927
|
+
const size_t start[], const size_t count[],
|
928
|
+
const ptrdiff_t stride[],
|
929
|
+
void *value)
|
930
|
+
{
|
931
|
+
switch (type) {
|
932
|
+
case NC_BYTE:
|
933
|
+
return nc_get_vars_uchar(ncid, varid, start, count, stride, value);
|
934
|
+
case NC_CHAR:
|
935
|
+
return nc_get_vars_schar(ncid, varid, start, count, stride, value);
|
936
|
+
case NC_SHORT:
|
937
|
+
return nc_get_vars_short(ncid, varid, start, count, stride, value);
|
938
|
+
case NC_INT:
|
939
|
+
return nc_get_vars_int(ncid, varid, start, count, stride, value);
|
940
|
+
case NC_FLOAT:
|
941
|
+
return nc_get_vars_float(ncid, varid, start, count, stride, value);
|
942
|
+
case NC_DOUBLE:
|
943
|
+
return nc_get_vars_double(ncid, varid, start, count, stride, value);
|
944
|
+
default:
|
945
|
+
return NC_EBADTYPE;
|
946
|
+
}
|
947
|
+
}
|
948
|
+
|
949
|
+
static int
|
950
|
+
nc_put_vars_numeric (int ncid, int varid, nc_type type,
|
951
|
+
const size_t start[], const size_t count[],
|
952
|
+
const ptrdiff_t stride[],
|
953
|
+
void *value)
|
954
|
+
{
|
955
|
+
switch (type) {
|
956
|
+
case NC_BYTE:
|
957
|
+
return nc_put_vars_uchar(ncid, varid, start, count, stride, value);
|
958
|
+
case NC_CHAR:
|
959
|
+
return nc_put_vars_schar(ncid, varid, start, count, stride, value);
|
960
|
+
case NC_SHORT:
|
961
|
+
return nc_put_vars_short(ncid, varid, start, count, stride, value);
|
962
|
+
case NC_INT:
|
963
|
+
return nc_put_vars_int(ncid, varid, start, count, stride, value);
|
964
|
+
case NC_FLOAT:
|
965
|
+
return nc_put_vars_float(ncid, varid, start, count, stride, value);
|
966
|
+
case NC_DOUBLE:
|
967
|
+
return nc_put_vars_double(ncid, varid, start, count, stride, value);
|
968
|
+
default:
|
969
|
+
return NC_EBADTYPE;
|
970
|
+
}
|
971
|
+
}
|
972
|
+
|
973
|
+
static int
|
974
|
+
nc_get_varm_numeric (int ncid, int varid, nc_type type,
|
975
|
+
const size_t start[], const size_t count[],
|
976
|
+
const ptrdiff_t stride[], const ptrdiff_t imap[],
|
977
|
+
void *value)
|
978
|
+
{
|
979
|
+
switch (type) {
|
980
|
+
case NC_BYTE:
|
981
|
+
return nc_get_varm_uchar(ncid, varid, start, count, stride, imap, value);
|
982
|
+
case NC_CHAR:
|
983
|
+
return nc_get_varm_schar(ncid, varid, start, count, stride, imap, value);
|
984
|
+
case NC_SHORT:
|
985
|
+
return nc_get_varm_short(ncid, varid, start, count, stride, imap, value);
|
986
|
+
case NC_INT:
|
987
|
+
return nc_get_varm_int(ncid, varid, start, count, stride, imap, value);
|
988
|
+
case NC_FLOAT:
|
989
|
+
return nc_get_varm_float(ncid, varid, start, count, stride, imap, value);
|
990
|
+
case NC_DOUBLE:
|
991
|
+
return nc_get_varm_double(ncid, varid, start, count, stride, imap, value);
|
992
|
+
default:
|
993
|
+
return NC_EBADTYPE;
|
994
|
+
}
|
995
|
+
}
|
996
|
+
|
997
|
+
static int
|
998
|
+
nc_put_varm_numeric (int ncid, int varid, nc_type type,
|
999
|
+
const size_t start[], const size_t count[],
|
1000
|
+
const ptrdiff_t stride[], const ptrdiff_t imap[],
|
1001
|
+
void *value)
|
1002
|
+
{
|
1003
|
+
switch (type) {
|
1004
|
+
case NC_BYTE:
|
1005
|
+
return nc_put_varm_uchar(ncid, varid, start, count, stride, imap, value);
|
1006
|
+
case NC_CHAR:
|
1007
|
+
return nc_put_varm_schar(ncid, varid, start, count, stride, imap, value);
|
1008
|
+
case NC_SHORT:
|
1009
|
+
return nc_put_varm_short(ncid, varid, start, count, stride, imap, value);
|
1010
|
+
case NC_INT:
|
1011
|
+
return nc_put_varm_int(ncid, varid, start, count, stride, imap, value);
|
1012
|
+
case NC_FLOAT:
|
1013
|
+
return nc_put_varm_float(ncid, varid, start, count, stride, imap, value);
|
1014
|
+
case NC_DOUBLE:
|
1015
|
+
return nc_put_varm_double(ncid, varid, start, count, stride, imap, value);
|
1016
|
+
default:
|
1017
|
+
return NC_EBADTYPE;
|
1018
|
+
}
|
1019
|
+
}
|
1020
|
+
|
1021
|
+
static VALUE
|
1022
|
+
rb_nc_get_var1 (int argc, VALUE *argv, VALUE mod)
|
1023
|
+
{
|
1024
|
+
int status;
|
1025
|
+
nc_type type;
|
1026
|
+
int ndims;
|
1027
|
+
size_t index[NC_MAX_DIMS];
|
1028
|
+
int i;
|
1029
|
+
|
1030
|
+
if ( argc < 3 ) {
|
1031
|
+
rb_raise(rb_eArgError, "invalid # of arguments");
|
1032
|
+
}
|
1033
|
+
|
1034
|
+
status = nc_inq_vartype(NUM2LONG(argv[0]), NUM2LONG(argv[1]), &type);
|
1035
|
+
|
1036
|
+
CHECK_STATUS(status);
|
1037
|
+
|
1038
|
+
status = nc_inq_varndims(NUM2LONG(argv[0]), NUM2LONG(argv[1]), &ndims);
|
1039
|
+
|
1040
|
+
CHECK_STATUS(status);
|
1041
|
+
|
1042
|
+
Check_Type(argv[2], T_ARRAY);
|
1043
|
+
for (i=0; i<ndims; i++) {
|
1044
|
+
index[i] = NUM2ULONG(RARRAY_PTR(argv[2])[i]);
|
1045
|
+
}
|
1046
|
+
|
1047
|
+
if ( argc == 3 ) {
|
1048
|
+
switch ( type ) {
|
1049
|
+
case NC_BYTE: {
|
1050
|
+
uint8_t val;
|
1051
|
+
status = nc_get_var1_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
1052
|
+
type, index, &val);
|
1053
|
+
CHECK_STATUS(status);
|
1054
|
+
return INT2NUM(val);
|
1055
|
+
}
|
1056
|
+
case NC_SHORT: {
|
1057
|
+
int16_t val;
|
1058
|
+
status = nc_get_var1_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
1059
|
+
type, index, &val);
|
1060
|
+
CHECK_STATUS(status);
|
1061
|
+
return INT2NUM(val);
|
1062
|
+
}
|
1063
|
+
case NC_INT: {
|
1064
|
+
int32_t val;
|
1065
|
+
status = nc_get_var1_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
1066
|
+
type, index, &val);
|
1067
|
+
CHECK_STATUS(status);
|
1068
|
+
return INT2NUM(val);
|
1069
|
+
}
|
1070
|
+
case NC_FLOAT: {
|
1071
|
+
float32_t val;
|
1072
|
+
status = nc_get_var1_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
1073
|
+
type, index, &val);
|
1074
|
+
CHECK_STATUS(status);
|
1075
|
+
return rb_float_new(val);
|
1076
|
+
}
|
1077
|
+
case NC_DOUBLE: {
|
1078
|
+
float64_t val;
|
1079
|
+
status = nc_get_var1_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
1080
|
+
type, index, &val);
|
1081
|
+
CHECK_STATUS(status);
|
1082
|
+
return rb_float_new(val);
|
1083
|
+
}
|
1084
|
+
default:
|
1085
|
+
rb_raise(rb_eRuntimeError, "unknown att nc_type");
|
1086
|
+
}
|
1087
|
+
}
|
1088
|
+
else {
|
1089
|
+
volatile VALUE data = argv[3];
|
1090
|
+
CArray *ca;
|
1091
|
+
|
1092
|
+
if ( ! rb_obj_is_kind_of(data, rb_cCArray) ) {
|
1093
|
+
rb_raise(rb_eTypeError, "arg4 must be a CArray object");
|
1094
|
+
}
|
1095
|
+
|
1096
|
+
Data_Get_Struct(data, CArray, ca);
|
1097
|
+
|
1098
|
+
type = rb_nc_rtypemap(ca->data_type);
|
1099
|
+
|
1100
|
+
ca_attach(ca);
|
1101
|
+
status = nc_get_var1_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
1102
|
+
type, index, ca->ptr);
|
1103
|
+
|
1104
|
+
ca_sync(ca);
|
1105
|
+
ca_detach(ca);
|
1106
|
+
|
1107
|
+
CHECK_STATUS(status);
|
1108
|
+
|
1109
|
+
return LONG2NUM(status);
|
1110
|
+
}
|
1111
|
+
|
1112
|
+
}
|
1113
|
+
|
1114
|
+
static VALUE
|
1115
|
+
rb_nc_put_var1 (int argc, VALUE *argv, VALUE mod)
|
1116
|
+
{
|
1117
|
+
volatile VALUE data;
|
1118
|
+
int status;
|
1119
|
+
nc_type type;
|
1120
|
+
size_t index[NC_MAX_DIMS];
|
1121
|
+
int ndims;
|
1122
|
+
CArray *ca;
|
1123
|
+
int i;
|
1124
|
+
|
1125
|
+
CHECK_ARGC(4);
|
1126
|
+
|
1127
|
+
status = nc_inq_varndims(NUM2LONG(argv[0]), NUM2LONG(argv[1]), &ndims);
|
1128
|
+
|
1129
|
+
CHECK_STATUS(status);
|
1130
|
+
|
1131
|
+
Check_Type(argv[2], T_ARRAY);
|
1132
|
+
|
1133
|
+
for (i=0; i<ndims; i++) {
|
1134
|
+
index[i] = NUM2ULONG(RARRAY_PTR(argv[2])[i]);
|
1135
|
+
}
|
1136
|
+
|
1137
|
+
data = argv[3];
|
1138
|
+
|
1139
|
+
if ( ! rb_obj_is_kind_of(data, rb_cCArray) ) {
|
1140
|
+
rb_raise(rb_eTypeError, "arg4 must be a CArray object");
|
1141
|
+
}
|
1142
|
+
|
1143
|
+
Data_Get_Struct(data, CArray, ca);
|
1144
|
+
|
1145
|
+
type = rb_nc_rtypemap(ca->data_type);
|
1146
|
+
|
1147
|
+
ca_attach(ca);
|
1148
|
+
status = nc_put_var1_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
1149
|
+
type, index, ca->ptr);
|
1150
|
+
ca_detach(ca);
|
1151
|
+
|
1152
|
+
CHECK_STATUS(status);
|
1153
|
+
|
1154
|
+
return LONG2NUM(status);
|
1155
|
+
}
|
1156
|
+
|
1157
|
+
static VALUE
|
1158
|
+
rb_nc_get_var (int argc, VALUE *argv, VALUE mod)
|
1159
|
+
{
|
1160
|
+
int status;
|
1161
|
+
int ndims;
|
1162
|
+
int dimid[NC_MAX_DIMS];
|
1163
|
+
nc_type type;
|
1164
|
+
|
1165
|
+
if ( argc < 2 ) {
|
1166
|
+
rb_raise(rb_eArgError, "invalid # of arguments");
|
1167
|
+
}
|
1168
|
+
|
1169
|
+
status = nc_inq_vartype(NUM2LONG(argv[0]), NUM2LONG(argv[1]), &type);
|
1170
|
+
|
1171
|
+
CHECK_STATUS(status);
|
1172
|
+
|
1173
|
+
status = nc_inq_varndims(NUM2LONG(argv[0]), NUM2LONG(argv[1]), &ndims);
|
1174
|
+
|
1175
|
+
CHECK_STATUS(status);
|
1176
|
+
|
1177
|
+
status = nc_inq_vardimid(NUM2LONG(argv[0]), NUM2LONG(argv[1]), dimid);
|
1178
|
+
|
1179
|
+
CHECK_STATUS(status);
|
1180
|
+
|
1181
|
+
if ( argc == 2 ) {
|
1182
|
+
volatile VALUE out;
|
1183
|
+
CArray *ca;
|
1184
|
+
int8_t rank, data_type;
|
1185
|
+
ca_size_t dim[CA_RANK_MAX];
|
1186
|
+
size_t len;
|
1187
|
+
int i;
|
1188
|
+
|
1189
|
+
data_type = rb_nc_typemap (type);
|
1190
|
+
rank = ndims;
|
1191
|
+
for (i=0; i<rank; i++) {
|
1192
|
+
status = nc_inq_dimlen(NUM2LONG(argv[0]), dimid[i], &len);
|
1193
|
+
CHECK_STATUS(status);
|
1194
|
+
dim[i] = len;
|
1195
|
+
}
|
1196
|
+
|
1197
|
+
out = rb_carray_new(data_type, rank, dim, 0, NULL);
|
1198
|
+
Data_Get_Struct(out, CArray, ca);
|
1199
|
+
|
1200
|
+
status = nc_get_var_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
1201
|
+
type, ca->ptr);
|
1202
|
+
|
1203
|
+
CHECK_STATUS(status);
|
1204
|
+
|
1205
|
+
return out;
|
1206
|
+
}
|
1207
|
+
else {
|
1208
|
+
volatile VALUE data = argv[2];
|
1209
|
+
CArray *ca;
|
1210
|
+
|
1211
|
+
if ( ! rb_obj_is_kind_of(data, rb_cCArray) ) {
|
1212
|
+
rb_raise(rb_eTypeError, "arg3 must be a CArray object");
|
1213
|
+
}
|
1214
|
+
|
1215
|
+
Data_Get_Struct(data, CArray, ca);
|
1216
|
+
|
1217
|
+
type = rb_nc_rtypemap(ca->data_type);
|
1218
|
+
|
1219
|
+
ca_attach(ca);
|
1220
|
+
status = nc_get_var_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
1221
|
+
type, ca->ptr);
|
1222
|
+
ca_sync(ca);
|
1223
|
+
ca_detach(ca);
|
1224
|
+
|
1225
|
+
CHECK_STATUS(status);
|
1226
|
+
|
1227
|
+
return LONG2NUM(status);
|
1228
|
+
}
|
1229
|
+
}
|
1230
|
+
|
1231
|
+
static VALUE
|
1232
|
+
rb_nc_put_var (int argc, VALUE *argv, VALUE mod)
|
1233
|
+
{
|
1234
|
+
volatile VALUE data;
|
1235
|
+
int status;
|
1236
|
+
nc_type type;
|
1237
|
+
CArray *ca;
|
1238
|
+
|
1239
|
+
CHECK_ARGC(3);
|
1240
|
+
|
1241
|
+
status = nc_inq_vartype(NUM2LONG(argv[0]), NUM2LONG(argv[1]), &type);
|
1242
|
+
|
1243
|
+
CHECK_STATUS(status);
|
1244
|
+
|
1245
|
+
data = argv[2];
|
1246
|
+
|
1247
|
+
if ( ! rb_obj_is_kind_of(data, rb_cCArray) ) {
|
1248
|
+
rb_raise(rb_eTypeError, "arg3 must be a CArray object");
|
1249
|
+
}
|
1250
|
+
|
1251
|
+
Data_Get_Struct(data, CArray, ca);
|
1252
|
+
|
1253
|
+
type = rb_nc_rtypemap(ca->data_type);
|
1254
|
+
ca_attach(ca);
|
1255
|
+
status = nc_put_var_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
1256
|
+
type, ca->ptr);
|
1257
|
+
ca_detach(ca);
|
1258
|
+
|
1259
|
+
CHECK_STATUS(status);
|
1260
|
+
|
1261
|
+
return LONG2NUM(status);
|
1262
|
+
}
|
1263
|
+
|
1264
|
+
static VALUE
|
1265
|
+
rb_nc_get_vara (int argc, VALUE *argv, VALUE mod)
|
1266
|
+
{
|
1267
|
+
int status;
|
1268
|
+
nc_type type;
|
1269
|
+
int ndims;
|
1270
|
+
int dimid[NC_MAX_DIMS];
|
1271
|
+
size_t start[NC_MAX_DIMS], count[NC_MAX_DIMS];
|
1272
|
+
int i;
|
1273
|
+
|
1274
|
+
if ( argc < 4 ) {
|
1275
|
+
rb_raise(rb_eArgError, "invalid # of arguments");
|
1276
|
+
}
|
1277
|
+
|
1278
|
+
status = nc_inq_vartype(NUM2LONG(argv[0]), NUM2LONG(argv[1]), &type);
|
1279
|
+
|
1280
|
+
CHECK_STATUS(status);
|
1281
|
+
|
1282
|
+
status = nc_inq_varndims(NUM2LONG(argv[0]), NUM2LONG(argv[1]), &ndims);
|
1283
|
+
|
1284
|
+
CHECK_STATUS(status);
|
1285
|
+
|
1286
|
+
status = nc_inq_vardimid(NUM2LONG(argv[0]), NUM2LONG(argv[1]), dimid);
|
1287
|
+
|
1288
|
+
CHECK_STATUS(status);
|
1289
|
+
|
1290
|
+
Check_Type(argv[2], T_ARRAY);
|
1291
|
+
Check_Type(argv[3], T_ARRAY);
|
1292
|
+
|
1293
|
+
for (i=0; i<ndims; i++) {
|
1294
|
+
start[i] = NUM2ULONG(RARRAY_PTR(argv[2])[i]);
|
1295
|
+
count[i] = NUM2ULONG(RARRAY_PTR(argv[3])[i]);
|
1296
|
+
}
|
1297
|
+
|
1298
|
+
if ( argc == 4 ) {
|
1299
|
+
volatile VALUE out;
|
1300
|
+
CArray *ca;
|
1301
|
+
int8_t rank, data_type;
|
1302
|
+
ca_size_t dim[CA_RANK_MAX];
|
1303
|
+
int i;
|
1304
|
+
|
1305
|
+
data_type = rb_nc_typemap (type);
|
1306
|
+
rank = ndims;
|
1307
|
+
for (i=0; i<rank; i++) {
|
1308
|
+
dim[i] = count[i];
|
1309
|
+
}
|
1310
|
+
|
1311
|
+
out = rb_carray_new(data_type, rank, dim, 0, NULL);
|
1312
|
+
Data_Get_Struct(out, CArray, ca);
|
1313
|
+
|
1314
|
+
status = nc_get_vara_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
1315
|
+
type, start, count, ca->ptr);
|
1316
|
+
|
1317
|
+
CHECK_STATUS(status);
|
1318
|
+
|
1319
|
+
return out;
|
1320
|
+
}
|
1321
|
+
else {
|
1322
|
+
volatile VALUE data = argv[4];
|
1323
|
+
CArray *ca;
|
1324
|
+
|
1325
|
+
if ( ! rb_obj_is_kind_of(data, rb_cCArray) ) {
|
1326
|
+
rb_raise(rb_eTypeError, "arg5 must be a CArray object");
|
1327
|
+
}
|
1328
|
+
Data_Get_Struct(data, CArray, ca);
|
1329
|
+
|
1330
|
+
if ( ca->rank != ndims ) {
|
1331
|
+
rb_raise(rb_eRuntimeError, "rank mismatch");
|
1332
|
+
}
|
1333
|
+
|
1334
|
+
for (i=0; i<ca->rank; i++) {
|
1335
|
+
if ( ca->dim[i] != count[i] ) {
|
1336
|
+
rb_raise(rb_eRuntimeError, "dim[%i] mismatch", i);
|
1337
|
+
}
|
1338
|
+
}
|
1339
|
+
|
1340
|
+
type = rb_nc_rtypemap(ca->data_type);
|
1341
|
+
|
1342
|
+
ca_attach(ca);
|
1343
|
+
status = nc_get_vara_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
1344
|
+
type, start, count, ca->ptr);
|
1345
|
+
ca_sync(ca);
|
1346
|
+
ca_detach(ca);
|
1347
|
+
|
1348
|
+
CHECK_STATUS(status);
|
1349
|
+
|
1350
|
+
return LONG2NUM(status);
|
1351
|
+
}
|
1352
|
+
}
|
1353
|
+
|
1354
|
+
static VALUE
|
1355
|
+
rb_nc_put_vara (int argc, VALUE *argv, VALUE mod)
|
1356
|
+
{
|
1357
|
+
volatile VALUE data;
|
1358
|
+
int status;
|
1359
|
+
nc_type type;
|
1360
|
+
int ndims;
|
1361
|
+
size_t start[NC_MAX_DIMS], count[NC_MAX_DIMS];
|
1362
|
+
CArray *ca;
|
1363
|
+
int i;
|
1364
|
+
|
1365
|
+
CHECK_ARGC(5);
|
1366
|
+
|
1367
|
+
status = nc_inq_varndims(NUM2LONG(argv[0]), NUM2LONG(argv[1]), &ndims);
|
1368
|
+
|
1369
|
+
CHECK_STATUS(status);
|
1370
|
+
|
1371
|
+
Check_Type(argv[2], T_ARRAY);
|
1372
|
+
Check_Type(argv[3], T_ARRAY);
|
1373
|
+
|
1374
|
+
for (i=0; i<ndims; i++) {
|
1375
|
+
start[i] = NUM2ULONG(RARRAY_PTR(argv[2])[i]);
|
1376
|
+
count[i] = NUM2ULONG(RARRAY_PTR(argv[3])[i]);
|
1377
|
+
}
|
1378
|
+
|
1379
|
+
data = argv[4];
|
1380
|
+
|
1381
|
+
if ( ! rb_obj_is_kind_of(data, rb_cCArray) ) {
|
1382
|
+
rb_raise(rb_eTypeError, "arg5 must be a CArray object");
|
1383
|
+
}
|
1384
|
+
|
1385
|
+
Data_Get_Struct(data, CArray, ca);
|
1386
|
+
|
1387
|
+
type = rb_nc_rtypemap(ca->data_type);
|
1388
|
+
|
1389
|
+
ca_attach(ca);
|
1390
|
+
status = nc_put_vara_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
1391
|
+
type, start, count, ca->ptr);
|
1392
|
+
ca_detach(ca);
|
1393
|
+
|
1394
|
+
CHECK_STATUS(status);
|
1395
|
+
|
1396
|
+
return LONG2NUM(status);
|
1397
|
+
}
|
1398
|
+
|
1399
|
+
static VALUE
|
1400
|
+
rb_nc_get_vars (int argc, VALUE *argv, VALUE mod)
|
1401
|
+
{
|
1402
|
+
int status;
|
1403
|
+
nc_type type;
|
1404
|
+
int ndims;
|
1405
|
+
int dimid[NC_MAX_DIMS];
|
1406
|
+
size_t start[NC_MAX_DIMS], count[NC_MAX_DIMS];
|
1407
|
+
ptrdiff_t stride[NC_MAX_DIMS];
|
1408
|
+
CArray *ca;
|
1409
|
+
int i;
|
1410
|
+
|
1411
|
+
if ( argc < 5 ) {
|
1412
|
+
rb_raise(rb_eArgError, "invalid # of arguments");
|
1413
|
+
}
|
1414
|
+
|
1415
|
+
status = nc_inq_vartype(NUM2LONG(argv[0]), NUM2LONG(argv[1]), &type);
|
1416
|
+
|
1417
|
+
CHECK_STATUS(status);
|
1418
|
+
|
1419
|
+
status = nc_inq_varndims(NUM2LONG(argv[0]), NUM2LONG(argv[1]), &ndims);
|
1420
|
+
|
1421
|
+
CHECK_STATUS(status);
|
1422
|
+
|
1423
|
+
status = nc_inq_vardimid(NUM2LONG(argv[0]), NUM2LONG(argv[1]), dimid);
|
1424
|
+
|
1425
|
+
CHECK_STATUS(status);
|
1426
|
+
|
1427
|
+
Check_Type(argv[2], T_ARRAY);
|
1428
|
+
Check_Type(argv[3], T_ARRAY);
|
1429
|
+
Check_Type(argv[4], T_ARRAY);
|
1430
|
+
|
1431
|
+
for (i=0; i<ndims; i++) {
|
1432
|
+
start[i] = NUM2ULONG(RARRAY_PTR(argv[2])[i]);
|
1433
|
+
count[i] = NUM2ULONG(RARRAY_PTR(argv[3])[i]);
|
1434
|
+
stride[i] = NUM2ULONG(RARRAY_PTR(argv[4])[i]);
|
1435
|
+
}
|
1436
|
+
|
1437
|
+
if ( argc == 5 ) {
|
1438
|
+
volatile VALUE out;
|
1439
|
+
CArray *ca;
|
1440
|
+
int8_t rank, data_type;
|
1441
|
+
ca_size_t dim[CA_RANK_MAX];
|
1442
|
+
int i;
|
1443
|
+
|
1444
|
+
data_type = rb_nc_typemap (type);
|
1445
|
+
rank = ndims;
|
1446
|
+
for (i=0; i<rank; i++) {
|
1447
|
+
dim[i] = count[i];
|
1448
|
+
}
|
1449
|
+
|
1450
|
+
out = rb_carray_new(data_type, rank, dim, 0, NULL);
|
1451
|
+
Data_Get_Struct(out, CArray, ca);
|
1452
|
+
|
1453
|
+
status = nc_get_vars_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
1454
|
+
type, start, count, stride, ca->ptr);
|
1455
|
+
|
1456
|
+
CHECK_STATUS(status);
|
1457
|
+
|
1458
|
+
return out;
|
1459
|
+
}
|
1460
|
+
else {
|
1461
|
+
volatile VALUE data = argv[5];
|
1462
|
+
int i;
|
1463
|
+
|
1464
|
+
if ( ! rb_obj_is_kind_of(data, rb_cCArray) ) {
|
1465
|
+
rb_raise(rb_eTypeError, "arg6 must be a CArray object");
|
1466
|
+
}
|
1467
|
+
|
1468
|
+
Data_Get_Struct(data, CArray, ca);
|
1469
|
+
|
1470
|
+
if ( ca->rank != ndims ) {
|
1471
|
+
rb_raise(rb_eRuntimeError, "rank mismatch");
|
1472
|
+
}
|
1473
|
+
|
1474
|
+
for (i=0; i<ca->rank; i++) {
|
1475
|
+
if ( ca->dim[i] != count[i] ) {
|
1476
|
+
rb_raise(rb_eRuntimeError, "dim[%i] mismatch", i);
|
1477
|
+
}
|
1478
|
+
}
|
1479
|
+
|
1480
|
+
type = rb_nc_rtypemap(ca->data_type);
|
1481
|
+
|
1482
|
+
ca_attach(ca);
|
1483
|
+
status = nc_get_vars_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
1484
|
+
type, start, count, stride, ca->ptr);
|
1485
|
+
ca_sync(ca);
|
1486
|
+
ca_detach(ca);
|
1487
|
+
|
1488
|
+
CHECK_STATUS(status);
|
1489
|
+
|
1490
|
+
return LONG2NUM(status);
|
1491
|
+
}
|
1492
|
+
}
|
1493
|
+
|
1494
|
+
static VALUE
|
1495
|
+
rb_nc_put_vars (int argc, VALUE *argv, VALUE mod)
|
1496
|
+
{
|
1497
|
+
volatile VALUE data;
|
1498
|
+
int status;
|
1499
|
+
nc_type type;
|
1500
|
+
int ndims;
|
1501
|
+
size_t start[NC_MAX_DIMS], count[NC_MAX_DIMS];
|
1502
|
+
ptrdiff_t stride[NC_MAX_DIMS];
|
1503
|
+
CArray *ca;
|
1504
|
+
int i;
|
1505
|
+
|
1506
|
+
CHECK_ARGC(6);
|
1507
|
+
|
1508
|
+
status = nc_inq_varndims(NUM2LONG(argv[0]), NUM2LONG(argv[1]), &ndims);
|
1509
|
+
|
1510
|
+
CHECK_STATUS(status);
|
1511
|
+
|
1512
|
+
Check_Type(argv[2], T_ARRAY);
|
1513
|
+
Check_Type(argv[3], T_ARRAY);
|
1514
|
+
Check_Type(argv[4], T_ARRAY);
|
1515
|
+
|
1516
|
+
for (i=0; i<ndims; i++) {
|
1517
|
+
start[i] = NUM2ULONG(RARRAY_PTR(argv[2])[i]);
|
1518
|
+
count[i] = NUM2ULONG(RARRAY_PTR(argv[3])[i]);
|
1519
|
+
stride[i] = NUM2ULONG(RARRAY_PTR(argv[4])[i]);
|
1520
|
+
}
|
1521
|
+
|
1522
|
+
data = argv[5];
|
1523
|
+
|
1524
|
+
if ( ! rb_obj_is_kind_of(data, rb_cCArray) ) {
|
1525
|
+
rb_raise(rb_eTypeError, "arg6 must be a CArray object");
|
1526
|
+
}
|
1527
|
+
|
1528
|
+
Data_Get_Struct(data, CArray, ca);
|
1529
|
+
|
1530
|
+
type = rb_nc_rtypemap(ca->data_type);
|
1531
|
+
|
1532
|
+
ca_attach(ca);
|
1533
|
+
status = nc_put_vars_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
1534
|
+
type, start, count, stride, ca->ptr);
|
1535
|
+
ca_detach(ca);
|
1536
|
+
|
1537
|
+
CHECK_STATUS(status);
|
1538
|
+
|
1539
|
+
return LONG2NUM(status);
|
1540
|
+
}
|
1541
|
+
|
1542
|
+
static VALUE
|
1543
|
+
rb_nc_get_varm (int argc, VALUE *argv, VALUE mod)
|
1544
|
+
{
|
1545
|
+
int status;
|
1546
|
+
nc_type type;
|
1547
|
+
int ndims;
|
1548
|
+
int dimid[NC_MAX_DIMS];
|
1549
|
+
size_t start[NC_MAX_DIMS], count[NC_MAX_DIMS];
|
1550
|
+
ptrdiff_t stride[NC_MAX_DIMS], imap[NC_MAX_DIMS];
|
1551
|
+
CArray *ca;
|
1552
|
+
int i;
|
1553
|
+
|
1554
|
+
if ( argc < 6 ) {
|
1555
|
+
rb_raise(rb_eArgError, "invalid # of arguments");
|
1556
|
+
}
|
1557
|
+
|
1558
|
+
status = nc_inq_vartype(NUM2LONG(argv[0]), NUM2LONG(argv[1]), &type);
|
1559
|
+
|
1560
|
+
CHECK_STATUS(status);
|
1561
|
+
|
1562
|
+
status = nc_inq_varndims(NUM2LONG(argv[0]), NUM2LONG(argv[1]), &ndims);
|
1563
|
+
|
1564
|
+
CHECK_STATUS(status);
|
1565
|
+
|
1566
|
+
status = nc_inq_vardimid(NUM2LONG(argv[0]), NUM2LONG(argv[1]), dimid);
|
1567
|
+
|
1568
|
+
CHECK_STATUS(status);
|
1569
|
+
|
1570
|
+
Check_Type(argv[2], T_ARRAY);
|
1571
|
+
Check_Type(argv[3], T_ARRAY);
|
1572
|
+
Check_Type(argv[4], T_ARRAY);
|
1573
|
+
Check_Type(argv[5], T_ARRAY);
|
1574
|
+
|
1575
|
+
for (i=0; i<ndims; i++) {
|
1576
|
+
start[i] = NUM2ULONG(RARRAY_PTR(argv[2])[i]);
|
1577
|
+
count[i] = NUM2ULONG(RARRAY_PTR(argv[3])[i]);
|
1578
|
+
stride[i] = NUM2ULONG(RARRAY_PTR(argv[4])[i]);
|
1579
|
+
imap[i] = NUM2ULONG(RARRAY_PTR(argv[5])[i]);
|
1580
|
+
}
|
1581
|
+
|
1582
|
+
if ( argc == 6 ) {
|
1583
|
+
volatile VALUE out;
|
1584
|
+
CArray *ca;
|
1585
|
+
int8_t rank, data_type;
|
1586
|
+
ca_size_t dim[CA_RANK_MAX];
|
1587
|
+
int i;
|
1588
|
+
|
1589
|
+
data_type = rb_nc_typemap (type);
|
1590
|
+
rank = ndims;
|
1591
|
+
for (i=0; i<rank; i++) {
|
1592
|
+
dim[i] = count[i];
|
1593
|
+
}
|
1594
|
+
|
1595
|
+
out = rb_carray_new(data_type, rank, dim, 0, NULL);
|
1596
|
+
Data_Get_Struct(out, CArray, ca);
|
1597
|
+
|
1598
|
+
status = nc_get_varm_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
1599
|
+
type, start, count, stride, imap, ca->ptr);
|
1600
|
+
|
1601
|
+
CHECK_STATUS(status);
|
1602
|
+
|
1603
|
+
return out;
|
1604
|
+
}
|
1605
|
+
else {
|
1606
|
+
volatile VALUE data = argv[6];
|
1607
|
+
int i;
|
1608
|
+
|
1609
|
+
if ( ! rb_obj_is_kind_of(data, rb_cCArray) ) {
|
1610
|
+
rb_raise(rb_eTypeError, "arg6 must be a CArray object");
|
1611
|
+
}
|
1612
|
+
|
1613
|
+
Data_Get_Struct(data, CArray, ca);
|
1614
|
+
|
1615
|
+
if ( ca->rank != ndims ) {
|
1616
|
+
rb_raise(rb_eRuntimeError, "rank mismatch");
|
1617
|
+
}
|
1618
|
+
|
1619
|
+
for (i=0; i<ca->rank; i++) {
|
1620
|
+
if ( ca->dim[i] != count[i] ) {
|
1621
|
+
rb_raise(rb_eRuntimeError, "dim[%i] mismatch", i);
|
1622
|
+
}
|
1623
|
+
}
|
1624
|
+
|
1625
|
+
type = rb_nc_rtypemap(ca->data_type);
|
1626
|
+
|
1627
|
+
ca_attach(ca);
|
1628
|
+
status = nc_get_varm_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
1629
|
+
type, start, count, stride, imap, ca->ptr);
|
1630
|
+
ca_sync(ca);
|
1631
|
+
ca_detach(ca);
|
1632
|
+
|
1633
|
+
CHECK_STATUS(status);
|
1634
|
+
|
1635
|
+
return LONG2NUM(status);
|
1636
|
+
}
|
1637
|
+
}
|
1638
|
+
|
1639
|
+
static VALUE
|
1640
|
+
rb_nc_put_varm (int argc, VALUE *argv, VALUE mod)
|
1641
|
+
{
|
1642
|
+
volatile VALUE data;
|
1643
|
+
int status;
|
1644
|
+
nc_type type;
|
1645
|
+
int ndims;
|
1646
|
+
size_t start[NC_MAX_DIMS], count[NC_MAX_DIMS];
|
1647
|
+
ptrdiff_t stride[NC_MAX_DIMS], imap[NC_MAX_DIMS];
|
1648
|
+
CArray *ca;
|
1649
|
+
int i;
|
1650
|
+
|
1651
|
+
CHECK_ARGC(7);
|
1652
|
+
|
1653
|
+
status = nc_inq_varndims(NUM2LONG(argv[0]), NUM2LONG(argv[1]), &ndims);
|
1654
|
+
|
1655
|
+
CHECK_STATUS(status);
|
1656
|
+
|
1657
|
+
Check_Type(argv[2], T_ARRAY);
|
1658
|
+
Check_Type(argv[3], T_ARRAY);
|
1659
|
+
Check_Type(argv[4], T_ARRAY);
|
1660
|
+
Check_Type(argv[5], T_ARRAY);
|
1661
|
+
|
1662
|
+
for (i=0; i<ndims; i++) {
|
1663
|
+
start[i] = NUM2ULONG(RARRAY_PTR(argv[2])[i]);
|
1664
|
+
count[i] = NUM2ULONG(RARRAY_PTR(argv[3])[i]);
|
1665
|
+
stride[i] = NUM2ULONG(RARRAY_PTR(argv[4])[i]);
|
1666
|
+
imap[i] = NUM2ULONG(RARRAY_PTR(argv[5])[i]);
|
1667
|
+
}
|
1668
|
+
|
1669
|
+
data = argv[6];
|
1670
|
+
|
1671
|
+
if ( ! rb_obj_is_kind_of(data, rb_cCArray) ) {
|
1672
|
+
rb_raise(rb_eTypeError, "arg7 must be a CArray object");
|
1673
|
+
}
|
1674
|
+
|
1675
|
+
Data_Get_Struct(data, CArray, ca);
|
1676
|
+
|
1677
|
+
type = rb_nc_rtypemap(ca->data_type);
|
1678
|
+
|
1679
|
+
ca_attach(ca);
|
1680
|
+
status = nc_put_varm_numeric(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
1681
|
+
type, start, count, stride, imap, ca->ptr);
|
1682
|
+
ca_detach(ca);
|
1683
|
+
|
1684
|
+
CHECK_STATUS(status);
|
1685
|
+
|
1686
|
+
return LONG2NUM(status);
|
1687
|
+
}
|
1688
|
+
|
1689
|
+
static VALUE
|
1690
|
+
rb_nc_rename_dim (int argc, VALUE *argv, VALUE mod)
|
1691
|
+
{
|
1692
|
+
int status;
|
1693
|
+
|
1694
|
+
CHECK_ARGC(3);
|
1695
|
+
CHECK_TYPE_ID(argv[0]);
|
1696
|
+
CHECK_TYPE_ID(argv[1]);
|
1697
|
+
CHECK_TYPE_STRING(argv[2]);
|
1698
|
+
|
1699
|
+
status = nc_rename_dim(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
1700
|
+
StringValuePtr(argv[2]));
|
1701
|
+
|
1702
|
+
CHECK_STATUS(status);
|
1703
|
+
|
1704
|
+
return LONG2NUM(status);
|
1705
|
+
}
|
1706
|
+
|
1707
|
+
static VALUE
|
1708
|
+
rb_nc_rename_var (int argc, VALUE *argv, VALUE mod)
|
1709
|
+
{
|
1710
|
+
int status;
|
1711
|
+
|
1712
|
+
CHECK_ARGC(3);
|
1713
|
+
CHECK_TYPE_ID(argv[0]);
|
1714
|
+
CHECK_TYPE_ID(argv[1]);
|
1715
|
+
CHECK_TYPE_STRING(argv[2]);
|
1716
|
+
|
1717
|
+
status = nc_rename_var(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
1718
|
+
StringValuePtr(argv[2]));
|
1719
|
+
|
1720
|
+
CHECK_STATUS(status);
|
1721
|
+
|
1722
|
+
return LONG2NUM(status);
|
1723
|
+
}
|
1724
|
+
|
1725
|
+
static VALUE
|
1726
|
+
rb_nc_rename_att (int argc, VALUE *argv, VALUE mod)
|
1727
|
+
{
|
1728
|
+
int status;
|
1729
|
+
|
1730
|
+
CHECK_ARGC(4);
|
1731
|
+
CHECK_TYPE_ID(argv[0]);
|
1732
|
+
CHECK_TYPE_ID(argv[1]);
|
1733
|
+
CHECK_TYPE_STRING(argv[2]);
|
1734
|
+
CHECK_TYPE_STRING(argv[3]);
|
1735
|
+
|
1736
|
+
status = nc_rename_att(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
1737
|
+
StringValuePtr(argv[2]), StringValuePtr(argv[3]));
|
1738
|
+
|
1739
|
+
CHECK_STATUS(status);
|
1740
|
+
|
1741
|
+
return LONG2NUM(status);
|
1742
|
+
}
|
1743
|
+
|
1744
|
+
int nc_setfill(int ncid, int fillmode, int* old_fillemode);
|
1745
|
+
|
1746
|
+
static VALUE
|
1747
|
+
rb_nc_setfill (int argc, VALUE *argv, VALUE mod)
|
1748
|
+
{
|
1749
|
+
int status;
|
1750
|
+
int old_fillmode;
|
1751
|
+
|
1752
|
+
CHECK_ARGC(2);
|
1753
|
+
CHECK_TYPE_ID(argv[0]);
|
1754
|
+
CHECK_TYPE_INT(argv[1]);
|
1755
|
+
|
1756
|
+
status = nc_setfill(NUM2LONG(argv[0]), NUM2LONG(argv[1]), &old_fillmode);
|
1757
|
+
|
1758
|
+
CHECK_STATUS(status);
|
1759
|
+
|
1760
|
+
return LONG2NUM(old_fillmode);
|
1761
|
+
}
|
1762
|
+
|
1763
|
+
static VALUE
|
1764
|
+
rb_nc_copy_att (int argc, VALUE *argv, VALUE mod)
|
1765
|
+
{
|
1766
|
+
int status;
|
1767
|
+
|
1768
|
+
CHECK_ARGC(5);
|
1769
|
+
CHECK_TYPE_ID(argv[0]);
|
1770
|
+
CHECK_TYPE_ID(argv[1]);
|
1771
|
+
CHECK_TYPE_STRING(argv[2]);
|
1772
|
+
CHECK_TYPE_ID(argv[3]);
|
1773
|
+
CHECK_TYPE_ID(argv[4]);
|
1774
|
+
|
1775
|
+
status = nc_copy_att(NUM2LONG(argv[0]), NUM2LONG(argv[1]),
|
1776
|
+
StringValuePtr(argv[2]), NUM2LONG(argv[3]), NUM2LONG(argv[4]));
|
1777
|
+
|
1778
|
+
CHECK_STATUS(status);
|
1779
|
+
|
1780
|
+
return LONG2NUM(status);
|
1781
|
+
}
|
1782
|
+
|
1783
|
+
void
|
1784
|
+
Init_netcdflib ()
|
1785
|
+
{
|
1786
|
+
|
1787
|
+
mNetCDF = rb_define_module("NC");
|
1788
|
+
|
1789
|
+
rb_define_singleton_method(mNetCDF, "ca_type", rb_nc_ca_type, -1);
|
1790
|
+
rb_define_singleton_method(mNetCDF, "nc_type", rb_nc_nc_type, -1);
|
1791
|
+
|
1792
|
+
rb_define_module_function(mNetCDF, "nc_create", rb_nc_create, -1);
|
1793
|
+
rb_define_singleton_method(mNetCDF, "create", rb_nc_create, -1);
|
1794
|
+
rb_define_module_function(mNetCDF, "nc_open", rb_nc_open, -1);
|
1795
|
+
rb_define_singleton_method(mNetCDF, "open", rb_nc_open, -1);
|
1796
|
+
rb_define_module_function(mNetCDF, "nc_close", rb_nc_close, -1);
|
1797
|
+
rb_define_singleton_method(mNetCDF, "close", rb_nc_close, -1);
|
1798
|
+
rb_define_module_function(mNetCDF, "nc_redef", rb_nc_redef, -1);
|
1799
|
+
rb_define_singleton_method(mNetCDF, "redef", rb_nc_redef, -1);
|
1800
|
+
rb_define_module_function(mNetCDF, "nc_enddef", rb_nc_enddef, -1);
|
1801
|
+
rb_define_singleton_method(mNetCDF, "enddef", rb_nc_enddef, -1);
|
1802
|
+
rb_define_module_function(mNetCDF, "nc_sync", rb_nc_sync, -1);
|
1803
|
+
rb_define_singleton_method(mNetCDF, "sync", rb_nc_sync, -1);
|
1804
|
+
|
1805
|
+
rb_define_module_function(mNetCDF, "nc_inq_ndims", rb_nc_inq_ndims, -1);
|
1806
|
+
rb_define_singleton_method(mNetCDF, "inq_ndims", rb_nc_inq_ndims, -1);
|
1807
|
+
rb_define_module_function(mNetCDF, "nc_inq_nvars", rb_nc_inq_nvars, -1);
|
1808
|
+
rb_define_singleton_method(mNetCDF, "inq_nvars", rb_nc_inq_nvars, -1);
|
1809
|
+
rb_define_module_function(mNetCDF, "nc_inq_natts", rb_nc_inq_natts, -1);
|
1810
|
+
rb_define_singleton_method(mNetCDF, "inq_natts", rb_nc_inq_natts, -1);
|
1811
|
+
rb_define_module_function(mNetCDF, "nc_inq_unlimdim", rb_nc_inq_unlimdim, -1);
|
1812
|
+
rb_define_singleton_method(mNetCDF, "inq_unlimdim", rb_nc_inq_unlimdim, -1);
|
1813
|
+
|
1814
|
+
rb_define_module_function(mNetCDF, "nc_inq_dimid", rb_nc_inq_dimid, -1);
|
1815
|
+
rb_define_singleton_method(mNetCDF, "inq_dimid", rb_nc_inq_dimid, -1);
|
1816
|
+
rb_define_module_function(mNetCDF, "nc_inq_varid", rb_nc_inq_varid, -1);
|
1817
|
+
rb_define_singleton_method(mNetCDF, "inq_varid", rb_nc_inq_varid, -1);
|
1818
|
+
rb_define_module_function(mNetCDF, "nc_inq_attid", rb_nc_inq_attid, -1);
|
1819
|
+
rb_define_singleton_method(mNetCDF, "inq_attid", rb_nc_inq_attid, -1);
|
1820
|
+
|
1821
|
+
rb_define_module_function(mNetCDF, "nc_inq_dimlen", rb_nc_inq_dimlen, -1);
|
1822
|
+
rb_define_singleton_method(mNetCDF, "inq_dimlen", rb_nc_inq_dimlen, -1);
|
1823
|
+
rb_define_module_function(mNetCDF, "nc_inq_dimname", rb_nc_inq_dimname, -1);
|
1824
|
+
rb_define_singleton_method(mNetCDF, "inq_dimname", rb_nc_inq_dimname, -1);
|
1825
|
+
|
1826
|
+
rb_define_module_function(mNetCDF, "nc_inq_varname", rb_nc_inq_varname, -1);
|
1827
|
+
rb_define_singleton_method(mNetCDF, "inq_varname", rb_nc_inq_varname, -1);
|
1828
|
+
rb_define_module_function(mNetCDF, "nc_inq_vartype", rb_nc_inq_vartype, -1);
|
1829
|
+
rb_define_singleton_method(mNetCDF, "inq_vartype", rb_nc_inq_vartype, -1);
|
1830
|
+
rb_define_module_function(mNetCDF, "nc_inq_varndims", rb_nc_inq_varndims, -1);
|
1831
|
+
rb_define_singleton_method(mNetCDF, "inq_varndims", rb_nc_inq_varndims, -1);
|
1832
|
+
rb_define_module_function(mNetCDF, "nc_inq_vardimid", rb_nc_inq_vardimid, -1);
|
1833
|
+
rb_define_singleton_method(mNetCDF, "inq_vardimid", rb_nc_inq_vardimid, -1);
|
1834
|
+
rb_define_module_function(mNetCDF, "nc_inq_varnatts", rb_nc_inq_varnatts, -1);
|
1835
|
+
rb_define_singleton_method(mNetCDF, "inq_varnatts", rb_nc_inq_varnatts, -1);
|
1836
|
+
|
1837
|
+
rb_define_module_function(mNetCDF, "nc_inq_attname", rb_nc_inq_attname, -1);
|
1838
|
+
rb_define_singleton_method(mNetCDF, "inq_attname", rb_nc_inq_attname, -1);
|
1839
|
+
rb_define_module_function(mNetCDF, "nc_inq_atttype", rb_nc_inq_atttype, -1);
|
1840
|
+
rb_define_singleton_method(mNetCDF, "inq_atttype", rb_nc_inq_atttype, -1);
|
1841
|
+
rb_define_module_function(mNetCDF, "nc_inq_attlen", rb_nc_inq_attlen, -1);
|
1842
|
+
rb_define_singleton_method(mNetCDF, "inq_attlen", rb_nc_inq_attlen, -1);
|
1843
|
+
rb_define_module_function(mNetCDF, "nc_inq_attid", rb_nc_inq_attid, -1);
|
1844
|
+
rb_define_singleton_method(mNetCDF, "inq_attid", rb_nc_inq_attid, -1);
|
1845
|
+
|
1846
|
+
rb_define_module_function(mNetCDF, "nc_def_dim", rb_nc_def_dim, -1);
|
1847
|
+
rb_define_singleton_method(mNetCDF, "def_dim", rb_nc_def_dim, -1);
|
1848
|
+
rb_define_module_function(mNetCDF, "nc_def_var", rb_nc_def_var, -1);
|
1849
|
+
rb_define_singleton_method(mNetCDF, "def_var", rb_nc_def_var, -1);
|
1850
|
+
rb_define_module_function(mNetCDF, "nc_rename_dim", rb_nc_rename_dim, -1);
|
1851
|
+
rb_define_singleton_method(mNetCDF, "rename_dim", rb_nc_rename_dim, -1);
|
1852
|
+
rb_define_module_function(mNetCDF, "nc_rename_var", rb_nc_rename_var, -1);
|
1853
|
+
rb_define_singleton_method(mNetCDF, "rename_var", rb_nc_rename_var, -1);
|
1854
|
+
rb_define_module_function(mNetCDF, "nc_rename_att", rb_nc_rename_att, -1);
|
1855
|
+
rb_define_singleton_method(mNetCDF, "rename_att", rb_nc_rename_att, -1);
|
1856
|
+
rb_define_module_function(mNetCDF, "nc_del_att", rb_nc_del_att, -1);
|
1857
|
+
rb_define_singleton_method(mNetCDF, "del_att", rb_nc_del_att, -1);
|
1858
|
+
rb_define_module_function(mNetCDF, "nc_setfill", rb_nc_setfill, -1);
|
1859
|
+
rb_define_singleton_method(mNetCDF, "setfill", rb_nc_setfill, -1);
|
1860
|
+
|
1861
|
+
rb_define_module_function(mNetCDF, "nc_put_att", rb_nc_put_att, -1);
|
1862
|
+
rb_define_singleton_method(mNetCDF, "put_att", rb_nc_put_att, -1);
|
1863
|
+
rb_define_module_function(mNetCDF, "nc_get_att", rb_nc_get_att, -1);
|
1864
|
+
rb_define_singleton_method(mNetCDF, "get_att", rb_nc_get_att, -1);
|
1865
|
+
rb_define_module_function(mNetCDF, "nc_copy_att", rb_nc_copy_att, -1);
|
1866
|
+
rb_define_singleton_method(mNetCDF, "copy_att", rb_nc_copy_att, -1);
|
1867
|
+
|
1868
|
+
rb_define_module_function(mNetCDF, "nc_get_var1", rb_nc_get_var1, -1);
|
1869
|
+
rb_define_singleton_method(mNetCDF, "get_var1", rb_nc_get_var1, -1);
|
1870
|
+
rb_define_module_function(mNetCDF, "nc_put_var1", rb_nc_put_var1, -1);
|
1871
|
+
rb_define_singleton_method(mNetCDF, "put_var1", rb_nc_put_var1, -1);
|
1872
|
+
rb_define_module_function(mNetCDF, "nc_get_var", rb_nc_get_var, -1);
|
1873
|
+
rb_define_singleton_method(mNetCDF, "get_var", rb_nc_get_var, -1);
|
1874
|
+
rb_define_module_function(mNetCDF, "nc_put_var", rb_nc_put_var, -1);
|
1875
|
+
rb_define_singleton_method(mNetCDF, "put_var", rb_nc_put_var, -1);
|
1876
|
+
rb_define_module_function(mNetCDF, "nc_get_vara", rb_nc_get_vara, -1);
|
1877
|
+
rb_define_singleton_method(mNetCDF, "get_vara", rb_nc_get_vara, -1);
|
1878
|
+
rb_define_module_function(mNetCDF, "nc_put_vara", rb_nc_put_vara, -1);
|
1879
|
+
rb_define_singleton_method(mNetCDF, "put_vara", rb_nc_put_vara, -1);
|
1880
|
+
rb_define_module_function(mNetCDF, "nc_get_vars", rb_nc_get_vars, -1);
|
1881
|
+
rb_define_singleton_method(mNetCDF, "get_vars", rb_nc_get_vars, -1);
|
1882
|
+
rb_define_module_function(mNetCDF, "nc_put_vars", rb_nc_put_vars, -1);
|
1883
|
+
rb_define_singleton_method(mNetCDF, "put_vars", rb_nc_put_vars, -1);
|
1884
|
+
rb_define_module_function(mNetCDF, "nc_get_varm", rb_nc_get_varm, -1);
|
1885
|
+
rb_define_singleton_method(mNetCDF, "get_varm", rb_nc_get_varm, -1);
|
1886
|
+
rb_define_module_function(mNetCDF, "nc_put_varm", rb_nc_put_varm, -1);
|
1887
|
+
rb_define_singleton_method(mNetCDF, "put_varm", rb_nc_put_varm, -1);
|
1888
|
+
|
1889
|
+
rb_define_const(mNetCDF, "NC_NOERR", INT2FIX(NC_NOERR));
|
1890
|
+
|
1891
|
+
rb_define_const(mNetCDF, "NC_NOWRITE", INT2FIX(NC_NOWRITE));
|
1892
|
+
rb_define_const(mNetCDF, "NC_WRITE", INT2FIX(NC_WRITE));
|
1893
|
+
rb_define_const(mNetCDF, "NC_SHARE", INT2FIX(NC_SHARE));
|
1894
|
+
rb_define_const(mNetCDF, "NC_LOCK", INT2FIX(NC_LOCK));
|
1895
|
+
rb_define_const(mNetCDF, "NC_CLOBBER", INT2FIX(NC_CLOBBER));
|
1896
|
+
rb_define_const(mNetCDF, "NC_NOCLOBBER", INT2FIX(NC_NOCLOBBER));
|
1897
|
+
rb_define_const(mNetCDF, "NC_SIZEHINT_DEFAULT", INT2FIX(NC_SIZEHINT_DEFAULT));
|
1898
|
+
|
1899
|
+
rb_define_const(mNetCDF, "NC_GLOBAL", INT2FIX(NC_GLOBAL));
|
1900
|
+
rb_define_const(mNetCDF, "NC_MAX_NAME", INT2FIX(NC_MAX_NAME));
|
1901
|
+
rb_define_const(mNetCDF, "NC_MAX_VAR_DIMS", INT2FIX(NC_MAX_VAR_DIMS));
|
1902
|
+
rb_define_const(mNetCDF, "NC_MAX_DIMS", INT2FIX(NC_MAX_DIMS));
|
1903
|
+
rb_define_const(mNetCDF, "NC_NOFILL", INT2FIX(NC_NOFILL));
|
1904
|
+
rb_define_const(mNetCDF, "NC_FILL", INT2FIX(NC_FILL));
|
1905
|
+
|
1906
|
+
rb_define_const(mNetCDF, "NC_NAT", INT2FIX(NC_NAT));
|
1907
|
+
rb_define_const(mNetCDF, "NC_BYTE", INT2FIX(NC_BYTE));
|
1908
|
+
rb_define_const(mNetCDF, "NC_CHAR", INT2FIX(NC_CHAR));
|
1909
|
+
rb_define_const(mNetCDF, "NC_SHORT", INT2FIX(NC_SHORT));
|
1910
|
+
rb_define_const(mNetCDF, "NC_INT", INT2FIX(NC_INT));
|
1911
|
+
rb_define_const(mNetCDF, "NC_FLOAT", INT2FIX(NC_FLOAT));
|
1912
|
+
rb_define_const(mNetCDF, "NC_DOUBLE", INT2FIX(NC_DOUBLE));
|
1913
|
+
|
1914
|
+
}
|