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