carray-netcdf 1.0.13 → 2.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.
data/ext/rb_netcdflib.c DELETED
@@ -1,2674 +0,0 @@
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_UINT8;
53
- case NC_BYTE:
54
- return CA_INT8;
55
- case NC_UBYTE:
56
- return CA_UINT8;
57
- case NC_SHORT:
58
- return CA_INT16;
59
- case NC_USHORT:
60
- return CA_UINT16;
61
- case NC_INT:
62
- return CA_INT32;
63
- case NC_UINT:
64
- return CA_UINT32;
65
- case NC_INT64:
66
- return CA_INT64;
67
- case NC_UINT64:
68
- return CA_UINT64;
69
- case NC_FLOAT:
70
- return CA_FLOAT32;
71
- case NC_DOUBLE:
72
- return CA_FLOAT64;
73
- default:
74
- rb_raise(rb_eRuntimeError, "invalid NC_TYPE");
75
- }
76
- }
77
-
78
- static nc_type
79
- rb_nc_rtypemap (int ca_type)
80
- {
81
- switch ( ca_type ) {
82
- case CA_INT8:
83
- return NC_BYTE;
84
- case CA_UINT8:
85
- return NC_UBYTE;
86
- case CA_INT16:
87
- return NC_SHORT;
88
- case CA_UINT16:
89
- return NC_USHORT;
90
- case CA_INT32:
91
- return NC_INT;
92
- case CA_UINT32:
93
- return NC_UINT;
94
- case CA_INT64:
95
- return NC_INT64;
96
- case CA_UINT64:
97
- return NC_UINT64;
98
- case CA_FLOAT32:
99
- return NC_FLOAT;
100
- case CA_FLOAT64:
101
- return NC_DOUBLE;
102
- case CA_FIXLEN:
103
- return NC_STRING;
104
- default:
105
- rb_raise(rb_eRuntimeError, "invalid CA_TYPE");
106
- }
107
- }
108
-
109
- static VALUE
110
- rb_nc_ca_type (int argc, VALUE *argv, VALUE mod)
111
- {
112
- int type;
113
-
114
- CHECK_ARGC(1);
115
- CHECK_TYPE_INT(argv[0]);
116
-
117
- type = rb_nc_typemap(NUM2INT(argv[0]));
118
-
119
- return LONG2NUM(type);
120
- }
121
-
122
- static VALUE
123
- rb_nc_nc_type (int argc, VALUE *argv, VALUE mod)
124
- {
125
- nc_type type;
126
-
127
- CHECK_ARGC(1);
128
- CHECK_TYPE_INT(argv[0]);
129
-
130
- type = rb_nc_rtypemap(NUM2INT(argv[0]));
131
-
132
- return LONG2NUM(type);
133
- }
134
-
135
- static VALUE
136
- rb_nc_create (int argc, VALUE *argv, VALUE mod)
137
- {
138
- int status, nc_id;
139
-
140
- if ( argc < 1 ) {
141
- rb_raise(rb_eArgError, "invalid # of arguments");
142
- }
143
-
144
- CHECK_TYPE_STRING(argv[0]);
145
-
146
- if ( argc == 1 ) {
147
- status = nc_create(StringValuePtr(argv[0]), NC_CLOBBER, &nc_id);
148
- }
149
- else if ( argc == 2 ) {
150
- CHECK_TYPE_INT(argv[1]);
151
- status = nc_create(StringValuePtr(argv[0]), NUM2INT(argv[1]), &nc_id);
152
- }
153
- else {
154
- rb_raise(rb_eArgError, "too many argument");
155
- }
156
-
157
- CHECK_STATUS(status);
158
-
159
- return LONG2NUM(nc_id);
160
- }
161
-
162
- /*
163
- static VALUE
164
- rb_nc_create_mem (int argc, VALUE *argv, VALUE mod)
165
- {
166
- int status, nc_id;
167
- if ( argc < 1 ) {
168
- rb_raise(rb_eArgError, "invalid # of arguments");
169
- }
170
-
171
- CHECK_TYPE_STRING(argv[0]);
172
-
173
- if ( argc == 1 ) {
174
- status = nc_create_mem(StringValuePtr(argv[0]), NC_CLOBBER, NC_SIZEHINT_DEFAULT, &nc_id);
175
- }
176
- else if ( argc == 2 ) {
177
- CHECK_TYPE_INT(argv[1]);
178
- status = nc_create_mem(StringValuePtr(argv[0]),
179
- NUM2INT(argv[1]),
180
- NC_SIZEHINT_DEFAULT,
181
- &nc_id);
182
- }
183
- else if ( argc == 3 ) {
184
- CHECK_TYPE_INT(argv[1]);
185
- CHECK_TYPE_INT(argv[2]);
186
- status = nc_create_mem(StringValuePtr(argv[0]),
187
- NUM2INT(argv[1]),
188
- NUM2INT(argv[2]),
189
- &nc_id);
190
- }
191
- else {
192
- rb_raise(rb_eArgError, "too many argument");
193
- }
194
-
195
- CHECK_STATUS(status);
196
-
197
- return LONG2NUM(nc_id);
198
- }
199
- */
200
-
201
- static VALUE
202
- rb_nc_open (int argc, VALUE *argv, VALUE mod)
203
- {
204
- int status, nc_id;
205
-
206
- if ( argc < 1 ) {
207
- rb_raise(rb_eArgError, "invalid # of arguments");
208
- }
209
-
210
- CHECK_TYPE_STRING(argv[0]);
211
-
212
- if ( argc == 1 ) {
213
- status = nc_open(StringValuePtr(argv[0]), NC_NOWRITE, &nc_id);
214
- }
215
- else if ( argc == 2 ) {
216
- CHECK_TYPE_INT(argv[1]);
217
- status = nc_open(StringValuePtr(argv[0]), NUM2INT(argv[1]), &nc_id);
218
- }
219
- else {
220
- rb_raise(rb_eArgError, "too many argument");
221
- }
222
-
223
- CHECK_STATUS(status);
224
-
225
- return LONG2NUM(nc_id);
226
- }
227
-
228
- static VALUE
229
- rb_nc_close (int argc, VALUE *argv, VALUE mod)
230
- {
231
- int status;
232
-
233
- CHECK_ARGC(1);
234
- CHECK_TYPE_ID(argv[0]);
235
-
236
- status = nc_close(NUM2INT(argv[0]));
237
-
238
- CHECK_STATUS(status);
239
-
240
- return LONG2NUM(status);
241
- }
242
-
243
- static VALUE
244
- rb_nc_redef (int argc, VALUE *argv, VALUE mod)
245
- {
246
- int status;
247
-
248
- CHECK_ARGC(1);
249
- CHECK_TYPE_ID(argv[0]);
250
-
251
- status = nc_redef(NUM2INT(argv[0]));
252
-
253
- CHECK_STATUS(status);
254
-
255
- return LONG2NUM(status);
256
- }
257
-
258
- static VALUE
259
- rb_nc_enddef (int argc, VALUE *argv, VALUE mod)
260
- {
261
- int status;
262
-
263
- CHECK_ARGC(1);
264
- CHECK_TYPE_ID(argv[0]);
265
-
266
- status = nc_enddef(NUM2INT(argv[0]));
267
-
268
- CHECK_STATUS(status);
269
-
270
- return LONG2NUM(status);
271
- }
272
-
273
- static VALUE
274
- rb_nc_sync (int argc, VALUE *argv, VALUE mod)
275
- {
276
- int status;
277
-
278
- CHECK_ARGC(1);
279
- CHECK_TYPE_ID(argv[0]);
280
-
281
- status = nc_sync(NUM2INT(argv[0]));
282
-
283
- CHECK_STATUS(status);
284
-
285
- return LONG2NUM(status);
286
- }
287
-
288
- static VALUE
289
- rb_nc_inq_ndims (int argc, VALUE *argv, VALUE mod)
290
- {
291
- int status, ndims;
292
-
293
- CHECK_ARGC(1);
294
- CHECK_TYPE_ID(argv[0]);
295
-
296
- status = nc_inq_ndims(NUM2INT(argv[0]), &ndims);
297
-
298
- CHECK_STATUS(status);
299
-
300
- return LONG2NUM(ndims);
301
- }
302
-
303
- static VALUE
304
- rb_nc_inq_nvars (int argc, VALUE *argv, VALUE mod)
305
- {
306
- int status, nvars;
307
-
308
- CHECK_ARGC(1);
309
- CHECK_TYPE_ID(argv[0]);
310
-
311
- status = nc_inq_nvars(NUM2INT(argv[0]), &nvars);
312
-
313
- CHECK_STATUS(status);
314
-
315
- return LONG2NUM(nvars);
316
- }
317
-
318
- static VALUE
319
- rb_nc_inq_natts (int argc, VALUE *argv, VALUE mod)
320
- {
321
- int status, natts;
322
-
323
- CHECK_ARGC(1);
324
- CHECK_TYPE_ID(argv[0]);
325
-
326
- status = nc_inq_natts(NUM2INT(argv[0]), &natts);
327
-
328
- CHECK_STATUS(status);
329
-
330
- return LONG2NUM(natts);
331
- }
332
-
333
- static VALUE
334
- rb_nc_inq_unlimdim (int argc, VALUE *argv, VALUE mod)
335
- {
336
- int status, uldim;
337
-
338
- CHECK_ARGC(1);
339
- CHECK_TYPE_ID(argv[0]);
340
-
341
- status = nc_inq_unlimdim(NUM2INT(argv[0]), &uldim);
342
-
343
- CHECK_STATUS(status);
344
-
345
- return LONG2NUM(uldim);
346
- }
347
-
348
- static VALUE
349
- rb_nc_inq_dimid (int argc, VALUE *argv, VALUE mod)
350
- {
351
- int status, dimid;
352
-
353
- CHECK_ARGC(2);
354
- CHECK_TYPE_ID(argv[0]);
355
- CHECK_TYPE_STRING(argv[1]);
356
-
357
- status = nc_inq_dimid(NUM2INT(argv[0]), StringValuePtr(argv[1]), &dimid);
358
-
359
- return ( status != NC_NOERR ) ? Qnil : LONG2NUM(dimid);
360
- }
361
-
362
- static VALUE
363
- rb_nc_inq_varid (int argc, VALUE *argv, VALUE mod)
364
- {
365
- int status, varid;
366
-
367
- CHECK_ARGC(2);
368
- CHECK_TYPE_ID(argv[0]);
369
- CHECK_TYPE_STRING(argv[1]);
370
-
371
- status = nc_inq_varid(NUM2INT(argv[0]), StringValuePtr(argv[1]), &varid);
372
-
373
- return ( status != NC_NOERR ) ? Qnil : LONG2NUM(varid);
374
- }
375
-
376
- static VALUE
377
- rb_nc_inq_attid (int argc, VALUE *argv, VALUE mod)
378
- {
379
- int status, attid;
380
-
381
- CHECK_ARGC(3);
382
- CHECK_TYPE_ID(argv[0]);
383
- CHECK_TYPE_ID(argv[1]);
384
- CHECK_TYPE_STRING(argv[2]);
385
-
386
- status = nc_inq_attid(NUM2INT(argv[0]), NUM2INT(argv[1]),
387
- StringValuePtr(argv[2]), &attid);
388
-
389
- return ( status != NC_NOERR ) ? Qnil : LONG2NUM(attid);
390
- }
391
-
392
- static VALUE
393
- rb_nc_inq_dimlen (int argc, VALUE *argv, VALUE mod)
394
- {
395
- size_t dimlen;
396
- int status;
397
-
398
- CHECK_ARGC(2);
399
- CHECK_TYPE_ID(argv[0]);
400
- CHECK_TYPE_ID(argv[1]);
401
-
402
- status = nc_inq_dimlen(NUM2INT(argv[0]), NUM2INT(argv[1]), &dimlen);
403
-
404
- CHECK_STATUS(status);
405
-
406
- return ULONG2NUM(dimlen);
407
- }
408
-
409
- static VALUE
410
- rb_nc_inq_dimname (int argc, VALUE *argv, VALUE mod)
411
- {
412
- int status;
413
- char dimname[NC_MAX_NAME];
414
-
415
- CHECK_ARGC(2);
416
- CHECK_TYPE_ID(argv[0]);
417
- CHECK_TYPE_ID(argv[1]);
418
-
419
- status = nc_inq_dimname(NUM2INT(argv[0]), NUM2INT(argv[1]), dimname);
420
-
421
- CHECK_STATUS(status);
422
-
423
- return rb_str_new2(dimname);
424
- }
425
-
426
- static VALUE
427
- rb_nc_inq_varname (int argc, VALUE *argv, VALUE mod)
428
- {
429
- int status;
430
- char varname[NC_MAX_NAME];
431
-
432
- CHECK_ARGC(2);
433
- CHECK_TYPE_ID(argv[0]);
434
- CHECK_TYPE_ID(argv[1]);
435
-
436
- status = nc_inq_varname(NUM2INT(argv[0]), NUM2INT(argv[1]), varname);
437
-
438
- CHECK_STATUS(status);
439
-
440
- return rb_str_new2(varname);
441
- }
442
-
443
- static VALUE
444
- rb_nc_inq_vartype (int argc, VALUE *argv, VALUE mod)
445
- {
446
- int status;
447
- nc_type type;
448
-
449
- CHECK_ARGC(2);
450
- CHECK_TYPE_ID(argv[0]);
451
- CHECK_TYPE_ID(argv[1]);
452
-
453
- status = nc_inq_vartype(NUM2INT(argv[0]), NUM2INT(argv[1]), &type);
454
-
455
- CHECK_STATUS(status);
456
-
457
- return LONG2NUM(type);
458
- }
459
-
460
- static VALUE
461
- rb_nc_inq_varndims (int argc, VALUE *argv, VALUE mod)
462
- {
463
- int status, ndims;
464
-
465
- CHECK_ARGC(2);
466
- CHECK_TYPE_ID(argv[0]);
467
- CHECK_TYPE_ID(argv[1]);
468
-
469
- status = nc_inq_varndims(NUM2INT(argv[0]), NUM2INT(argv[1]), &ndims);
470
-
471
- CHECK_STATUS(status);
472
-
473
- return LONG2NUM(ndims);
474
- }
475
-
476
- static VALUE
477
- rb_nc_inq_vardimid (int argc, VALUE *argv, VALUE mod)
478
- {
479
- volatile VALUE rdim;
480
- int dimid[NC_MAX_DIMS];
481
- int ndims;
482
- int status;
483
- int i;
484
-
485
- CHECK_ARGC(2);
486
- CHECK_TYPE_ID(argv[0]); /* nc_id */
487
- CHECK_TYPE_ID(argv[1]); /* var_id */
488
-
489
- status = nc_inq_varndims(NUM2INT(argv[0]), NUM2INT(argv[1]), &ndims);
490
-
491
- CHECK_STATUS(status);
492
-
493
- status = nc_inq_vardimid(NUM2INT(argv[0]), NUM2INT(argv[1]), dimid);
494
-
495
- CHECK_STATUS(status);
496
-
497
- rdim = rb_ary_new();
498
- for (i=0; i<ndims; i++) {
499
- rb_ary_store(rdim, i, ULONG2NUM(dimid[i]));
500
- }
501
-
502
- return rdim;
503
- }
504
-
505
- static VALUE
506
- rb_nc_inq_varnatts (int argc, VALUE *argv, VALUE mod)
507
- {
508
- int status, natts;
509
-
510
- CHECK_ARGC(2);
511
- CHECK_TYPE_ID(argv[0]);
512
- CHECK_TYPE_ID(argv[1]);
513
-
514
- status = nc_inq_varnatts(NUM2INT(argv[0]), NUM2INT(argv[1]), &natts);
515
-
516
- CHECK_STATUS(status);
517
-
518
- return LONG2NUM(natts);
519
- }
520
-
521
-
522
- static VALUE
523
- rb_nc_inq_attname (int argc, VALUE *argv, VALUE mod)
524
- {
525
- int status;
526
- char attname[NC_MAX_NAME];
527
-
528
- CHECK_ARGC(3);
529
- CHECK_TYPE_ID(argv[0]);
530
- CHECK_TYPE_ID(argv[1]);
531
- CHECK_TYPE_ID(argv[2]);
532
-
533
- status = nc_inq_attname(NUM2INT(argv[0]), NUM2INT(argv[1]),
534
- NUM2INT(argv[2]), attname);
535
-
536
- CHECK_STATUS(status);
537
-
538
- return rb_str_new2(attname);
539
- }
540
-
541
- static VALUE
542
- rb_nc_inq_atttype (int argc, VALUE *argv, VALUE mod)
543
- {
544
- int status;
545
- nc_type type;
546
-
547
- CHECK_ARGC(3);
548
- CHECK_TYPE_ID(argv[0]);
549
- CHECK_TYPE_ID(argv[1]);
550
- CHECK_TYPE_STRING(argv[2]);
551
-
552
- status = nc_inq_atttype(NUM2INT(argv[0]), NUM2INT(argv[1]),
553
- StringValuePtr(argv[2]), &type);
554
-
555
- CHECK_STATUS(status);
556
-
557
- return LONG2NUM(type);
558
- }
559
-
560
- static VALUE
561
- rb_nc_inq_attlen (int argc, VALUE *argv, VALUE mod)
562
- {
563
- size_t len;
564
- int status;
565
-
566
- CHECK_ARGC(3);
567
- CHECK_TYPE_ID(argv[0]);
568
- CHECK_TYPE_ID(argv[1]);
569
- CHECK_TYPE_STRING(argv[2]);
570
-
571
- status = nc_inq_attlen(NUM2INT(argv[0]), NUM2INT(argv[1]),
572
- StringValuePtr(argv[2]), &len);
573
-
574
- CHECK_STATUS(status);
575
-
576
- return LONG2NUM(len);
577
- }
578
-
579
- static VALUE
580
- rb_nc_def_dim (int argc, VALUE *argv, VALUE mod)
581
- {
582
- int status, dimid;
583
-
584
- CHECK_ARGC(3);
585
- CHECK_TYPE_ID(argv[0]);
586
- CHECK_TYPE_STRING(argv[1]);
587
- CHECK_TYPE_INT(argv[2]);
588
-
589
- status = nc_def_dim(NUM2INT(argv[0]), StringValuePtr(argv[1]),
590
- NUM2INT(argv[2]), &dimid);
591
-
592
- CHECK_STATUS(status);
593
-
594
- return LONG2NUM(dimid);
595
- }
596
-
597
- static VALUE
598
- rb_nc_def_grp (int argc, VALUE *argv, VALUE mod)
599
- {
600
- int status, grpid;
601
-
602
- CHECK_ARGC(2);
603
- CHECK_TYPE_ID(argv[0]);
604
- CHECK_TYPE_STRING(argv[1]);
605
-
606
- status = nc_def_grp(NUM2INT(argv[0]), StringValuePtr(argv[1]),
607
- &grpid);
608
-
609
- CHECK_STATUS(status);
610
-
611
- return LONG2NUM(grpid);
612
- }
613
-
614
- static VALUE
615
- rb_nc_inq_ncid (int argc, VALUE *argv, VALUE mod)
616
- {
617
- int status, ncid;
618
-
619
- CHECK_ARGC(2);
620
- CHECK_TYPE_ID(argv[0]);
621
- CHECK_TYPE_STRING(argv[1]);
622
-
623
- status = nc_inq_ncid(NUM2INT(argv[0]), StringValuePtr(argv[1]),
624
- &ncid);
625
-
626
- CHECK_STATUS(status);
627
-
628
- return LONG2NUM(ncid);
629
- }
630
-
631
-
632
- static VALUE
633
- rb_nc_inq_grp_full_ncid (int argc, VALUE *argv, VALUE mod)
634
- {
635
- int status, ncid;
636
-
637
- CHECK_ARGC(2);
638
- CHECK_TYPE_ID(argv[0]);
639
- CHECK_TYPE_STRING(argv[1]);
640
-
641
- status = nc_inq_grp_full_ncid(NUM2INT(argv[0]), StringValuePtr(argv[1]),
642
- &ncid);
643
-
644
- CHECK_STATUS(status);
645
-
646
- return LONG2NUM(ncid);
647
- }
648
-
649
-
650
- static VALUE
651
- rb_nc_inq_grp_ncid (int argc, VALUE *argv, VALUE mod)
652
- {
653
- int status, ncid;
654
-
655
- CHECK_ARGC(2);
656
- CHECK_TYPE_ID(argv[0]);
657
- CHECK_TYPE_STRING(argv[1]);
658
-
659
- status = nc_inq_grp_ncid(NUM2INT(argv[0]), StringValuePtr(argv[1]),
660
- &ncid);
661
-
662
- CHECK_STATUS(status);
663
-
664
- return LONG2NUM(ncid);
665
- }
666
-
667
- static VALUE
668
- rb_nc_inq_grp_parent (int argc, VALUE *argv, VALUE mod)
669
- {
670
- int parent;
671
- int status;
672
-
673
- CHECK_ARGC(1);
674
- CHECK_TYPE_ID(argv[0]);
675
-
676
- status = nc_inq_grp_parent(NUM2INT(argv[0]), &parent);
677
-
678
- CHECK_STATUS(status);
679
-
680
- return ULONG2NUM(parent);
681
- }
682
-
683
- static VALUE
684
- rb_nc_inq_grpname (int argc, VALUE *argv, VALUE mod)
685
- {
686
- int status;
687
- char grpname[NC_MAX_NAME];
688
-
689
- CHECK_ARGC(1);
690
- CHECK_TYPE_ID(argv[0]);
691
-
692
- status = nc_inq_grpname(NUM2INT(argv[0]), grpname);
693
-
694
- CHECK_STATUS(status);
695
-
696
- return rb_str_new2(grpname);
697
- }
698
-
699
- static VALUE
700
- rb_nc_inq_grpname_full (int argc, VALUE *argv, VALUE mod)
701
- {
702
- int status;
703
- size_t len;
704
- char grpname[NC_MAX_NAME];
705
-
706
- CHECK_ARGC(1);
707
- CHECK_TYPE_ID(argv[0]);
708
-
709
- status = nc_inq_grpname_full(NUM2INT(argv[0]), &len, grpname);
710
-
711
- CHECK_STATUS(status);
712
-
713
- return rb_str_new2(grpname);
714
- }
715
-
716
- static VALUE
717
- rb_nc_inq_grpname_len (int argc, VALUE *argv, VALUE mod)
718
- {
719
- int status;
720
- size_t len;
721
-
722
- CHECK_ARGC(2);
723
- CHECK_TYPE_ID(argv[0]);
724
- CHECK_TYPE_STRING(argv[1]);
725
-
726
- status = nc_inq_grpname_len(NUM2INT(argv[0]), &len);
727
-
728
- CHECK_STATUS(status);
729
-
730
- return LONG2NUM(len);
731
- }
732
-
733
- static VALUE
734
- rb_nc_inq_grps (int argc, VALUE *argv, VALUE mod)
735
- {
736
- volatile VALUE rgrps;
737
- int grps[NC_MAX_DIMS];
738
- int i, ngrps;
739
- int status;
740
-
741
- CHECK_ARGC(1);
742
- CHECK_TYPE_ID(argv[0]); /* nc_id */
743
-
744
- status = nc_inq_grps(NUM2INT(argv[0]),
745
- &ngrps,
746
- grps);
747
-
748
- CHECK_STATUS(status);
749
-
750
- rgrps = rb_ary_new();
751
- for (i=0; i<ngrps; i++) {
752
- rb_ary_store(rgrps, i, ULONG2NUM(grps[i]));
753
- }
754
-
755
- return rgrps;
756
- }
757
-
758
-
759
- static VALUE
760
- rb_nc_inq_dimids (int argc, VALUE *argv, VALUE mod)
761
- {
762
- volatile VALUE rdimids;
763
- int dimids[NC_MAX_DIMS];
764
- int i, ndims;
765
- int status;
766
-
767
- CHECK_ARGC(2);
768
- CHECK_TYPE_ID(argv[0]); /* nc_id */
769
- CHECK_TYPE_ID(argv[1]); /* nc_id */
770
-
771
- status = nc_inq_dimids(NUM2INT(argv[0]),
772
- &ndims,
773
- dimids,
774
- NUM2INT(argv[1]));
775
-
776
- CHECK_STATUS(status);
777
-
778
- rdimids = rb_ary_new();
779
- for (i=0; i<ndims; i++) {
780
- rb_ary_store(rdimids, i, ULONG2NUM(dimids[i]));
781
- }
782
-
783
- return rdimids;
784
- }
785
-
786
- static VALUE
787
- rb_nc_inq_varids (int argc, VALUE *argv, VALUE mod)
788
- {
789
- volatile VALUE rvarids;
790
- int varids[NC_MAX_DIMS];
791
- int i, nvars;
792
- int status;
793
-
794
- CHECK_ARGC(1);
795
- CHECK_TYPE_ID(argv[0]); /* nc_id */
796
-
797
- status = nc_inq_varids(NUM2INT(argv[0]),
798
- &nvars,
799
- varids);
800
-
801
- CHECK_STATUS(status);
802
-
803
- rvarids = rb_ary_new();
804
- for (i=0; i<nvars; i++) {
805
- rb_ary_store(rvarids, i, ULONG2NUM(varids[i]));
806
- }
807
-
808
- return rvarids;
809
- }
810
-
811
- static VALUE
812
- rb_nc_inq_typeids (int argc, VALUE *argv, VALUE mod)
813
- {
814
- volatile VALUE rtypeids;
815
- int typeids[NC_MAX_DIMS];
816
- int i, ntypes;
817
- int status;
818
-
819
- CHECK_ARGC(1);
820
- CHECK_TYPE_ID(argv[0]); /* nc_id */
821
-
822
- status = nc_inq_typeids(NUM2INT(argv[0]),
823
- &ntypes,
824
- typeids);
825
-
826
- CHECK_STATUS(status);
827
-
828
- rtypeids = rb_ary_new();
829
- for (i=0; i<ntypes; i++) {
830
- rb_ary_store(rtypeids, i, ULONG2NUM(typeids[i]));
831
- }
832
-
833
- return rtypeids;
834
- }
835
-
836
- static VALUE
837
- rb_nc_show_metadata (int argc, VALUE *argv, VALUE mod)
838
- {
839
- int status;
840
-
841
- CHECK_ARGC(1);
842
- CHECK_TYPE_ID(argv[0]); /* nc_id */
843
-
844
- status = nc_show_metadata(NUM2INT(argv[0]));
845
-
846
- CHECK_STATUS(status);
847
-
848
- return Qnil;
849
- }
850
-
851
- static VALUE
852
- rb_nc_def_var (int argc, VALUE *argv, VALUE mod)
853
- {
854
- volatile VALUE vdim;
855
- int status, varid;
856
- int ndims;
857
- int dimids[NC_MAX_DIMS];
858
- int i;
859
-
860
- CHECK_ARGC(4);
861
- CHECK_TYPE_ID(argv[0]);
862
- CHECK_TYPE_STRING(argv[1]);
863
- CHECK_TYPE_INT(argv[2]);
864
- CHECK_TYPE_ARRAY(argv[3]);
865
-
866
- vdim = argv[3];
867
-
868
- ndims = (int) RARRAY_LEN(vdim);
869
- for (i=0; i<ndims; i++) {
870
- dimids[i] = NUM2INT(RARRAY_PTR(vdim)[i]);
871
- }
872
-
873
- status = nc_def_var(NUM2INT(argv[0]), StringValuePtr(argv[1]),
874
- NUM2INT(argv[2]), ndims, dimids, &varid);
875
-
876
- CHECK_STATUS(status);
877
-
878
- return LONG2NUM(varid);
879
- }
880
-
881
- static VALUE
882
- rb_nc_def_var_chunking (int argc, VALUE *argv, VALUE mod)
883
- {
884
- volatile VALUE vdim;
885
- int status;
886
- int ndims;
887
- size_t chunksizes[NC_MAX_DIMS];
888
- int i;
889
-
890
- CHECK_ARGC(4);
891
- CHECK_TYPE_ID(argv[0]);
892
- CHECK_TYPE_ID(argv[1]);
893
- CHECK_TYPE_INT(argv[2]);
894
- CHECK_TYPE_ARRAY(argv[3]);
895
-
896
- vdim = argv[3];
897
-
898
- ndims = (int) RARRAY_LEN(vdim);
899
- for (i=0; i<ndims; i++) {
900
- chunksizes[i] = NUM2INT(RARRAY_PTR(vdim)[i]);
901
- }
902
-
903
- status = nc_def_var_chunking(NUM2INT(argv[0]),
904
- NUM2INT(argv[1]),
905
- NUM2INT(argv[2]),
906
- chunksizes);
907
-
908
- CHECK_STATUS(status);
909
-
910
- return Qnil;
911
- }
912
-
913
- static VALUE
914
- rb_nc_inq_var_chunking (int argc, VALUE *argv, VALUE mod)
915
- {
916
- volatile VALUE retval;
917
- volatile VALUE rchunksize;
918
- int storage;
919
- size_t chunksizes[NC_MAX_DIMS];
920
- int i, ndims;
921
- int status;
922
-
923
- CHECK_ARGC(2);
924
- CHECK_TYPE_ID(argv[0]); /* nc_id */
925
- CHECK_TYPE_ID(argv[1]); /* var_id */
926
-
927
- status = nc_inq_var_chunking(NUM2INT(argv[0]),
928
- NUM2INT(argv[1]),
929
- &storage,
930
- chunksizes);
931
-
932
- CHECK_STATUS(status);
933
-
934
- status = nc_inq_varndims(NUM2INT(argv[0]), NUM2INT(argv[1]), &ndims);
935
-
936
- CHECK_STATUS(status);
937
-
938
- rchunksize = rb_ary_new();
939
- for (i=0; i<ndims; i++) {
940
- rb_ary_store(rchunksize, i, ULONG2NUM(chunksizes[i]));
941
- }
942
-
943
- retval = rb_ary_new();
944
- rb_ary_store(retval, 0, ULONG2NUM(storage));
945
- rb_ary_store(retval, 1, rchunksize);
946
-
947
- return retval;
948
- }
949
-
950
- static VALUE
951
- rb_nc_def_var_deflate (int argc, VALUE *argv, VALUE mod)
952
- {
953
- int status;
954
-
955
- CHECK_ARGC(5);
956
- CHECK_TYPE_ID(argv[0]);
957
- CHECK_TYPE_ID(argv[1]);
958
- CHECK_TYPE_INT(argv[2]);
959
- CHECK_TYPE_INT(argv[3]);
960
- CHECK_TYPE_INT(argv[4]);
961
-
962
- status = nc_def_var_deflate(NUM2INT(argv[0]), NUM2INT(argv[1]),
963
- NUM2INT(argv[2]), NUM2INT(argv[3]), NUM2INT(argv[4]));
964
-
965
-
966
- CHECK_STATUS(status);
967
-
968
- return Qnil;
969
- }
970
-
971
- static VALUE
972
- rb_nc_inq_var_deflate (int argc, VALUE *argv, VALUE mod)
973
- {
974
- volatile VALUE retval;
975
- int shuffle, deflate, deflate_level;
976
- int status;
977
-
978
- CHECK_ARGC(2);
979
- CHECK_TYPE_ID(argv[0]); /* nc_id */
980
- CHECK_TYPE_ID(argv[1]); /* var_id */
981
-
982
- status = nc_inq_var_deflate(NUM2INT(argv[0]), NUM2INT(argv[1]),
983
- &shuffle, &deflate, &deflate_level);
984
-
985
- CHECK_STATUS(status);
986
-
987
- retval = rb_ary_new();
988
- rb_ary_store(retval, 0, ULONG2NUM(shuffle));
989
- rb_ary_store(retval, 1, ULONG2NUM(deflate));
990
- rb_ary_store(retval, 2, ULONG2NUM(deflate_level));
991
-
992
- return retval;
993
- }
994
-
995
-
996
- static VALUE
997
- rb_nc_del_att (int argc, VALUE *argv, VALUE mod)
998
- {
999
- int status;
1000
-
1001
- CHECK_ARGC(3);
1002
- CHECK_TYPE_ID(argv[0]);
1003
- CHECK_TYPE_ID(argv[1]);
1004
- CHECK_TYPE_STRING(argv[2]);
1005
-
1006
- status = nc_del_att(NUM2INT(argv[0]), NUM2INT(argv[1]), StringValuePtr(argv[2]));
1007
-
1008
- CHECK_STATUS(status);
1009
-
1010
- return LONG2NUM(status);
1011
- }
1012
-
1013
- static int
1014
- nc_get_att_numeric (int ncid, int varid, const char name[],
1015
- nc_type type, void *value)
1016
- {
1017
- switch (type) {
1018
- case NC_BYTE:
1019
- return nc_get_att_schar(ncid, varid, name, value);
1020
- case NC_UBYTE:
1021
- return nc_get_att_ubyte(ncid, varid, name, value);
1022
- case NC_CHAR:
1023
- return nc_get_att_uchar(ncid, varid, name, value);
1024
- case NC_SHORT:
1025
- return nc_get_att_short(ncid, varid, name, value);
1026
- case NC_USHORT:
1027
- return nc_get_att_ushort(ncid, varid, name, value);
1028
- case NC_INT:
1029
- return nc_get_att_int(ncid, varid, name, value);
1030
- case NC_UINT:
1031
- return nc_get_att_uint(ncid, varid, name, value);
1032
- case NC_INT64:
1033
- return nc_get_att_longlong(ncid, varid, name, value);
1034
- case NC_UINT64:
1035
- return nc_get_att_ulonglong(ncid, varid, name, value);
1036
- case NC_FLOAT:
1037
- return nc_get_att_float(ncid, varid, name, value);
1038
- case NC_DOUBLE:
1039
- return nc_get_att_double(ncid, varid, name, value);
1040
- default:
1041
- return NC_EBADTYPE;
1042
- }
1043
- }
1044
-
1045
- static int
1046
- nc_put_att_numeric (int ncid, int varid, const char name[],
1047
- nc_type type, nc_type xtype, size_t len, void *value)
1048
- {
1049
- switch (type) {
1050
- case NC_BYTE:
1051
- return nc_put_att_schar(ncid, varid, name, xtype, len, value);
1052
- case NC_UBYTE:
1053
- return nc_put_att_ubyte(ncid, varid, name, xtype, len, value);
1054
- case NC_CHAR:
1055
- return nc_put_att_uchar(ncid, varid, name, xtype, len, value);
1056
- case NC_SHORT:
1057
- return nc_put_att_short(ncid, varid, name, xtype, len, value);
1058
- case NC_USHORT:
1059
- return nc_put_att_ushort(ncid, varid, name, xtype, len, value);
1060
- case NC_INT:
1061
- return nc_put_att_int(ncid, varid, name, xtype, len, value);
1062
- case NC_UINT:
1063
- return nc_put_att_uint(ncid, varid, name, xtype, len, value);
1064
- case NC_INT64:
1065
- return nc_put_att_longlong(ncid, varid, name, xtype, len, value);
1066
- case NC_UINT64:
1067
- return nc_put_att_longlong(ncid, varid, name, xtype, len, value);
1068
- case NC_FLOAT:
1069
- return nc_put_att_float(ncid, varid, name, xtype, len, value);
1070
- case NC_DOUBLE:
1071
- return nc_put_att_double(ncid, varid, name, xtype, len, value);
1072
- default:
1073
- return NC_EBADTYPE;
1074
- }
1075
- }
1076
-
1077
- static VALUE
1078
- rb_nc_get_att (int argc, VALUE *argv, VALUE mod)
1079
- {
1080
- nc_type type;
1081
- size_t len;
1082
- int status;
1083
-
1084
- CHECK_TYPE_ID(argv[0]);
1085
- CHECK_TYPE_ID(argv[1]);
1086
- CHECK_TYPE_STRING(argv[2]);
1087
-
1088
- status = nc_inq_atttype(NUM2INT(argv[0]), NUM2INT(argv[1]),
1089
- StringValuePtr(argv[2]), &type);
1090
-
1091
- if ( status != NC_NOERR) {
1092
- return Qnil;
1093
- }
1094
-
1095
- status = nc_inq_attlen(NUM2INT(argv[0]), NUM2INT(argv[1]),
1096
- StringValuePtr(argv[2]), &len);
1097
- CHECK_STATUS(status);
1098
-
1099
- if ( argc == 3 ) {
1100
-
1101
- if ( type == NC_CHAR ) {
1102
- volatile VALUE text = rb_str_new(NULL, len);
1103
- status = nc_get_att_text(NUM2INT(argv[0]), NUM2INT(argv[1]),
1104
- StringValuePtr(argv[2]),
1105
- StringValuePtr(text));
1106
- return text;
1107
- }
1108
- else if ( len == 1 ) {
1109
- switch ( type ) {
1110
- case NC_BYTE: {
1111
- int8_t val;
1112
- status = nc_get_att_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1113
- StringValuePtr(argv[2]), type, &val);
1114
- CHECK_STATUS(status);
1115
- return INT2NUM(val);
1116
- }
1117
- case NC_UBYTE: {
1118
- uint8_t val;
1119
- status = nc_get_att_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1120
- StringValuePtr(argv[2]), type, &val);
1121
- CHECK_STATUS(status);
1122
- return INT2NUM(val);
1123
- }
1124
- case NC_SHORT: {
1125
- int16_t val;
1126
- status = nc_get_att_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1127
- StringValuePtr(argv[2]), type, &val);
1128
- CHECK_STATUS(status);
1129
- return INT2NUM(val);
1130
- }
1131
- case NC_USHORT: {
1132
- uint16_t val;
1133
- status = nc_get_att_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1134
- StringValuePtr(argv[2]), type, &val);
1135
- CHECK_STATUS(status);
1136
- return INT2NUM(val);
1137
- }
1138
- case NC_INT: {
1139
- int32_t val;
1140
- status = nc_get_att_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1141
- StringValuePtr(argv[2]), type, &val);
1142
- CHECK_STATUS(status);
1143
- return INT2NUM(val);
1144
- }
1145
- case NC_UINT: {
1146
- uint32_t val;
1147
- status = nc_get_att_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1148
- StringValuePtr(argv[2]), type, &val);
1149
- CHECK_STATUS(status);
1150
- return INT2NUM(val);
1151
- }
1152
- case NC_INT64: {
1153
- int64_t val;
1154
- status = nc_get_att_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1155
- StringValuePtr(argv[2]), type, &val);
1156
- CHECK_STATUS(status);
1157
- return INT2NUM(val);
1158
- }
1159
- case NC_UINT64: {
1160
- uint64_t val;
1161
- status = nc_get_att_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1162
- StringValuePtr(argv[2]), type, &val);
1163
- CHECK_STATUS(status);
1164
- return INT2NUM(val);
1165
- }
1166
- case NC_FLOAT: {
1167
- float32_t val;
1168
- status = nc_get_att_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1169
- StringValuePtr(argv[2]), type, &val);
1170
- CHECK_STATUS(status);
1171
- return rb_float_new(val);
1172
- }
1173
- case NC_DOUBLE: {
1174
- float64_t val;
1175
- status = nc_get_att_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1176
- StringValuePtr(argv[2]), type, &val);
1177
- CHECK_STATUS(status);
1178
- return rb_float_new(val);
1179
- }
1180
- default:
1181
- rb_raise(rb_eRuntimeError, "unknown att nc_type");
1182
- }
1183
- }
1184
- else {
1185
- volatile VALUE out;
1186
- CArray *ca;
1187
- int8_t data_type;
1188
- ca_size_t dim0 = len;
1189
-
1190
- data_type = rb_nc_typemap (type);
1191
- out = rb_carray_new(data_type, 1, &dim0, 0, NULL);
1192
-
1193
- Data_Get_Struct(out, CArray, ca);
1194
-
1195
- status = nc_get_att_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1196
- StringValuePtr(argv[2]), type, ca->ptr);
1197
-
1198
- CHECK_STATUS(status);
1199
-
1200
- return out;
1201
- }
1202
- }
1203
- else {
1204
-
1205
- CHECK_ARGC(4);
1206
-
1207
- if ( type == NC_CHAR ) {
1208
- volatile VALUE text = argv[3];
1209
- rb_str_resize(text, len);
1210
- status = nc_get_att_text(NUM2INT(argv[0]), NUM2INT(argv[1]),
1211
- StringValuePtr(argv[2]),
1212
- StringValuePtr(text));
1213
- }
1214
- else {
1215
- CArray *ca;
1216
- nc_type xtype;
1217
- if ( ! rb_obj_is_kind_of(argv[3], rb_cCArray) ) {
1218
- rb_raise(rb_eTypeError, "arg4 must be a CArray object");
1219
- }
1220
- Data_Get_Struct(argv[3], CArray, ca);
1221
- xtype = rb_nc_rtypemap(ca->data_type);
1222
- ca_attach(ca);
1223
- status = nc_get_att_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1224
- StringValuePtr(argv[2]), type, ca->ptr);
1225
- ca_sync(ca);
1226
- ca_detach(ca);
1227
- }
1228
-
1229
- CHECK_STATUS(status);
1230
-
1231
- return LONG2NUM(status);
1232
- }
1233
- }
1234
-
1235
- static VALUE
1236
- rb_nc_put_att (int argc, VALUE *argv, VALUE mod)
1237
- {
1238
- int status;
1239
-
1240
- CHECK_ARGC(4);
1241
-
1242
- if ( TYPE(argv[3]) == T_STRING ) {
1243
- volatile VALUE text = argv[3];
1244
- status = nc_put_att_text(NUM2INT(argv[0]), NUM2INT(argv[1]),
1245
- StringValuePtr(argv[2]),
1246
- strlen(StringValuePtr(text)), StringValuePtr(text));
1247
- }
1248
- else if ( rb_obj_is_kind_of(argv[3], rb_cInteger) ) {
1249
- int32_t val = NUM2INT(argv[3]);
1250
- status = nc_put_att_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1251
- StringValuePtr(argv[2]),
1252
- NC_INT, NC_INT, 1, &val);
1253
- }
1254
- else if ( rb_obj_is_kind_of(argv[3], rb_cFloat) ) {
1255
- float64_t val = NUM2DBL(argv[3]);
1256
- status = nc_put_att_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1257
- StringValuePtr(argv[2]),
1258
- NC_DOUBLE, NC_DOUBLE, 1, &val);
1259
- }
1260
- else {
1261
- CArray *ca;
1262
- nc_type xtype;
1263
- if ( ! rb_obj_is_kind_of(argv[3], rb_cCArray) ) {
1264
- rb_raise(rb_eTypeError, "arg4 must be a CArray object");
1265
- }
1266
- Data_Get_Struct(argv[3], CArray, ca);
1267
- xtype = rb_nc_rtypemap(ca->data_type);
1268
- ca_attach(ca);
1269
- status = nc_put_att_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1270
- StringValuePtr(argv[2]),
1271
- xtype, xtype, ca->elements, ca->ptr);
1272
- ca_detach(ca);
1273
- }
1274
-
1275
- CHECK_STATUS(status);
1276
-
1277
- return LONG2NUM(status);
1278
- }
1279
-
1280
-
1281
- static int
1282
- nc_get_var1_numeric (int ncid, int varid,
1283
- nc_type type, size_t index[], void *value)
1284
- {
1285
- switch (type) {
1286
- case NC_BYTE:
1287
- return nc_get_var1_schar(ncid, varid, index, value);
1288
- case NC_UBYTE:
1289
- return nc_get_var1_ubyte(ncid, varid, index, value);
1290
- case NC_CHAR:
1291
- return nc_get_var1_uchar(ncid, varid, index, value);
1292
- case NC_SHORT:
1293
- return nc_get_var1_short(ncid, varid, index, value);
1294
- case NC_USHORT:
1295
- return nc_get_var1_ushort(ncid, varid, index, value);
1296
- case NC_INT:
1297
- return nc_get_var1_int(ncid, varid, index, value);
1298
- case NC_UINT:
1299
- return nc_get_var1_uint(ncid, varid, index, value);
1300
- case NC_INT64:
1301
- return nc_get_var1_longlong(ncid, varid, index, value);
1302
- case NC_UINT64:
1303
- return nc_get_var1_ulonglong(ncid, varid, index, value);
1304
- case NC_FLOAT:
1305
- return nc_get_var1_float(ncid, varid, index, value);
1306
- case NC_DOUBLE:
1307
- return nc_get_var1_double(ncid, varid, index, value);
1308
- default:
1309
- return NC_EBADTYPE;
1310
- }
1311
- }
1312
-
1313
- static int
1314
- nc_put_var1_numeric (int ncid, int varid,
1315
- nc_type type, size_t index[], void *value)
1316
- {
1317
- switch (type) {
1318
- case NC_BYTE:
1319
- return nc_put_var1_schar(ncid, varid, index, value);
1320
- case NC_UBYTE:
1321
- return nc_put_var1_ubyte(ncid, varid, index, value);
1322
- case NC_CHAR:
1323
- return nc_put_var1_uchar(ncid, varid, index, value);
1324
- case NC_SHORT:
1325
- return nc_put_var1_short(ncid, varid, index, value);
1326
- case NC_USHORT:
1327
- return nc_put_var1_ushort(ncid, varid, index, value);
1328
- case NC_INT:
1329
- return nc_put_var1_int(ncid, varid, index, value);
1330
- case NC_UINT:
1331
- return nc_put_var1_uint(ncid, varid, index, value);
1332
- case NC_INT64:
1333
- return nc_put_var1_longlong(ncid, varid, index, value);
1334
- case NC_UINT64:
1335
- return nc_put_var1_ulonglong(ncid, varid, index, value);
1336
- case NC_FLOAT:
1337
- return nc_put_var1_float(ncid, varid, index, value);
1338
- case NC_DOUBLE:
1339
- return nc_put_var1_double(ncid, varid, index, value);
1340
- default:
1341
- return NC_EBADTYPE;
1342
- }
1343
- }
1344
-
1345
- static int
1346
- nc_get_var_numeric (int ncid, int varid, nc_type type, void *value)
1347
- {
1348
- switch (type) {
1349
- case NC_BYTE:
1350
- return nc_get_var_schar(ncid, varid, value);
1351
- case NC_UBYTE:
1352
- return nc_get_var_ubyte(ncid, varid, value);
1353
- case NC_CHAR:
1354
- return nc_get_var_uchar(ncid, varid, value);
1355
- case NC_SHORT:
1356
- return nc_get_var_short(ncid, varid, value);
1357
- case NC_USHORT:
1358
- return nc_get_var_ushort(ncid, varid, value);
1359
- case NC_INT:
1360
- return nc_get_var_int(ncid, varid, value);
1361
- case NC_UINT:
1362
- return nc_get_var_uint(ncid, varid, value);
1363
- case NC_INT64:
1364
- return nc_get_var_longlong(ncid, varid, value);
1365
- case NC_UINT64:
1366
- return nc_get_var_ulonglong(ncid, varid, value);
1367
- case NC_FLOAT:
1368
- return nc_get_var_float(ncid, varid, value);
1369
- case NC_DOUBLE:
1370
- return nc_get_var_double(ncid, varid, value);
1371
- default:
1372
- return NC_EBADTYPE;
1373
- }
1374
- }
1375
-
1376
- static int
1377
- nc_put_var_numeric (int ncid, int varid, nc_type type, void *value)
1378
- {
1379
- switch (type) {
1380
- case NC_BYTE:
1381
- return nc_put_var_schar(ncid, varid, value);
1382
- case NC_UBYTE:
1383
- return nc_put_var_ubyte(ncid, varid, value);
1384
- case NC_CHAR:
1385
- return nc_put_var_uchar(ncid, varid, value);
1386
- case NC_SHORT:
1387
- return nc_put_var_short(ncid, varid, value);
1388
- case NC_USHORT:
1389
- return nc_put_var_ushort(ncid, varid, value);
1390
- case NC_INT:
1391
- return nc_put_var_int(ncid, varid, value);
1392
- case NC_UINT:
1393
- return nc_put_var_uint(ncid, varid, value);
1394
- case NC_INT64:
1395
- return nc_put_var_longlong(ncid, varid, value);
1396
- case NC_UINT64:
1397
- return nc_put_var_ulonglong(ncid, varid, value);
1398
- case NC_FLOAT:
1399
- return nc_put_var_float(ncid, varid, value);
1400
- case NC_DOUBLE:
1401
- return nc_put_var_double(ncid, varid, value);
1402
- default:
1403
- return NC_EBADTYPE;
1404
- }
1405
- }
1406
-
1407
- static int
1408
- nc_get_vara_numeric (int ncid, int varid, nc_type type,
1409
- const size_t start[], const size_t count[],
1410
- void *value)
1411
- {
1412
- switch (type) {
1413
- case NC_BYTE:
1414
- return nc_get_vara_schar(ncid, varid, start, count, value);
1415
- case NC_UBYTE:
1416
- return nc_get_vara_ubyte(ncid, varid, start, count, value);
1417
- case NC_CHAR:
1418
- return nc_get_vara_uchar(ncid, varid, start, count, value);
1419
- case NC_SHORT:
1420
- return nc_get_vara_short(ncid, varid, start, count, value);
1421
- case NC_USHORT:
1422
- return nc_get_vara_ushort(ncid, varid, start, count, value);
1423
- case NC_INT:
1424
- return nc_get_vara_int(ncid, varid, start, count, value);
1425
- case NC_UINT:
1426
- return nc_get_vara_uint(ncid, varid, start, count, value);
1427
- case NC_INT64:
1428
- return nc_get_vara_longlong(ncid, varid, start, count, value);
1429
- case NC_UINT64:
1430
- return nc_get_vara_ulonglong(ncid, varid, start, count, value);
1431
- case NC_FLOAT:
1432
- return nc_get_vara_float(ncid, varid, start, count, value);
1433
- case NC_DOUBLE:
1434
- return nc_get_vara_double(ncid, varid, start, count, value);
1435
- default:
1436
- return NC_EBADTYPE;
1437
- }
1438
- }
1439
-
1440
- static int
1441
- nc_put_vara_numeric (int ncid, int varid, nc_type type,
1442
- const size_t start[], const size_t count[],
1443
- void *value)
1444
- {
1445
- switch (type) {
1446
- case NC_BYTE:
1447
- return nc_put_vara_schar(ncid, varid, start, count, value);
1448
- case NC_UBYTE:
1449
- return nc_put_vara_ubyte(ncid, varid, start, count, value);
1450
- case NC_CHAR:
1451
- return nc_put_vara_uchar(ncid, varid, start, count, value);
1452
- case NC_SHORT:
1453
- return nc_put_vara_short(ncid, varid, start, count, value);
1454
- case NC_USHORT:
1455
- return nc_put_vara_ushort(ncid, varid, start, count, value);
1456
- case NC_INT:
1457
- return nc_put_vara_int(ncid, varid, start, count, value);
1458
- case NC_UINT:
1459
- return nc_put_vara_uint(ncid, varid, start, count, value);
1460
- case NC_INT64:
1461
- return nc_put_vara_longlong(ncid, varid, start, count, value);
1462
- case NC_UINT64:
1463
- return nc_put_vara_ulonglong(ncid, varid, start, count, value);
1464
- case NC_FLOAT:
1465
- return nc_put_vara_float(ncid, varid, start, count, value);
1466
- case NC_DOUBLE:
1467
- return nc_put_vara_double(ncid, varid, start, count, value);
1468
- default:
1469
- return NC_EBADTYPE;
1470
- }
1471
- }
1472
-
1473
- static int
1474
- nc_get_vars_numeric (int ncid, int varid, nc_type type,
1475
- const size_t start[], const size_t count[],
1476
- const ptrdiff_t stride[],
1477
- void *value)
1478
- {
1479
- switch (type) {
1480
- case NC_BYTE:
1481
- return nc_get_vars_schar(ncid, varid, start, count, stride, value);
1482
- case NC_UBYTE:
1483
- return nc_get_vars_ubyte(ncid, varid, start, count, stride, value);
1484
- case NC_CHAR:
1485
- return nc_get_vars_uchar(ncid, varid, start, count, stride, value);
1486
- case NC_SHORT:
1487
- return nc_get_vars_short(ncid, varid, start, count, stride, value);
1488
- case NC_USHORT:
1489
- return nc_get_vars_ushort(ncid, varid, start, count, stride, value);
1490
- case NC_INT:
1491
- return nc_get_vars_int(ncid, varid, start, count, stride, value);
1492
- case NC_UINT:
1493
- return nc_get_vars_uint(ncid, varid, start, count, stride, value);
1494
- case NC_INT64:
1495
- return nc_get_vars_longlong(ncid, varid, start, count, stride, value);
1496
- case NC_UINT64:
1497
- return nc_get_vars_ulonglong(ncid, varid, start, count, stride, value);
1498
- case NC_FLOAT:
1499
- return nc_get_vars_float(ncid, varid, start, count, stride, value);
1500
- case NC_DOUBLE:
1501
- return nc_get_vars_double(ncid, varid, start, count, stride, value);
1502
- default:
1503
- return NC_EBADTYPE;
1504
- }
1505
- }
1506
-
1507
- static int
1508
- nc_put_vars_numeric (int ncid, int varid, nc_type type,
1509
- const size_t start[], const size_t count[],
1510
- const ptrdiff_t stride[],
1511
- void *value)
1512
- {
1513
- switch (type) {
1514
- case NC_BYTE:
1515
- return nc_put_vars_schar(ncid, varid, start, count, stride, value);
1516
- case NC_UBYTE:
1517
- return nc_put_vars_ubyte(ncid, varid, start, count, stride, value);
1518
- case NC_CHAR:
1519
- return nc_put_vars_uchar(ncid, varid, start, count, stride, value);
1520
- case NC_SHORT:
1521
- return nc_put_vars_short(ncid, varid, start, count, stride, value);
1522
- case NC_USHORT:
1523
- return nc_put_vars_ushort(ncid, varid, start, count, stride, value);
1524
- case NC_INT:
1525
- return nc_put_vars_int(ncid, varid, start, count, stride, value);
1526
- case NC_UINT:
1527
- return nc_put_vars_uint(ncid, varid, start, count, stride, value);
1528
- case NC_INT64:
1529
- return nc_put_vars_longlong(ncid, varid, start, count, stride, value);
1530
- case NC_UINT64:
1531
- return nc_put_vars_ulonglong(ncid, varid, start, count, stride, value);
1532
- case NC_FLOAT:
1533
- return nc_put_vars_float(ncid, varid, start, count, stride, value);
1534
- case NC_DOUBLE:
1535
- return nc_put_vars_double(ncid, varid, start, count, stride, value);
1536
- default:
1537
- return NC_EBADTYPE;
1538
- }
1539
- }
1540
-
1541
- static int
1542
- nc_get_varm_numeric (int ncid, int varid, nc_type type,
1543
- const size_t start[], const size_t count[],
1544
- const ptrdiff_t stride[], const ptrdiff_t imap[],
1545
- void *value)
1546
- {
1547
- switch (type) {
1548
- case NC_BYTE:
1549
- return nc_get_varm_schar(ncid, varid, start, count, stride, imap, value);
1550
- case NC_UBYTE:
1551
- return nc_get_varm_ubyte(ncid, varid, start, count, stride, imap, value);
1552
- case NC_CHAR:
1553
- return nc_get_varm_uchar(ncid, varid, start, count, stride, imap, value);
1554
- case NC_SHORT:
1555
- return nc_get_varm_short(ncid, varid, start, count, stride, imap, value);
1556
- case NC_USHORT:
1557
- return nc_get_varm_ushort(ncid, varid, start, count, stride, imap, value);
1558
- case NC_INT:
1559
- return nc_get_varm_int(ncid, varid, start, count, stride, imap, value);
1560
- case NC_UINT:
1561
- return nc_get_varm_uint(ncid, varid, start, count, stride, imap, value);
1562
- case NC_INT64:
1563
- return nc_get_varm_longlong(ncid, varid, start, count, stride, imap, value);
1564
- case NC_UINT64:
1565
- return nc_get_varm_ulonglong(ncid, varid, start, count, stride, imap, value);
1566
- case NC_FLOAT:
1567
- return nc_get_varm_float(ncid, varid, start, count, stride, imap, value);
1568
- case NC_DOUBLE:
1569
- return nc_get_varm_double(ncid, varid, start, count, stride, imap, value);
1570
- default:
1571
- return NC_EBADTYPE;
1572
- }
1573
- }
1574
-
1575
- static int
1576
- nc_put_varm_numeric (int ncid, int varid, nc_type type,
1577
- const size_t start[], const size_t count[],
1578
- const ptrdiff_t stride[], const ptrdiff_t imap[],
1579
- void *value)
1580
- {
1581
- switch (type) {
1582
- case NC_BYTE:
1583
- return nc_put_varm_schar(ncid, varid, start, count, stride, imap, value);
1584
- case NC_UBYTE:
1585
- return nc_put_varm_ubyte(ncid, varid, start, count, stride, imap, value);
1586
- case NC_CHAR:
1587
- return nc_put_varm_uchar(ncid, varid, start, count, stride, imap, value);
1588
- case NC_SHORT:
1589
- return nc_put_varm_short(ncid, varid, start, count, stride, imap, value);
1590
- case NC_USHORT:
1591
- return nc_put_varm_ushort(ncid, varid, start, count, stride, imap, value);
1592
- case NC_INT:
1593
- return nc_put_varm_int(ncid, varid, start, count, stride, imap, value);
1594
- case NC_UINT:
1595
- return nc_put_varm_uint(ncid, varid, start, count, stride, imap, value);
1596
- case NC_INT64:
1597
- return nc_put_varm_longlong(ncid, varid, start, count, stride, imap, value);
1598
- case NC_UINT64:
1599
- return nc_put_varm_ulonglong(ncid, varid, start, count, stride, imap, value);
1600
- case NC_FLOAT:
1601
- return nc_put_varm_float(ncid, varid, start, count, stride, imap, value);
1602
- case NC_DOUBLE:
1603
- return nc_put_varm_double(ncid, varid, start, count, stride, imap, value);
1604
- default:
1605
- return NC_EBADTYPE;
1606
- }
1607
- }
1608
-
1609
- static VALUE
1610
- rb_nc_get_var1 (int argc, VALUE *argv, VALUE mod)
1611
- {
1612
- int status;
1613
- nc_type type;
1614
- int ndims;
1615
- size_t index[NC_MAX_DIMS];
1616
- int i;
1617
-
1618
- if ( argc < 3 ) {
1619
- rb_raise(rb_eArgError, "invalid # of arguments");
1620
- }
1621
-
1622
- status = nc_inq_vartype(NUM2INT(argv[0]), NUM2INT(argv[1]), &type);
1623
-
1624
- CHECK_STATUS(status);
1625
-
1626
- status = nc_inq_varndims(NUM2INT(argv[0]), NUM2INT(argv[1]), &ndims);
1627
-
1628
- CHECK_STATUS(status);
1629
-
1630
- Check_Type(argv[2], T_ARRAY);
1631
- for (i=0; i<ndims; i++) {
1632
- index[i] = NUM2ULONG(RARRAY_PTR(argv[2])[i]);
1633
- }
1634
-
1635
- if ( argc == 3 ) {
1636
- switch ( type ) {
1637
- case NC_BYTE: {
1638
- int8_t val;
1639
- status = nc_get_var1_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1640
- type, index, &val);
1641
- CHECK_STATUS(status);
1642
- return INT2NUM(val);
1643
- }
1644
- case NC_UBYTE: {
1645
- uint8_t val;
1646
- status = nc_get_var1_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1647
- type, index, &val);
1648
- CHECK_STATUS(status);
1649
- return INT2NUM(val);
1650
- }
1651
- case NC_SHORT: {
1652
- int16_t val;
1653
- status = nc_get_var1_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1654
- type, index, &val);
1655
- CHECK_STATUS(status);
1656
- return INT2NUM(val);
1657
- }
1658
- case NC_USHORT: {
1659
- uint16_t val;
1660
- status = nc_get_var1_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1661
- type, index, &val);
1662
- CHECK_STATUS(status);
1663
- return INT2NUM(val);
1664
- }
1665
- case NC_INT: {
1666
- int32_t val;
1667
- status = nc_get_var1_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1668
- type, index, &val);
1669
- CHECK_STATUS(status);
1670
- return INT2NUM(val);
1671
- }
1672
- case NC_UINT: {
1673
- uint32_t val;
1674
- status = nc_get_var1_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1675
- type, index, &val);
1676
- CHECK_STATUS(status);
1677
- return INT2NUM(val);
1678
- }
1679
- case NC_INT64: {
1680
- int64_t val;
1681
- status = nc_get_var1_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1682
- type, index, &val);
1683
- CHECK_STATUS(status);
1684
- return INT2NUM(val);
1685
- }
1686
- case NC_UINT64: {
1687
- uint64_t val;
1688
- status = nc_get_var1_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1689
- type, index, &val);
1690
- CHECK_STATUS(status);
1691
- return INT2NUM(val);
1692
- }
1693
- case NC_FLOAT: {
1694
- float32_t val;
1695
- status = nc_get_var1_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1696
- type, index, &val);
1697
- CHECK_STATUS(status);
1698
- return rb_float_new(val);
1699
- }
1700
- case NC_DOUBLE: {
1701
- float64_t val;
1702
- status = nc_get_var1_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1703
- type, index, &val);
1704
- CHECK_STATUS(status);
1705
- return rb_float_new(val);
1706
- }
1707
- default:
1708
- rb_raise(rb_eRuntimeError, "unknown att nc_type");
1709
- }
1710
- }
1711
- else {
1712
- volatile VALUE data = argv[3];
1713
- CArray *ca;
1714
-
1715
- if ( ! rb_obj_is_kind_of(data, rb_cCArray) ) {
1716
- rb_raise(rb_eTypeError, "arg4 must be a CArray object");
1717
- }
1718
-
1719
- Data_Get_Struct(data, CArray, ca);
1720
-
1721
- type = rb_nc_rtypemap(ca->data_type);
1722
-
1723
- ca_attach(ca);
1724
- status = nc_get_var1_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1725
- type, index, ca->ptr);
1726
-
1727
- ca_sync(ca);
1728
- ca_detach(ca);
1729
-
1730
- CHECK_STATUS(status);
1731
-
1732
- return LONG2NUM(status);
1733
- }
1734
-
1735
- }
1736
-
1737
- static VALUE
1738
- rb_nc_put_var1 (int argc, VALUE *argv, VALUE mod)
1739
- {
1740
- volatile VALUE data;
1741
- int status;
1742
- nc_type type;
1743
- size_t index[NC_MAX_DIMS];
1744
- int ndims;
1745
- CArray *ca;
1746
- int i;
1747
-
1748
- CHECK_ARGC(4);
1749
-
1750
- status = nc_inq_varndims(NUM2INT(argv[0]), NUM2INT(argv[1]), &ndims);
1751
-
1752
- CHECK_STATUS(status);
1753
-
1754
- Check_Type(argv[2], T_ARRAY);
1755
-
1756
- for (i=0; i<ndims; i++) {
1757
- index[i] = NUM2ULONG(RARRAY_PTR(argv[2])[i]);
1758
- }
1759
-
1760
- data = argv[3];
1761
-
1762
- if ( ! rb_obj_is_kind_of(data, rb_cCArray) ) {
1763
- rb_raise(rb_eTypeError, "arg4 must be a CArray object");
1764
- }
1765
-
1766
- Data_Get_Struct(data, CArray, ca);
1767
-
1768
- type = rb_nc_rtypemap(ca->data_type);
1769
-
1770
- ca_attach(ca);
1771
- status = nc_put_var1_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1772
- type, index, ca->ptr);
1773
- ca_detach(ca);
1774
-
1775
- CHECK_STATUS(status);
1776
-
1777
- return LONG2NUM(status);
1778
- }
1779
-
1780
- static VALUE
1781
- rb_nc_get_var (int argc, VALUE *argv, VALUE mod)
1782
- {
1783
- int status;
1784
- int ndims;
1785
- int dimid[NC_MAX_DIMS];
1786
- nc_type type;
1787
-
1788
- if ( argc < 2 ) {
1789
- rb_raise(rb_eArgError, "invalid # of arguments");
1790
- }
1791
-
1792
- status = nc_inq_vartype(NUM2INT(argv[0]), NUM2INT(argv[1]), &type);
1793
-
1794
- CHECK_STATUS(status);
1795
-
1796
- status = nc_inq_varndims(NUM2INT(argv[0]), NUM2INT(argv[1]), &ndims);
1797
-
1798
- CHECK_STATUS(status);
1799
-
1800
- status = nc_inq_vardimid(NUM2INT(argv[0]), NUM2INT(argv[1]), dimid);
1801
-
1802
- CHECK_STATUS(status);
1803
-
1804
- if ( argc == 2 ) {
1805
- volatile VALUE out;
1806
- CArray *ca;
1807
- int8_t rank, data_type;
1808
- ca_size_t dim[CA_RANK_MAX];
1809
- size_t len;
1810
- int i;
1811
-
1812
- data_type = rb_nc_typemap (type);
1813
- rank = ndims;
1814
- for (i=0; i<rank; i++) {
1815
- status = nc_inq_dimlen(NUM2INT(argv[0]), dimid[i], &len);
1816
- CHECK_STATUS(status);
1817
- dim[i] = len;
1818
- }
1819
-
1820
- out = rb_carray_new(data_type, rank, dim, 0, NULL);
1821
- Data_Get_Struct(out, CArray, ca);
1822
-
1823
- status = nc_get_var_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1824
- type, ca->ptr);
1825
-
1826
- CHECK_STATUS(status);
1827
-
1828
- return out;
1829
- }
1830
- else {
1831
- volatile VALUE data = argv[2];
1832
- CArray *ca;
1833
-
1834
- if ( ! rb_obj_is_kind_of(data, rb_cCArray) ) {
1835
- rb_raise(rb_eTypeError, "arg3 must be a CArray object");
1836
- }
1837
-
1838
- Data_Get_Struct(data, CArray, ca);
1839
-
1840
- type = rb_nc_rtypemap(ca->data_type);
1841
-
1842
- ca_attach(ca);
1843
- status = nc_get_var_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1844
- type, ca->ptr);
1845
- ca_sync(ca);
1846
- ca_detach(ca);
1847
-
1848
- CHECK_STATUS(status);
1849
-
1850
- return LONG2NUM(status);
1851
- }
1852
- }
1853
-
1854
- static VALUE
1855
- rb_nc_put_var (int argc, VALUE *argv, VALUE mod)
1856
- {
1857
- volatile VALUE data;
1858
- int status;
1859
- nc_type type;
1860
- CArray *ca;
1861
-
1862
- CHECK_ARGC(3);
1863
-
1864
- status = nc_inq_vartype(NUM2INT(argv[0]), NUM2INT(argv[1]), &type);
1865
-
1866
- CHECK_STATUS(status);
1867
-
1868
- data = argv[2];
1869
-
1870
- if ( ! rb_obj_is_kind_of(data, rb_cCArray) ) {
1871
- rb_raise(rb_eTypeError, "arg3 must be a CArray object");
1872
- }
1873
-
1874
- Data_Get_Struct(data, CArray, ca);
1875
-
1876
- type = rb_nc_rtypemap(ca->data_type);
1877
- ca_attach(ca);
1878
- status = nc_put_var_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1879
- type, ca->ptr);
1880
- ca_detach(ca);
1881
-
1882
- CHECK_STATUS(status);
1883
-
1884
- return LONG2NUM(status);
1885
- }
1886
-
1887
- static VALUE
1888
- rb_nc_get_vara (int argc, VALUE *argv, VALUE mod)
1889
- {
1890
- int status;
1891
- nc_type type;
1892
- int ndims;
1893
- int dimid[NC_MAX_DIMS];
1894
- size_t start[NC_MAX_DIMS], count[NC_MAX_DIMS];
1895
- int i;
1896
-
1897
- if ( argc < 4 ) {
1898
- rb_raise(rb_eArgError, "invalid # of arguments");
1899
- }
1900
-
1901
- status = nc_inq_vartype(NUM2INT(argv[0]), NUM2INT(argv[1]), &type);
1902
-
1903
- CHECK_STATUS(status);
1904
-
1905
- status = nc_inq_varndims(NUM2INT(argv[0]), NUM2INT(argv[1]), &ndims);
1906
-
1907
- CHECK_STATUS(status);
1908
-
1909
- status = nc_inq_vardimid(NUM2INT(argv[0]), NUM2INT(argv[1]), dimid);
1910
-
1911
- CHECK_STATUS(status);
1912
-
1913
- Check_Type(argv[2], T_ARRAY);
1914
- Check_Type(argv[3], T_ARRAY);
1915
-
1916
- for (i=0; i<ndims; i++) {
1917
- start[i] = NUM2ULONG(RARRAY_PTR(argv[2])[i]);
1918
- count[i] = NUM2ULONG(RARRAY_PTR(argv[3])[i]);
1919
- }
1920
-
1921
- if ( argc == 4 ) {
1922
- volatile VALUE out;
1923
- CArray *ca;
1924
- int8_t rank, data_type;
1925
- ca_size_t dim[CA_RANK_MAX];
1926
- int i;
1927
-
1928
- data_type = rb_nc_typemap (type);
1929
- rank = ndims;
1930
- for (i=0; i<rank; i++) {
1931
- dim[i] = count[i];
1932
- }
1933
-
1934
- out = rb_carray_new(data_type, rank, dim, 0, NULL);
1935
- Data_Get_Struct(out, CArray, ca);
1936
-
1937
- status = nc_get_vara_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1938
- type, start, count, ca->ptr);
1939
-
1940
- CHECK_STATUS(status);
1941
-
1942
- return out;
1943
- }
1944
- else {
1945
- volatile VALUE data = argv[4];
1946
- CArray *ca;
1947
-
1948
- if ( ! rb_obj_is_kind_of(data, rb_cCArray) ) {
1949
- rb_raise(rb_eTypeError, "arg5 must be a CArray object");
1950
- }
1951
- Data_Get_Struct(data, CArray, ca);
1952
-
1953
- if ( ca->ndim != ndims ) {
1954
- rb_raise(rb_eRuntimeError, "rank mismatch");
1955
- }
1956
-
1957
- for (i=0; i<ca->ndim; i++) {
1958
- if ( ca->dim[i] != (ca_size_t) count[i] ) {
1959
- rb_raise(rb_eRuntimeError, "dim[%i] mismatch", i);
1960
- }
1961
- }
1962
-
1963
- type = rb_nc_rtypemap(ca->data_type);
1964
-
1965
- ca_attach(ca);
1966
- status = nc_get_vara_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
1967
- type, start, count, ca->ptr);
1968
- ca_sync(ca);
1969
- ca_detach(ca);
1970
-
1971
- CHECK_STATUS(status);
1972
-
1973
- return LONG2NUM(status);
1974
- }
1975
- }
1976
-
1977
- static VALUE
1978
- rb_nc_put_vara (int argc, VALUE *argv, VALUE mod)
1979
- {
1980
- volatile VALUE data;
1981
- int status;
1982
- nc_type type;
1983
- int ndims;
1984
- size_t start[NC_MAX_DIMS], count[NC_MAX_DIMS];
1985
- CArray *ca;
1986
- int i;
1987
-
1988
- CHECK_ARGC(5);
1989
-
1990
- status = nc_inq_varndims(NUM2INT(argv[0]), NUM2INT(argv[1]), &ndims);
1991
-
1992
- CHECK_STATUS(status);
1993
-
1994
- Check_Type(argv[2], T_ARRAY);
1995
- Check_Type(argv[3], T_ARRAY);
1996
-
1997
- for (i=0; i<ndims; i++) {
1998
- start[i] = NUM2ULONG(RARRAY_PTR(argv[2])[i]);
1999
- count[i] = NUM2ULONG(RARRAY_PTR(argv[3])[i]);
2000
- }
2001
-
2002
- data = argv[4];
2003
-
2004
- if ( ! rb_obj_is_kind_of(data, rb_cCArray) ) {
2005
- rb_raise(rb_eTypeError, "arg5 must be a CArray object");
2006
- }
2007
-
2008
- Data_Get_Struct(data, CArray, ca);
2009
-
2010
- type = rb_nc_rtypemap(ca->data_type);
2011
-
2012
- ca_attach(ca);
2013
- status = nc_put_vara_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
2014
- type, start, count, ca->ptr);
2015
- ca_detach(ca);
2016
-
2017
- CHECK_STATUS(status);
2018
-
2019
- return LONG2NUM(status);
2020
- }
2021
-
2022
- static VALUE
2023
- rb_nc_get_vars (int argc, VALUE *argv, VALUE mod)
2024
- {
2025
- int status;
2026
- nc_type type;
2027
- int ndims;
2028
- int dimid[NC_MAX_DIMS];
2029
- size_t start[NC_MAX_DIMS], count[NC_MAX_DIMS];
2030
- ptrdiff_t stride[NC_MAX_DIMS];
2031
- CArray *ca;
2032
- int i;
2033
-
2034
- if ( argc < 5 ) {
2035
- rb_raise(rb_eArgError, "invalid # of arguments");
2036
- }
2037
-
2038
- status = nc_inq_vartype(NUM2INT(argv[0]), NUM2INT(argv[1]), &type);
2039
-
2040
- CHECK_STATUS(status);
2041
-
2042
- status = nc_inq_varndims(NUM2INT(argv[0]), NUM2INT(argv[1]), &ndims);
2043
-
2044
- CHECK_STATUS(status);
2045
-
2046
- status = nc_inq_vardimid(NUM2INT(argv[0]), NUM2INT(argv[1]), dimid);
2047
-
2048
- CHECK_STATUS(status);
2049
-
2050
- Check_Type(argv[2], T_ARRAY);
2051
- Check_Type(argv[3], T_ARRAY);
2052
- Check_Type(argv[4], T_ARRAY);
2053
-
2054
- for (i=0; i<ndims; i++) {
2055
- start[i] = NUM2ULONG(RARRAY_PTR(argv[2])[i]);
2056
- count[i] = NUM2ULONG(RARRAY_PTR(argv[3])[i]);
2057
- stride[i] = NUM2ULONG(RARRAY_PTR(argv[4])[i]);
2058
- }
2059
-
2060
- if ( argc == 5 ) {
2061
- volatile VALUE out;
2062
- CArray *ca;
2063
- int8_t rank, data_type;
2064
- ca_size_t dim[CA_RANK_MAX];
2065
- int i;
2066
-
2067
- data_type = rb_nc_typemap (type);
2068
- rank = ndims;
2069
- for (i=0; i<rank; i++) {
2070
- dim[i] = count[i];
2071
- }
2072
-
2073
- out = rb_carray_new(data_type, rank, dim, 0, NULL);
2074
- Data_Get_Struct(out, CArray, ca);
2075
-
2076
- status = nc_get_vars_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
2077
- type, start, count, stride, ca->ptr);
2078
-
2079
- CHECK_STATUS(status);
2080
-
2081
- return out;
2082
- }
2083
- else {
2084
- volatile VALUE data = argv[5];
2085
- int i;
2086
-
2087
- if ( ! rb_obj_is_kind_of(data, rb_cCArray) ) {
2088
- rb_raise(rb_eTypeError, "arg6 must be a CArray object");
2089
- }
2090
-
2091
- Data_Get_Struct(data, CArray, ca);
2092
-
2093
- if ( ca->ndim != ndims ) {
2094
- rb_raise(rb_eRuntimeError, "rank mismatch");
2095
- }
2096
-
2097
- for (i=0; i<ca->ndim; i++) {
2098
- if ( ca->dim[i] != (ca_size_t) count[i] ) {
2099
- rb_raise(rb_eRuntimeError, "dim[%i] mismatch", i);
2100
- }
2101
- }
2102
-
2103
- type = rb_nc_rtypemap(ca->data_type);
2104
-
2105
- ca_attach(ca);
2106
- status = nc_get_vars_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
2107
- type, start, count, stride, ca->ptr);
2108
- ca_sync(ca);
2109
- ca_detach(ca);
2110
-
2111
- CHECK_STATUS(status);
2112
-
2113
- return LONG2NUM(status);
2114
- }
2115
- }
2116
-
2117
- static VALUE
2118
- rb_nc_put_vars (int argc, VALUE *argv, VALUE mod)
2119
- {
2120
- volatile VALUE data;
2121
- int status;
2122
- nc_type type;
2123
- int ndims;
2124
- size_t start[NC_MAX_DIMS], count[NC_MAX_DIMS];
2125
- ptrdiff_t stride[NC_MAX_DIMS];
2126
- CArray *ca;
2127
- int i;
2128
-
2129
- CHECK_ARGC(6);
2130
-
2131
- status = nc_inq_varndims(NUM2INT(argv[0]), NUM2INT(argv[1]), &ndims);
2132
-
2133
- CHECK_STATUS(status);
2134
-
2135
- Check_Type(argv[2], T_ARRAY);
2136
- Check_Type(argv[3], T_ARRAY);
2137
- Check_Type(argv[4], T_ARRAY);
2138
-
2139
- for (i=0; i<ndims; i++) {
2140
- start[i] = NUM2ULONG(RARRAY_PTR(argv[2])[i]);
2141
- count[i] = NUM2ULONG(RARRAY_PTR(argv[3])[i]);
2142
- stride[i] = NUM2ULONG(RARRAY_PTR(argv[4])[i]);
2143
- }
2144
-
2145
- data = argv[5];
2146
-
2147
- if ( ! rb_obj_is_kind_of(data, rb_cCArray) ) {
2148
- rb_raise(rb_eTypeError, "arg6 must be a CArray object");
2149
- }
2150
-
2151
- Data_Get_Struct(data, CArray, ca);
2152
-
2153
- type = rb_nc_rtypemap(ca->data_type);
2154
-
2155
- ca_attach(ca);
2156
- status = nc_put_vars_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
2157
- type, start, count, stride, ca->ptr);
2158
- ca_detach(ca);
2159
-
2160
- CHECK_STATUS(status);
2161
-
2162
- return LONG2NUM(status);
2163
- }
2164
-
2165
- static VALUE
2166
- rb_nc_get_varm (int argc, VALUE *argv, VALUE mod)
2167
- {
2168
- int status;
2169
- nc_type type;
2170
- int ndims;
2171
- int dimid[NC_MAX_DIMS];
2172
- size_t start[NC_MAX_DIMS], count[NC_MAX_DIMS];
2173
- ptrdiff_t stride[NC_MAX_DIMS], imap[NC_MAX_DIMS];
2174
- CArray *ca;
2175
- int i;
2176
-
2177
- if ( argc < 6 ) {
2178
- rb_raise(rb_eArgError, "invalid # of arguments");
2179
- }
2180
-
2181
- status = nc_inq_vartype(NUM2INT(argv[0]), NUM2INT(argv[1]), &type);
2182
-
2183
- CHECK_STATUS(status);
2184
-
2185
- status = nc_inq_varndims(NUM2INT(argv[0]), NUM2INT(argv[1]), &ndims);
2186
-
2187
- CHECK_STATUS(status);
2188
-
2189
- status = nc_inq_vardimid(NUM2INT(argv[0]), NUM2INT(argv[1]), dimid);
2190
-
2191
- CHECK_STATUS(status);
2192
-
2193
- Check_Type(argv[2], T_ARRAY);
2194
- Check_Type(argv[3], T_ARRAY);
2195
- Check_Type(argv[4], T_ARRAY);
2196
- Check_Type(argv[5], T_ARRAY);
2197
-
2198
- for (i=0; i<ndims; i++) {
2199
- start[i] = NUM2ULONG(RARRAY_PTR(argv[2])[i]);
2200
- count[i] = NUM2ULONG(RARRAY_PTR(argv[3])[i]);
2201
- stride[i] = NUM2ULONG(RARRAY_PTR(argv[4])[i]);
2202
- imap[i] = NUM2ULONG(RARRAY_PTR(argv[5])[i]);
2203
- }
2204
-
2205
- if ( argc == 6 ) {
2206
- volatile VALUE out;
2207
- CArray *ca;
2208
- int8_t rank, data_type;
2209
- ca_size_t dim[CA_RANK_MAX];
2210
- int i;
2211
-
2212
- data_type = rb_nc_typemap (type);
2213
- rank = ndims;
2214
- for (i=0; i<rank; i++) {
2215
- dim[i] = count[i];
2216
- }
2217
-
2218
- out = rb_carray_new(data_type, rank, dim, 0, NULL);
2219
- Data_Get_Struct(out, CArray, ca);
2220
-
2221
- status = nc_get_varm_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
2222
- type, start, count, stride, imap, ca->ptr);
2223
-
2224
- CHECK_STATUS(status);
2225
-
2226
- return out;
2227
- }
2228
- else {
2229
- volatile VALUE data = argv[6];
2230
- int i;
2231
-
2232
- if ( ! rb_obj_is_kind_of(data, rb_cCArray) ) {
2233
- rb_raise(rb_eTypeError, "arg6 must be a CArray object");
2234
- }
2235
-
2236
- Data_Get_Struct(data, CArray, ca);
2237
-
2238
- if ( ca->ndim != ndims ) {
2239
- rb_raise(rb_eRuntimeError, "rank mismatch");
2240
- }
2241
-
2242
- for (i=0; i<ca->ndim; i++) {
2243
- if ( ca->dim[i] != (ca_size_t) count[i] ) {
2244
- rb_raise(rb_eRuntimeError, "dim[%i] mismatch", i);
2245
- }
2246
- }
2247
-
2248
- type = rb_nc_rtypemap(ca->data_type);
2249
-
2250
- ca_attach(ca);
2251
- status = nc_get_varm_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
2252
- type, start, count, stride, imap, ca->ptr);
2253
- ca_sync(ca);
2254
- ca_detach(ca);
2255
-
2256
- CHECK_STATUS(status);
2257
-
2258
- return LONG2NUM(status);
2259
- }
2260
- }
2261
-
2262
- static VALUE
2263
- rb_nc_put_varm (int argc, VALUE *argv, VALUE mod)
2264
- {
2265
- volatile VALUE data;
2266
- int status;
2267
- nc_type type;
2268
- int ndims;
2269
- size_t start[NC_MAX_DIMS], count[NC_MAX_DIMS];
2270
- ptrdiff_t stride[NC_MAX_DIMS], imap[NC_MAX_DIMS];
2271
- CArray *ca;
2272
- int i;
2273
-
2274
- CHECK_ARGC(7);
2275
-
2276
- status = nc_inq_varndims(NUM2INT(argv[0]), NUM2INT(argv[1]), &ndims);
2277
-
2278
- CHECK_STATUS(status);
2279
-
2280
- Check_Type(argv[2], T_ARRAY);
2281
- Check_Type(argv[3], T_ARRAY);
2282
- Check_Type(argv[4], T_ARRAY);
2283
- Check_Type(argv[5], T_ARRAY);
2284
-
2285
- for (i=0; i<ndims; i++) {
2286
- start[i] = NUM2ULONG(RARRAY_PTR(argv[2])[i]);
2287
- count[i] = NUM2ULONG(RARRAY_PTR(argv[3])[i]);
2288
- stride[i] = NUM2ULONG(RARRAY_PTR(argv[4])[i]);
2289
- imap[i] = NUM2ULONG(RARRAY_PTR(argv[5])[i]);
2290
- }
2291
-
2292
- data = argv[6];
2293
-
2294
- if ( ! rb_obj_is_kind_of(data, rb_cCArray) ) {
2295
- rb_raise(rb_eTypeError, "arg7 must be a CArray object");
2296
- }
2297
-
2298
- Data_Get_Struct(data, CArray, ca);
2299
-
2300
- type = rb_nc_rtypemap(ca->data_type);
2301
-
2302
- ca_attach(ca);
2303
- status = nc_put_varm_numeric(NUM2INT(argv[0]), NUM2INT(argv[1]),
2304
- type, start, count, stride, imap, ca->ptr);
2305
- ca_detach(ca);
2306
-
2307
- CHECK_STATUS(status);
2308
-
2309
- return LONG2NUM(status);
2310
- }
2311
-
2312
- static VALUE
2313
- rb_nc_rename_dim (int argc, VALUE *argv, VALUE mod)
2314
- {
2315
- int status;
2316
-
2317
- CHECK_ARGC(3);
2318
- CHECK_TYPE_ID(argv[0]);
2319
- CHECK_TYPE_ID(argv[1]);
2320
- CHECK_TYPE_STRING(argv[2]);
2321
-
2322
- status = nc_rename_dim(NUM2INT(argv[0]), NUM2INT(argv[1]),
2323
- StringValuePtr(argv[2]));
2324
-
2325
- CHECK_STATUS(status);
2326
-
2327
- return LONG2NUM(status);
2328
- }
2329
-
2330
- static VALUE
2331
- rb_nc_rename_grp (int argc, VALUE *argv, VALUE mod)
2332
- {
2333
- int status;
2334
-
2335
- CHECK_ARGC(2);
2336
- CHECK_TYPE_ID(argv[0]);
2337
- CHECK_TYPE_STRING(argv[1]);
2338
-
2339
- status = nc_rename_grp(NUM2INT(argv[0]), StringValuePtr(argv[1]));
2340
-
2341
- CHECK_STATUS(status);
2342
-
2343
- return LONG2NUM(status);
2344
- }
2345
-
2346
- static VALUE
2347
- rb_nc_rename_var (int argc, VALUE *argv, VALUE mod)
2348
- {
2349
- int status;
2350
-
2351
- CHECK_ARGC(3);
2352
- CHECK_TYPE_ID(argv[0]);
2353
- CHECK_TYPE_ID(argv[1]);
2354
- CHECK_TYPE_STRING(argv[2]);
2355
-
2356
- status = nc_rename_var(NUM2INT(argv[0]), NUM2INT(argv[1]),
2357
- StringValuePtr(argv[2]));
2358
-
2359
- CHECK_STATUS(status);
2360
-
2361
- return LONG2NUM(status);
2362
- }
2363
-
2364
- static VALUE
2365
- rb_nc_rename_att (int argc, VALUE *argv, VALUE mod)
2366
- {
2367
- int status;
2368
-
2369
- CHECK_ARGC(4);
2370
- CHECK_TYPE_ID(argv[0]);
2371
- CHECK_TYPE_ID(argv[1]);
2372
- CHECK_TYPE_STRING(argv[2]);
2373
- CHECK_TYPE_STRING(argv[3]);
2374
-
2375
- status = nc_rename_att(NUM2INT(argv[0]), NUM2INT(argv[1]),
2376
- StringValuePtr(argv[2]), StringValuePtr(argv[3]));
2377
-
2378
- CHECK_STATUS(status);
2379
-
2380
- return LONG2NUM(status);
2381
- }
2382
-
2383
- static VALUE
2384
- rb_nc_set_fill (int argc, VALUE *argv, VALUE mod)
2385
- {
2386
- int status;
2387
- int old_fillmode;
2388
-
2389
- CHECK_ARGC(2);
2390
- CHECK_TYPE_ID(argv[0]);
2391
- CHECK_TYPE_INT(argv[1]);
2392
-
2393
- status = nc_set_fill(NUM2INT(argv[0]), NUM2INT(argv[1]), &old_fillmode);
2394
-
2395
- CHECK_STATUS(status);
2396
-
2397
- return LONG2NUM(old_fillmode);
2398
- }
2399
-
2400
- static VALUE
2401
- rb_nc_copy_att (int argc, VALUE *argv, VALUE mod)
2402
- {
2403
- int status;
2404
-
2405
- CHECK_ARGC(5);
2406
- CHECK_TYPE_ID(argv[0]);
2407
- CHECK_TYPE_ID(argv[1]);
2408
- CHECK_TYPE_STRING(argv[2]);
2409
- CHECK_TYPE_ID(argv[3]);
2410
- CHECK_TYPE_ID(argv[4]);
2411
-
2412
- status = nc_copy_att(NUM2INT(argv[0]), NUM2INT(argv[1]),
2413
- StringValuePtr(argv[2]), NUM2INT(argv[3]), NUM2INT(argv[4]));
2414
-
2415
- CHECK_STATUS(status);
2416
-
2417
- return LONG2NUM(status);
2418
- }
2419
-
2420
- void
2421
- Init_netcdflib ()
2422
- {
2423
-
2424
- mNetCDF = rb_define_module("NC");
2425
-
2426
- rb_define_singleton_method(mNetCDF, "ca_type", rb_nc_ca_type, -1);
2427
- rb_define_singleton_method(mNetCDF, "nc_type", rb_nc_nc_type, -1);
2428
-
2429
- rb_define_module_function(mNetCDF, "nc_create", rb_nc_create, -1);
2430
- rb_define_singleton_method(mNetCDF, "create", rb_nc_create, -1);
2431
- rb_define_module_function(mNetCDF, "nc_open", rb_nc_open, -1);
2432
- rb_define_singleton_method(mNetCDF, "open", rb_nc_open, -1);
2433
- rb_define_module_function(mNetCDF, "nc_close", rb_nc_close, -1);
2434
- rb_define_singleton_method(mNetCDF, "close", rb_nc_close, -1);
2435
- rb_define_module_function(mNetCDF, "nc_redef", rb_nc_redef, -1);
2436
- rb_define_singleton_method(mNetCDF, "redef", rb_nc_redef, -1);
2437
- rb_define_module_function(mNetCDF, "nc_enddef", rb_nc_enddef, -1);
2438
- rb_define_singleton_method(mNetCDF, "enddef", rb_nc_enddef, -1);
2439
- rb_define_module_function(mNetCDF, "nc_sync", rb_nc_sync, -1);
2440
- rb_define_singleton_method(mNetCDF, "sync", rb_nc_sync, -1);
2441
- rb_define_module_function(mNetCDF, "nc_set_fill", rb_nc_set_fill, -1);
2442
- rb_define_singleton_method(mNetCDF, "set_fill", rb_nc_set_fill, -1);
2443
-
2444
- rb_define_module_function(mNetCDF, "nc_def_dim", rb_nc_def_dim, -1);
2445
- rb_define_singleton_method(mNetCDF, "def_dim", rb_nc_def_dim, -1);
2446
- // nc_inq_dim is not defined
2447
- rb_define_module_function(mNetCDF, "nc_inq_dimid", rb_nc_inq_dimid, -1);
2448
- rb_define_singleton_method(mNetCDF, "inq_dimid", rb_nc_inq_dimid, -1);
2449
- rb_define_module_function(mNetCDF, "nc_inq_dimlen", rb_nc_inq_dimlen, -1);
2450
- rb_define_singleton_method(mNetCDF, "inq_dimlen", rb_nc_inq_dimlen, -1);
2451
- rb_define_module_function(mNetCDF, "nc_inq_dimname", rb_nc_inq_dimname, -1);
2452
- rb_define_singleton_method(mNetCDF, "inq_dimname", rb_nc_inq_dimname, -1);
2453
- rb_define_module_function(mNetCDF, "nc_inq_ndims", rb_nc_inq_ndims, -1);
2454
- rb_define_singleton_method(mNetCDF, "inq_ndims", rb_nc_inq_ndims, -1);
2455
- rb_define_module_function(mNetCDF, "nc_inq_unlimdim", rb_nc_inq_unlimdim, -1);
2456
- rb_define_singleton_method(mNetCDF, "inq_unlimdim", rb_nc_inq_unlimdim, -1);
2457
- rb_define_module_function(mNetCDF, "nc_rename_dim", rb_nc_rename_dim, -1);
2458
- rb_define_singleton_method(mNetCDF, "rename_dim", rb_nc_rename_dim, -1);
2459
-
2460
- rb_define_module_function(mNetCDF, "nc_def_var", rb_nc_def_var, -1);
2461
- rb_define_singleton_method(mNetCDF, "def_var", rb_nc_def_var, -1);
2462
- rb_define_module_function(mNetCDF, "nc_def_var_chunking", rb_nc_def_var_chunking, -1);
2463
- rb_define_singleton_method(mNetCDF, "def_var_chunking", rb_nc_def_var_chunking, -1);
2464
- rb_define_module_function(mNetCDF, "nc_def_var_deflate", rb_nc_def_var_deflate, -1);
2465
- rb_define_singleton_method(mNetCDF, "def_var_deflate", rb_nc_def_var_deflate, -1);
2466
- // nc_def_var_endian
2467
- // nc_def_var_fill
2468
- // nc_def_var_fletcher32
2469
- // nc_free_string
2470
- rb_define_module_function(mNetCDF, "nc_get_var1", rb_nc_get_var1, -1);
2471
- rb_define_singleton_method(mNetCDF, "get_var1", rb_nc_get_var1, -1);
2472
- rb_define_module_function(mNetCDF, "nc_get_var", rb_nc_get_var, -1);
2473
- rb_define_singleton_method(mNetCDF, "get_var", rb_nc_get_var, -1);
2474
- rb_define_module_function(mNetCDF, "nc_get_vara", rb_nc_get_vara, -1);
2475
- rb_define_singleton_method(mNetCDF, "get_vara", rb_nc_get_vara, -1);
2476
- rb_define_module_function(mNetCDF, "nc_get_vars", rb_nc_get_vars, -1);
2477
- rb_define_singleton_method(mNetCDF, "get_vars", rb_nc_get_vars, -1);
2478
- rb_define_module_function(mNetCDF, "nc_get_varm", rb_nc_get_varm, -1);
2479
- rb_define_singleton_method(mNetCDF, "get_varm", rb_nc_get_varm, -1);
2480
- //nc_inq_var
2481
- rb_define_module_function(mNetCDF, "nc_inq_var_chunking", rb_nc_inq_var_chunking, -1);
2482
- rb_define_singleton_method(mNetCDF, "inq_var_chunking", rb_nc_inq_var_chunking, -1);
2483
- rb_define_module_function(mNetCDF, "nc_inq_var_deflate", rb_nc_inq_var_deflate, -1);
2484
- rb_define_singleton_method(mNetCDF, "inq_var_deflate", rb_nc_inq_var_deflate, -1);
2485
- //nc_inq_var_endian
2486
- //nc_inq_var_fill
2487
- //nc_inq_var_filter
2488
- //nc_inq_var_fletcher32
2489
- //nc_inq_var_szip
2490
- rb_define_module_function(mNetCDF, "nc_inq_vardimid", rb_nc_inq_vardimid, -1);
2491
- rb_define_singleton_method(mNetCDF, "inq_vardimid", rb_nc_inq_vardimid, -1);
2492
- rb_define_module_function(mNetCDF, "nc_inq_varid", rb_nc_inq_varid, -1);
2493
- rb_define_singleton_method(mNetCDF, "inq_varid", rb_nc_inq_varid, -1);
2494
- rb_define_module_function(mNetCDF, "nc_inq_varname", rb_nc_inq_varname, -1);
2495
- rb_define_singleton_method(mNetCDF, "inq_varname", rb_nc_inq_varname, -1);
2496
- rb_define_module_function(mNetCDF, "nc_inq_varnatts", rb_nc_inq_varnatts, -1);
2497
- rb_define_singleton_method(mNetCDF, "inq_varnatts", rb_nc_inq_varnatts, -1);
2498
- rb_define_module_function(mNetCDF, "nc_inq_varndims", rb_nc_inq_varndims, -1);
2499
- rb_define_singleton_method(mNetCDF, "inq_varndims", rb_nc_inq_varndims, -1);
2500
- rb_define_module_function(mNetCDF, "nc_inq_vartype", rb_nc_inq_vartype, -1);
2501
- rb_define_singleton_method(mNetCDF, "inq_vartype", rb_nc_inq_vartype, -1);
2502
- rb_define_module_function(mNetCDF, "nc_put_var1", rb_nc_put_var1, -1);
2503
- rb_define_singleton_method(mNetCDF, "put_var1", rb_nc_put_var1, -1);
2504
- rb_define_module_function(mNetCDF, "nc_put_var", rb_nc_put_var, -1);
2505
- rb_define_singleton_method(mNetCDF, "put_var", rb_nc_put_var, -1);
2506
- rb_define_module_function(mNetCDF, "nc_put_vara", rb_nc_put_vara, -1);
2507
- rb_define_singleton_method(mNetCDF, "put_vara", rb_nc_put_vara, -1);
2508
- rb_define_module_function(mNetCDF, "nc_put_vars", rb_nc_put_vars, -1);
2509
- rb_define_singleton_method(mNetCDF, "put_vars", rb_nc_put_vars, -1);
2510
- rb_define_module_function(mNetCDF, "nc_put_varm", rb_nc_put_varm, -1);
2511
- rb_define_singleton_method(mNetCDF, "put_varm", rb_nc_put_varm, -1);
2512
- rb_define_module_function(mNetCDF, "nc_rename_var", rb_nc_rename_var, -1);
2513
- rb_define_singleton_method(mNetCDF, "rename_var", rb_nc_rename_var, -1);
2514
- // nc_set_var_chunk_cache
2515
-
2516
- rb_define_module_function(mNetCDF, "nc_del_att", rb_nc_del_att, -1);
2517
- rb_define_singleton_method(mNetCDF, "del_att", rb_nc_del_att, -1);
2518
- rb_define_module_function(mNetCDF, "nc_get_att", rb_nc_get_att, -1);
2519
- rb_define_singleton_method(mNetCDF, "get_att", rb_nc_get_att, -1);
2520
- // nc_inq_att
2521
- rb_define_module_function(mNetCDF, "nc_inq_attid", rb_nc_inq_attid, -1);
2522
- rb_define_singleton_method(mNetCDF, "inq_attid", rb_nc_inq_attid, -1);
2523
- rb_define_module_function(mNetCDF, "nc_inq_attlen", rb_nc_inq_attlen, -1);
2524
- rb_define_singleton_method(mNetCDF, "inq_attlen", rb_nc_inq_attlen, -1);
2525
- rb_define_module_function(mNetCDF, "nc_inq_attname", rb_nc_inq_attname, -1);
2526
- rb_define_singleton_method(mNetCDF, "inq_attname", rb_nc_inq_attname, -1);
2527
- rb_define_module_function(mNetCDF, "nc_inq_atttype", rb_nc_inq_atttype, -1);
2528
- rb_define_singleton_method(mNetCDF, "inq_atttype", rb_nc_inq_atttype, -1);
2529
- rb_define_module_function(mNetCDF, "nc_inq_natts", rb_nc_inq_natts, -1);
2530
- rb_define_singleton_method(mNetCDF, "inq_natts", rb_nc_inq_natts, -1);
2531
- rb_define_module_function(mNetCDF, "nc_put_att", rb_nc_put_att, -1);
2532
- rb_define_singleton_method(mNetCDF, "put_att", rb_nc_put_att, -1);
2533
- rb_define_module_function(mNetCDF, "nc_rename_att", rb_nc_rename_att, -1);
2534
- rb_define_singleton_method(mNetCDF, "rename_att", rb_nc_rename_att, -1);
2535
-
2536
- rb_define_module_function(mNetCDF, "nc_def_grp", rb_nc_def_grp, -1);
2537
- rb_define_singleton_method(mNetCDF, "def_grp", rb_nc_def_grp, -1);
2538
- rb_define_module_function(mNetCDF, "nc_inq_dimids", rb_nc_inq_dimids, -1);
2539
- rb_define_singleton_method(mNetCDF, "inq_dimids", rb_nc_inq_dimids, -1);
2540
- rb_define_module_function(mNetCDF, "nc_inq_grp_full_ncid", rb_nc_inq_grp_full_ncid, -1);
2541
- rb_define_singleton_method(mNetCDF, "inq_grp_full_ncid", rb_nc_inq_grp_full_ncid, -1);
2542
- rb_define_module_function(mNetCDF, "nc_inq_grp_ncid", rb_nc_inq_grp_ncid, -1);
2543
- rb_define_singleton_method(mNetCDF, "inq_grp_ncid", rb_nc_inq_grp_ncid, -1);
2544
- rb_define_module_function(mNetCDF, "nc_inq_grp_parent", rb_nc_inq_grp_parent, -1);
2545
- rb_define_singleton_method(mNetCDF, "inq_grp_parent", rb_nc_inq_grp_parent, -1);
2546
- rb_define_module_function(mNetCDF, "nc_inq_grpname", rb_nc_inq_grpname, -1);
2547
- rb_define_singleton_method(mNetCDF, "inq_grpname", rb_nc_inq_grpname, -1);
2548
- rb_define_module_function(mNetCDF, "nc_inq_grpname_full", rb_nc_inq_grpname_full, -1);
2549
- rb_define_singleton_method(mNetCDF, "inq_grpname_full", rb_nc_inq_grpname_full, -1);
2550
- rb_define_module_function(mNetCDF, "nc_inq_grpname_len", rb_nc_inq_grpname_len, -1);
2551
- rb_define_singleton_method(mNetCDF, "inq_grpname_len", rb_nc_inq_grpname_len, -1);
2552
- rb_define_module_function(mNetCDF, "nc_inq_grps", rb_nc_inq_grps, -1);
2553
- rb_define_singleton_method(mNetCDF, "inq_grps", rb_nc_inq_grps, -1);
2554
- rb_define_module_function(mNetCDF, "nc_inq_ncid", rb_nc_inq_ncid, -1);
2555
- rb_define_singleton_method(mNetCDF, "inq_ncid", rb_nc_inq_ncid, -1);
2556
- rb_define_module_function(mNetCDF, "nc_inq_typeids", rb_nc_inq_typeids, -1);
2557
- rb_define_singleton_method(mNetCDF, "inq_typeids", rb_nc_inq_typeids, -1);
2558
- rb_define_module_function(mNetCDF, "nc_inq_varids", rb_nc_inq_varids, -1);
2559
- rb_define_singleton_method(mNetCDF, "inq_varids", rb_nc_inq_varids, -1);
2560
- rb_define_module_function(mNetCDF, "nc_rename_grp", rb_nc_rename_grp, -1);
2561
- rb_define_singleton_method(mNetCDF, "rename_grp", rb_nc_rename_grp, -1);
2562
- rb_define_module_function(mNetCDF, "nc_show_metadata", rb_nc_show_metadata, -1);
2563
- rb_define_singleton_method(mNetCDF, "show_metadata", rb_nc_show_metadata, -1);
2564
-
2565
-
2566
- rb_define_module_function(mNetCDF, "nc_copy_att", rb_nc_copy_att, -1);
2567
- rb_define_singleton_method(mNetCDF, "copy_att", rb_nc_copy_att, -1);
2568
-
2569
- rb_define_module_function(mNetCDF, "nc_inq_nvars", rb_nc_inq_nvars, -1);
2570
- rb_define_singleton_method(mNetCDF, "inq_nvars", rb_nc_inq_nvars, -1);
2571
-
2572
- rb_define_const(mNetCDF, "NC_NOERR", INT2NUM(NC_NOERR));
2573
-
2574
- rb_define_const(mNetCDF, "NC_NOWRITE", INT2NUM(NC_NOWRITE));
2575
- rb_define_const(mNetCDF, "NC_WRITE", INT2NUM(NC_WRITE));
2576
- rb_define_const(mNetCDF, "NC_CLOBBER", INT2NUM(NC_CLOBBER));
2577
- rb_define_const(mNetCDF, "NC_NOCLOBBER", INT2NUM(NC_NOCLOBBER));
2578
- rb_define_const(mNetCDF, "NC_DISKLESS", INT2NUM(NC_DISKLESS));
2579
- rb_define_const(mNetCDF, "NC_MMAP", INT2NUM(NC_MMAP));
2580
- #if defined(NC_64BIT_DATA)
2581
- rb_define_const(mNetCDF, "NC_64BIT_DATA", INT2NUM(NC_64BIT_DATA));
2582
- #endif
2583
- #if defined(NC_CDF5)
2584
- rb_define_const(mNetCDF, "NC_CDF5", INT2NUM(NC_CDF5));
2585
- #endif
2586
- rb_define_const(mNetCDF, "NC_CLASSIC_MODEL", INT2NUM(NC_CLASSIC_MODEL));
2587
- rb_define_const(mNetCDF, "NC_LOCK", INT2NUM(NC_LOCK));
2588
- rb_define_const(mNetCDF, "NC_SHARE", INT2NUM(NC_SHARE));
2589
- rb_define_const(mNetCDF, "NC_NETCDF4", INT2NUM(NC_NETCDF4));
2590
- rb_define_const(mNetCDF, "NC_MPIIO", INT2NUM(NC_MPIIO));
2591
- #if defined(NC_INMEMORY)
2592
- rb_define_const(mNetCDF, "NC_INMEMORY", INT2NUM(NC_INMEMORY));
2593
- #endif
2594
- rb_define_const(mNetCDF, "NC_PNETCDF", INT2NUM(NC_PNETCDF));
2595
-
2596
- rb_define_const(mNetCDF, "NC_FORMAT_CLASSIC", INT2NUM(NC_FORMAT_CLASSIC));
2597
- #if defined(NC_FORMAT_64BIT_OFFSET)
2598
- rb_define_const(mNetCDF, "NC_FORMAT_64BIT_OFFSET", INT2NUM(NC_FORMAT_64BIT_OFFSET));
2599
- #endif
2600
- rb_define_const(mNetCDF, "NC_FORMAT_64BIT", INT2NUM(NC_FORMAT_64BIT));
2601
- rb_define_const(mNetCDF, "NC_FORMAT_NETCDF4", INT2NUM(NC_FORMAT_NETCDF4));
2602
- rb_define_const(mNetCDF, "NC_FORMAT_NETCDF4_CLASSIC", INT2NUM(NC_FORMAT_NETCDF4_CLASSIC));
2603
- #if defined(NC_FORMAT_64BIT_DATA)
2604
- rb_define_const(mNetCDF, "NC_FORMAT_64BIT_DATA", INT2NUM(NC_FORMAT_64BIT_DATA));
2605
- #endif
2606
- #if defined(NC_FORMAT_CDF5)
2607
- rb_define_const(mNetCDF, "NC_FORMAT_CDF5", INT2NUM(NC_FORMAT_CDF5));
2608
- #endif
2609
-
2610
- rb_define_const(mNetCDF, "NC_SIZEHINT_DEFAULT", INT2NUM(NC_SIZEHINT_DEFAULT));
2611
-
2612
- rb_define_const(mNetCDF, "NC_ALIGN_CHUNK", INT2NUM(NC_ALIGN_CHUNK));
2613
- rb_define_const(mNetCDF, "NC_UNLIMITED", INT2NUM(NC_UNLIMITED));
2614
-
2615
- rb_define_const(mNetCDF, "NC_GLOBAL", INT2NUM(NC_GLOBAL));
2616
- rb_define_const(mNetCDF, "NC_MAX_DIMS", INT2NUM(NC_MAX_DIMS));
2617
- rb_define_const(mNetCDF, "NC_MAX_ATTRS", INT2NUM(NC_MAX_ATTRS));
2618
- rb_define_const(mNetCDF, "NC_MAX_VARS", INT2NUM(NC_MAX_VARS));
2619
- rb_define_const(mNetCDF, "NC_MAX_NAME", INT2NUM(NC_MAX_NAME));
2620
- rb_define_const(mNetCDF, "NC_MAX_VAR_DIMS", INT2NUM(NC_MAX_VAR_DIMS));
2621
- rb_define_const(mNetCDF, "NC_FILL", INT2NUM(NC_FILL));
2622
- rb_define_const(mNetCDF, "NC_NOFILL", INT2NUM(NC_NOFILL));
2623
-
2624
- rb_define_const(mNetCDF, "NC_ENDIAN_NATIVE", INT2NUM(NC_ENDIAN_NATIVE));
2625
- rb_define_const(mNetCDF, "NC_ENDIAN_LITTLE", INT2NUM(NC_ENDIAN_LITTLE));
2626
- rb_define_const(mNetCDF, "NC_ENDIAN_BIG", INT2NUM(NC_ENDIAN_BIG));
2627
-
2628
- rb_define_const(mNetCDF, "NC_CHUNKED", INT2NUM(NC_CHUNKED));
2629
- rb_define_const(mNetCDF, "NC_CONTIGUOUS", INT2NUM(NC_CONTIGUOUS));
2630
-
2631
- rb_define_const(mNetCDF, "NC_NOCHECKSUM", INT2NUM(NC_NOCHECKSUM));
2632
- rb_define_const(mNetCDF, "NC_FLETCHER32", INT2NUM(NC_FLETCHER32));
2633
-
2634
- rb_define_const(mNetCDF, "NC_NOSHUFFLE", INT2NUM(NC_NOSHUFFLE));
2635
- rb_define_const(mNetCDF, "NC_SHUFFLE", INT2NUM(NC_SHUFFLE));
2636
-
2637
-
2638
- rb_define_const(mNetCDF, "NC_NAT", INT2NUM(NC_NAT));
2639
- rb_define_const(mNetCDF, "NC_BYTE", INT2NUM(NC_BYTE));
2640
- rb_define_const(mNetCDF, "NC_UBYTE", INT2NUM(NC_UBYTE));
2641
- rb_define_const(mNetCDF, "NC_CHAR", INT2NUM(NC_CHAR));
2642
- rb_define_const(mNetCDF, "NC_SHORT", INT2NUM(NC_SHORT));
2643
- rb_define_const(mNetCDF, "NC_USHORT", INT2NUM(NC_USHORT));
2644
- rb_define_const(mNetCDF, "NC_INT", INT2NUM(NC_INT));
2645
- rb_define_const(mNetCDF, "NC_LONG", INT2NUM(NC_LONG));
2646
- rb_define_const(mNetCDF, "NC_UINT", INT2NUM(NC_UINT));
2647
- rb_define_const(mNetCDF, "NC_INT64", INT2NUM(NC_INT64));
2648
- rb_define_const(mNetCDF, "NC_UINT64", INT2NUM(NC_UINT64));
2649
- rb_define_const(mNetCDF, "NC_FLOAT", INT2NUM(NC_FLOAT));
2650
- rb_define_const(mNetCDF, "NC_DOUBLE", INT2NUM(NC_DOUBLE));
2651
- rb_define_const(mNetCDF, "NC_STRING", INT2NUM(NC_STRING));
2652
-
2653
- // rb_define_const(mNetCDF, "NC_", INT2NUM(NC_));
2654
-
2655
- rb_define_const(mNetCDF, "NC_VLEN", INT2NUM(NC_VLEN));
2656
- rb_define_const(mNetCDF, "NC_OPAQUE", INT2NUM(NC_OPAQUE));
2657
- rb_define_const(mNetCDF, "NC_ENUM", INT2NUM(NC_ENUM));
2658
- rb_define_const(mNetCDF, "NC_COMPOUND", INT2NUM(NC_COMPOUND));
2659
-
2660
-
2661
- rb_define_const(mNetCDF, "NC_FILL_BYTE", INT2NUM(NC_FILL_BYTE));
2662
- rb_define_const(mNetCDF, "NC_FILL_CHAR", INT2NUM(NC_FILL_CHAR));
2663
- rb_define_const(mNetCDF, "NC_FILL_SHORT", INT2NUM(NC_FILL_SHORT));
2664
- rb_define_const(mNetCDF, "NC_FILL_INT", INT2NUM(NC_FILL_INT));
2665
- rb_define_const(mNetCDF, "NC_FILL_FLOAT", rb_float_new(NC_FILL_FLOAT));
2666
- rb_define_const(mNetCDF, "NC_FILL_DOUBLE", rb_float_new(NC_FILL_DOUBLE));
2667
- rb_define_const(mNetCDF, "NC_FILL_UBYTE", UINT2NUM(NC_FILL_UBYTE));
2668
- rb_define_const(mNetCDF, "NC_FILL_USHORT", UINT2NUM(NC_FILL_USHORT));
2669
- rb_define_const(mNetCDF, "NC_FILL_UINT", UINT2NUM(NC_FILL_UINT));
2670
- rb_define_const(mNetCDF, "NC_FILL_IN64", LL2NUM(NC_FILL_INT64));
2671
- rb_define_const(mNetCDF, "NC_FILL_UIN64", ULL2NUM(NC_FILL_INT64));
2672
- rb_define_const(mNetCDF, "NC_FILL_STRING", rb_str_new2(NC_FILL_STRING));
2673
-
2674
- }