carray 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +0 -1
- data/ca_iter_block.c +32 -30
- data/ca_iter_dimension.c +24 -22
- data/ca_iter_window.c +25 -23
- data/ca_obj_array.c +58 -56
- data/ca_obj_bitarray.c +27 -27
- data/ca_obj_bitfield.c +46 -45
- data/ca_obj_block.c +77 -72
- data/ca_obj_fake.c +20 -20
- data/ca_obj_farray.c +22 -22
- data/ca_obj_field.c +31 -30
- data/ca_obj_grid.c +63 -62
- data/ca_obj_mapping.c +35 -32
- data/ca_obj_object.c +54 -54
- data/ca_obj_reduce.c +13 -13
- data/ca_obj_refer.c +42 -39
- data/ca_obj_repeat.c +50 -47
- data/ca_obj_select.c +24 -24
- data/ca_obj_shift.c +61 -58
- data/ca_obj_transpose.c +52 -51
- data/ca_obj_unbound_repeat.c +28 -27
- data/ca_obj_window.c +77 -72
- data/carray.gemspec +0 -2
- data/carray.h +190 -163
- data/carray_access.c +137 -136
- data/carray_attribute.c +24 -13
- data/carray_call_cfunc.c +21 -21
- data/carray_cast.c +106 -110
- data/carray_cast_func.rb +17 -17
- data/carray_class.c +3 -3
- data/carray_conversion.c +15 -15
- data/carray_copy.c +27 -27
- data/carray_core.c +22 -21
- data/carray_element.c +55 -47
- data/carray_generate.c +32 -32
- data/carray_iterator.c +36 -35
- data/carray_loop.c +37 -37
- data/carray_mask.c +21 -21
- data/carray_math.rb +18 -18
- data/carray_numeric.c +1 -1
- data/carray_operator.c +19 -18
- data/carray_order.c +30 -30
- data/carray_random.c +34 -32
- data/carray_sort_addr.c +12 -12
- data/carray_stat.c +127 -127
- data/carray_stat_proc.rb +152 -141
- data/carray_test.c +16 -16
- data/carray_utils.c +58 -56
- data/ext/calculus/carray_calculus.c +19 -20
- data/ext/calculus/carray_interp.c +12 -11
- data/ext/fortio/lib/fortio/fortran_sequential.rb +2 -2
- data/ext/fortio/ruby_fortio.c +1 -1
- data/ext/imagemap/carray_imagemap.c +14 -14
- data/ext/narray/ca_wrap_narray.c +30 -21
- data/extconf.rb +5 -0
- data/lib/carray/base/basic.rb +4 -3
- data/lib/carray/base/serialize.rb +3 -3
- data/lib/carray/graphics/gnuplot.rb +10 -7
- data/lib/carray/io/csv.rb +14 -9
- data/lib/carray/io/imagemagick.rb +7 -0
- data/lib/carray/io/sqlite3.rb +6 -4
- data/mkmath.rb +20 -20
- data/ruby_carray.c +2 -0
- data/ruby_ccomplex.c +3 -3
- data/test/test_130.rb +23 -0
- data/test/test_ALL.rb +2 -1
- data/test/test_order.rb +3 -3
- data/test/test_stat.rb +2 -2
- data/version.h +4 -4
- metadata +4 -37
- data/examples/ex001.rb +0 -10
- data/examples/test-int.rb +0 -13
- data/lib/carray/autoload/autoload_io_excel.rb +0 -5
- data/lib/carray/io/excel.rb +0 -26
@@ -15,9 +15,9 @@
|
|
15
15
|
#include <math.h>
|
16
16
|
|
17
17
|
static int
|
18
|
-
find_index (
|
18
|
+
find_index (ca_size_t n, double *y, double yy, ca_size_t *major, double *frac)
|
19
19
|
{
|
20
|
-
|
20
|
+
ca_size_t a, b, c, x1;
|
21
21
|
double ya, yb, yc;
|
22
22
|
double y1, y2;
|
23
23
|
|
@@ -33,7 +33,7 @@ find_index (int n, double *y, double yy, int *major, double *frac)
|
|
33
33
|
|
34
34
|
/* check for equally spaced scale */
|
35
35
|
|
36
|
-
a = (
|
36
|
+
a = (ca_size_t)((yy-y[0])/(y[n-1]-y[0])*(n-1));
|
37
37
|
|
38
38
|
if ( a >= 0 && a < n-1 ) {
|
39
39
|
if ( (y[a] - yy) * (y[a+1] - yy) <= 0 ) {
|
@@ -118,7 +118,7 @@ find_index (int n, double *y, double yy, int *major, double *frac)
|
|
118
118
|
*/
|
119
119
|
|
120
120
|
static int
|
121
|
-
linear_interp_loop (CArray *ca,
|
121
|
+
linear_interp_loop (CArray *ca, ca_size_t *major, double *frac,
|
122
122
|
int level, int32_t *idx, double wt, double *valp)
|
123
123
|
{
|
124
124
|
double tmp;
|
@@ -154,9 +154,9 @@ linear_interp_loop (CArray *ca, int *major, double *frac,
|
|
154
154
|
}
|
155
155
|
|
156
156
|
static double
|
157
|
-
linear_interp (CArray *ca,
|
157
|
+
linear_interp (CArray *ca, ca_size_t *major, double *frac)
|
158
158
|
{
|
159
|
-
|
159
|
+
ca_size_t idx[CA_RANK_MAX];
|
160
160
|
double value = 0;
|
161
161
|
linear_interp_loop(ca, major, frac, 0, idx, 1, &value);
|
162
162
|
return value;
|
@@ -171,12 +171,12 @@ If value[n] is NaN, the interpolation will be made for each index of the dimensi
|
|
171
171
|
static int
|
172
172
|
ca_interpolate_loop (CArray *ca, double **scale,
|
173
173
|
CArray **value,
|
174
|
-
|
174
|
+
ca_size_t *major, double *frac,
|
175
175
|
int level, double **dstp)
|
176
176
|
{
|
177
177
|
double val, frc;
|
178
|
-
|
179
|
-
|
178
|
+
ca_size_t maj;
|
179
|
+
ca_size_t i;
|
180
180
|
if ( level == ca->rank-1 ) {
|
181
181
|
if ( ! value[level] ) {
|
182
182
|
for (i=0; i<ca->dim[level]; i++) {
|
@@ -221,7 +221,7 @@ ca_interpolate_loop (CArray *ca, double **scale,
|
|
221
221
|
int
|
222
222
|
ca_interpolate (CArray *ca, double **scale, CArray **value, double *outp)
|
223
223
|
{
|
224
|
-
|
224
|
+
ca_size_t major[CA_RANK_MAX];
|
225
225
|
double frac[CA_RANK_MAX];
|
226
226
|
int status;
|
227
227
|
|
@@ -239,7 +239,8 @@ rb_ca_interpolate_bilinear (int argc, VALUE *argv, volatile VALUE self)
|
|
239
239
|
double *scales[CA_RANK_MAX];
|
240
240
|
CArray *values[CA_RANK_MAX];
|
241
241
|
CArray *scales_ca[CA_RANK_MAX];
|
242
|
-
|
242
|
+
int8_t out_rank;
|
243
|
+
ca_size_t out_dim[CA_RANK_MAX];
|
243
244
|
int i;
|
244
245
|
|
245
246
|
rb_scan_args(argc, argv, "2", &vscales, &vvalues);
|
@@ -114,7 +114,7 @@ class FortranSequential
|
|
114
114
|
case fmt = fmts.shift
|
115
115
|
when String
|
116
116
|
list = []
|
117
|
-
specs = fmt.scan(/(?:\d
|
117
|
+
specs = fmt.scan(/(?:\d+|)(?:a\[\d+\]|\w)/)
|
118
118
|
while not specs.empty?
|
119
119
|
case specs.shift
|
120
120
|
when /(\d+)?a\[(\d+)\]/
|
@@ -196,7 +196,7 @@ class FortranSequential
|
|
196
196
|
end
|
197
197
|
case fmt
|
198
198
|
when String
|
199
|
-
specs = fmt.scan(/(?:\d
|
199
|
+
specs = fmt.scan(/(?:\d+|)(?:a\[\d+\]|\w)/)
|
200
200
|
while not specs.empty?
|
201
201
|
case specs.shift
|
202
202
|
when /(\d+)?a\[(\d+)\]/
|
data/ext/fortio/ruby_fortio.c
CHANGED
@@ -36,7 +36,7 @@ rb_ff_read_F (VALUE mod, VALUE vbuffer, VALUE vscale, VALUE vlength, VALUE vprec
|
|
36
36
|
{
|
37
37
|
double val;
|
38
38
|
int status;
|
39
|
-
status = read_F(StringValuePtr(vbuffer), RSTRING_LEN(vbuffer),
|
39
|
+
status = read_F(StringValuePtr(vbuffer), (int) RSTRING_LEN(vbuffer),
|
40
40
|
NUM2INT(vscale), NUM2INT(vlength), NUM2INT(vprec), &val);
|
41
41
|
if ( ! status ) {
|
42
42
|
rb_raise(rb_eRuntimeError, "invalid string for F descriptor");
|
@@ -37,9 +37,9 @@ static void
|
|
37
37
|
draw_linex (CArray *ca, float x0, float y0, float x1, float y1, char *ptr)
|
38
38
|
{
|
39
39
|
float x, y;
|
40
|
-
|
41
|
-
|
42
|
-
|
40
|
+
ca_size_t ix, iy;
|
41
|
+
ca_size_t dim0 = ca->dim[0];
|
42
|
+
ca_size_t dim1 = ca->dim[1];
|
43
43
|
float a = (y1-y0)/(x1-x0);
|
44
44
|
for (x=x0; x<x1; x+=1) {
|
45
45
|
y = a*(x-x0)+y0;
|
@@ -56,9 +56,9 @@ static void
|
|
56
56
|
draw_liney (CArray *ca, float x0, float y0, float x1, float y1, char *ptr)
|
57
57
|
{
|
58
58
|
float x, y;
|
59
|
-
|
60
|
-
|
61
|
-
|
59
|
+
ca_size_t ix, iy;
|
60
|
+
ca_size_t dim0 = ca->dim[0];
|
61
|
+
ca_size_t dim1 = ca->dim[1];
|
62
62
|
float a = (x1-x0)/(y1-y0);
|
63
63
|
for (y=y0; y<y1; y+=1) {
|
64
64
|
x = a*(y-y0)+x0;
|
@@ -136,8 +136,8 @@ fill_rect (CArray *image, float x[4], float y[4], char *ptr)
|
|
136
136
|
CArray *mask;
|
137
137
|
float xmin, xmax, ymin, ymax;
|
138
138
|
float gx[4], gy[4];
|
139
|
-
|
140
|
-
|
139
|
+
ca_size_t dim[2];
|
140
|
+
ca_size_t i, j, ixmin, iymin, ixmax, iymax;
|
141
141
|
char one = 1;
|
142
142
|
|
143
143
|
xmin = x[0];
|
@@ -162,11 +162,11 @@ fill_rect (CArray *image, float x[4], float y[4], char *ptr)
|
|
162
162
|
}
|
163
163
|
}
|
164
164
|
|
165
|
-
ixmin = (
|
166
|
-
iymin = (
|
165
|
+
ixmin = (ca_size_t) floor(xmin);
|
166
|
+
iymin = (ca_size_t) floor(ymin);
|
167
167
|
|
168
|
-
ixmax = (
|
169
|
-
iymax = (
|
168
|
+
ixmax = (ca_size_t) ceil(xmax) + 1;
|
169
|
+
iymax = (ca_size_t) ceil(ymax) + 1;
|
170
170
|
|
171
171
|
dim[0] = ixmax - ixmin + 1;
|
172
172
|
dim[1] = iymax - iymin + 1;
|
@@ -240,7 +240,7 @@ rb_im_fill_rect (VALUE self,
|
|
240
240
|
}
|
241
241
|
|
242
242
|
void
|
243
|
-
draw_hline_gradation (CArray *image,
|
243
|
+
draw_hline_gradation (CArray *image, ca_size_t iy,
|
244
244
|
float x0, float x1, float z0, float z1);
|
245
245
|
|
246
246
|
static VALUE
|
@@ -251,7 +251,7 @@ rb_img_draw_hline_gradation (VALUE self, VALUE viy,
|
|
251
251
|
|
252
252
|
Data_Get_Struct(self, CArray, image);
|
253
253
|
|
254
|
-
draw_hline_gradation(image,
|
254
|
+
draw_hline_gradation(image, NUM2SIZE(viy),
|
255
255
|
NUM2DBL(vx0), NUM2DBL(vx1), NUM2DBL(vz0), NUM2DBL(vz1));
|
256
256
|
|
257
257
|
return Qnil;
|
data/ext/narray/ca_wrap_narray.c
CHANGED
@@ -123,7 +123,7 @@ rb_cary_na_ref_new_i (int argc, VALUE *argv, VALUE self, VALUE klass)
|
|
123
123
|
{
|
124
124
|
CArray *orig;
|
125
125
|
struct NARRAY *ary;
|
126
|
-
|
126
|
+
int8_t i;
|
127
127
|
|
128
128
|
Data_Get_Struct(self, CArray, orig);
|
129
129
|
|
@@ -147,20 +147,20 @@ rb_cary_na_ref_new_i (int argc, VALUE *argv, VALUE self, VALUE klass)
|
|
147
147
|
ary->rank = orig->rank;
|
148
148
|
ary->shape = ALLOC_N(int, ary->rank);
|
149
149
|
for (i=0; i<ary->rank; i++) {
|
150
|
-
ary->shape[i] = orig->dim[ary->rank-1-i];
|
150
|
+
ary->shape[i] = (int) orig->dim[ary->rank-1-i];
|
151
151
|
}
|
152
|
-
ary->total = orig->elements;
|
152
|
+
ary->total = (int) orig->elements;
|
153
153
|
ary->ptr = orig->ptr;
|
154
154
|
}
|
155
155
|
else {
|
156
|
-
|
156
|
+
ca_size_t elements = 1;
|
157
157
|
ary->rank = argc;
|
158
158
|
ary->shape = ALLOC_N(int, ary->rank);
|
159
159
|
for (i=0; i<ary->rank; i++) {
|
160
160
|
ary->shape[i] = NUM2INT(argv[i]);
|
161
161
|
elements *= ary->shape[i];
|
162
162
|
}
|
163
|
-
ary->total = elements;
|
163
|
+
ary->total = (int) elements;
|
164
164
|
ary->ptr = orig->ptr;
|
165
165
|
if ( elements != orig->elements ) {
|
166
166
|
free(ary->shape);
|
@@ -221,7 +221,14 @@ rb_cary_to_na_bang_i (VALUE self, VALUE klass)
|
|
221
221
|
obj = na_make_empty(type, klass);
|
222
222
|
}
|
223
223
|
else {
|
224
|
-
|
224
|
+
int shape[127];
|
225
|
+
int i;
|
226
|
+
|
227
|
+
for (i=0; i<ca->rank; i++) {
|
228
|
+
shape[i] = (int) ca->dim[ca->rank-i-1];
|
229
|
+
}
|
230
|
+
|
231
|
+
obj = na_make_object(type, ca->rank, shape, klass);
|
225
232
|
GetNArray(obj, na);
|
226
233
|
|
227
234
|
fary = rb_ca_farray(self);
|
@@ -281,13 +288,15 @@ rb_cary_to_na_i (VALUE self, VALUE klass)
|
|
281
288
|
obj = na_make_empty(type, klass);
|
282
289
|
}
|
283
290
|
else {
|
284
|
-
|
285
|
-
|
286
|
-
|
291
|
+
int shape[127];
|
292
|
+
|
287
293
|
for (i=0; i<ca->rank; i++) {
|
288
|
-
|
294
|
+
shape[i] = (int) ca->dim[ca->rank-i-1];
|
289
295
|
}
|
290
296
|
|
297
|
+
obj = na_make_object(type, ca->rank, shape, klass);
|
298
|
+
GetNArray(obj, na);
|
299
|
+
|
291
300
|
ca_copy_data(ca, na->ptr);
|
292
301
|
}
|
293
302
|
|
@@ -337,7 +346,7 @@ rb_na_ca_ref_new (int argc, VALUE *argv, VALUE self)
|
|
337
346
|
{
|
338
347
|
volatile VALUE obj;
|
339
348
|
struct NARRAY *na;
|
340
|
-
|
349
|
+
ca_size_t dim[CA_RANK_MAX];
|
341
350
|
int8_t data_type;
|
342
351
|
int i;
|
343
352
|
|
@@ -346,7 +355,7 @@ rb_na_ca_ref_new (int argc, VALUE *argv, VALUE self)
|
|
346
355
|
data_type = na_typecode_to_ca_data_type(na->type);
|
347
356
|
|
348
357
|
if ( na->total == 0 ) {
|
349
|
-
|
358
|
+
ca_size_t zero = 0;
|
350
359
|
obj = rb_carray_wrap_ptr(data_type, 1, &zero, 0, NULL,
|
351
360
|
&EMPTY_ARRAY_PTR, self); /* avoid ca->ptr == NULL */
|
352
361
|
}
|
@@ -387,16 +396,16 @@ rb_na_to_ca (VALUE self)
|
|
387
396
|
volatile VALUE obj;
|
388
397
|
CArray *ca;
|
389
398
|
struct NARRAY *na;
|
390
|
-
|
391
|
-
|
392
|
-
|
399
|
+
ca_size_t dim[CA_RANK_MAX];
|
400
|
+
ca_size_t data_type;
|
401
|
+
ca_size_t i;
|
393
402
|
|
394
403
|
GetNArray(self, na);
|
395
404
|
|
396
405
|
data_type = na_typecode_to_ca_data_type(na->type);
|
397
406
|
|
398
407
|
if ( na->total == 0 ) {
|
399
|
-
|
408
|
+
ca_size_t zero = 0;
|
400
409
|
obj = rb_carray_new(data_type, 1, &zero, 0, NULL);
|
401
410
|
}
|
402
411
|
else {
|
@@ -430,16 +439,16 @@ rb_na_to_ca_bang (VALUE self)
|
|
430
439
|
volatile VALUE obj, fary;
|
431
440
|
CArray *ca;
|
432
441
|
struct NARRAY *na;
|
433
|
-
|
434
|
-
|
435
|
-
|
442
|
+
ca_size_t dim[CA_RANK_MAX];
|
443
|
+
ca_size_t data_type;
|
444
|
+
ca_size_t i;
|
436
445
|
|
437
446
|
GetNArray(self, na);
|
438
447
|
|
439
448
|
data_type = na_typecode_to_ca_data_type(na->type);
|
440
449
|
|
441
450
|
if ( na->total == 0 ) {
|
442
|
-
|
451
|
+
ca_size_t zero = 0;
|
443
452
|
obj = rb_carray_new(data_type, 1, &zero, 0, NULL);
|
444
453
|
}
|
445
454
|
else {
|
@@ -449,7 +458,7 @@ rb_na_to_ca_bang (VALUE self)
|
|
449
458
|
dim[i] = na->shape[na->rank-i-1];
|
450
459
|
}
|
451
460
|
|
452
|
-
obj = rb_carray_new(data_type, na->rank,
|
461
|
+
obj = rb_carray_new(data_type, na->rank, dim, 0, NULL);
|
453
462
|
fary = rb_ca_farray(obj);
|
454
463
|
Data_Get_Struct(fary, CArray, ca);
|
455
464
|
|
data/extconf.rb
CHANGED
@@ -68,6 +68,8 @@ end
|
|
68
68
|
|
69
69
|
$CFLAGS += " -Wall -O2"
|
70
70
|
# $CFLAGS += " -m128bit-long-double" ### gcc only
|
71
|
+
# $CFLAGS += " -Wno-absolute-value"
|
72
|
+
# $LDFLAGS += " -L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib"
|
71
73
|
|
72
74
|
# --- check data types
|
73
75
|
|
@@ -118,6 +120,9 @@ else
|
|
118
120
|
have_type("long long", header)
|
119
121
|
have_type("float", header)
|
120
122
|
have_type("double", header)
|
123
|
+
if have_type("long double", header)
|
124
|
+
check_sizeof("long double")
|
125
|
+
end
|
121
126
|
if have_header("complex.h")
|
122
127
|
complex_h = "complex.h"
|
123
128
|
have_type("float complex", complex_h)
|
data/lib/carray/base/basic.rb
CHANGED
@@ -20,7 +20,7 @@ end
|
|
20
20
|
|
21
21
|
class Array # :nodoc:
|
22
22
|
def +@
|
23
|
-
return
|
23
|
+
return CA_SIZE(self)
|
24
24
|
end
|
25
25
|
def to_ca
|
26
26
|
return CA_OBJECT(self)
|
@@ -29,7 +29,7 @@ end
|
|
29
29
|
|
30
30
|
class Range # :nodoc:
|
31
31
|
def +@
|
32
|
-
return
|
32
|
+
return CA_SIZE(self)
|
33
33
|
end
|
34
34
|
def to_ca
|
35
35
|
return CA_OBJECT(self)
|
@@ -149,6 +149,7 @@ end
|
|
149
149
|
"CA_DOUBLE",
|
150
150
|
"CA_COMPLEX",
|
151
151
|
"CA_DCOMPLEX",
|
152
|
+
"CA_SIZE",
|
152
153
|
].each do |name|
|
153
154
|
eval %{
|
154
155
|
def #{name} (*val)
|
@@ -920,7 +921,7 @@ class CArray
|
|
920
921
|
def self.join (*argv)
|
921
922
|
# get options
|
922
923
|
case argv.first
|
923
|
-
when
|
924
|
+
when Integer, Symbol, String
|
924
925
|
type, = *CArray.guess_type_and_bytes(argv.shift, 0)
|
925
926
|
else
|
926
927
|
type = argv.flatten.first.data_type
|
@@ -53,11 +53,11 @@ class CArray::Serializer # :nodoc:
|
|
53
53
|
char_p :data_type_name, :bytes=>8
|
54
54
|
char_p :endian, :bytes=>4
|
55
55
|
int32 :data_type
|
56
|
-
|
56
|
+
int64 :bytes
|
57
57
|
int32 :rank
|
58
|
-
|
58
|
+
int64 :elements
|
59
59
|
int32 :has_mask
|
60
|
-
array :dim, :type => CArray.
|
60
|
+
array :dim, :type => CArray.int64(CA_RANK_MAX)
|
61
61
|
int32 :has_attr
|
62
62
|
}
|
63
63
|
|
@@ -511,13 +511,13 @@ class CA::Gnuplot # :nodoc:
|
|
511
511
|
list = list.clone
|
512
512
|
conf = []
|
513
513
|
while not list.empty? and
|
514
|
-
( list.last.is_a?(
|
514
|
+
( list.last.is_a?(Integer) or
|
515
515
|
list.last.is_a?(Symbol) or
|
516
516
|
list.last.is_a?(String) or
|
517
517
|
list.last.nil? )
|
518
518
|
conf.unshift(list.pop)
|
519
519
|
end
|
520
|
-
if conf.last.is_a?(
|
520
|
+
if conf.last.is_a?(Integer)
|
521
521
|
idx = conf.pop
|
522
522
|
case idx
|
523
523
|
when 1,2
|
@@ -1920,17 +1920,21 @@ __EOD__
|
|
1920
1920
|
end
|
1921
1921
|
|
1922
1922
|
lines = text.split("\n").map{|line| line.strip }
|
1923
|
-
|
1924
|
-
model = "
|
1923
|
+
|
1924
|
+
model = "HSV"
|
1925
1925
|
entries = []
|
1926
1926
|
lines.each do |line|
|
1927
1927
|
case line
|
1928
|
-
when /\A\#\s*COLOR_MODEL\s*=\s
|
1928
|
+
when /\A\#\s*COLOR_MODEL\s*=\s*(.+)\s*\Z/
|
1929
1929
|
model = $1.upcase
|
1930
1930
|
when /\A\Z/, /\A#/, /\A([FBN])\s*(.*)\Z/
|
1931
1931
|
next
|
1932
1932
|
else
|
1933
|
-
|
1933
|
+
list = line.split(/\s+/)
|
1934
|
+
list[1] = list[1].split(/\-/)
|
1935
|
+
list[3] = list[3].split(/\-/)
|
1936
|
+
list = list.flatten.map{|x| x.to_f}
|
1937
|
+
entries.push(list)
|
1934
1938
|
end
|
1935
1939
|
end
|
1936
1940
|
|
@@ -1946,7 +1950,6 @@ __EOD__
|
|
1946
1950
|
color[level, nil] = entry[5, 3]
|
1947
1951
|
level += 1
|
1948
1952
|
end
|
1949
|
-
|
1950
1953
|
if model =~ /HSV/
|
1951
1954
|
color[nil, 0] /= 360
|
1952
1955
|
else
|
data/lib/carray/io/csv.rb
CHANGED
@@ -381,14 +381,15 @@ module CA
|
|
381
381
|
|
382
382
|
class CSVWriter # :nodoc:
|
383
383
|
|
384
|
-
def initialize (sep=",", rs=$/, &block)
|
384
|
+
def initialize (sep=",", rs=$/, fill="", &block)
|
385
385
|
@block = block
|
386
386
|
@sep = sep
|
387
387
|
@rs = rs
|
388
|
+
@fill = fill
|
388
389
|
end
|
389
390
|
|
390
391
|
def write_io (table, io)
|
391
|
-
return Processor.new(table, io, @sep, @rs, &@block).run
|
392
|
+
return Processor.new(table, io, @sep, @rs, @fill, &@block).run
|
392
393
|
end
|
393
394
|
|
394
395
|
def write_string (table, string)
|
@@ -404,10 +405,11 @@ module CA
|
|
404
405
|
|
405
406
|
class Processor # :nodoc:
|
406
407
|
|
407
|
-
def initialize (table, io, sep, rs, &block)
|
408
|
+
def initialize (table, io, sep, rs, fill, &block)
|
408
409
|
@io = io
|
409
410
|
@sep = sep
|
410
411
|
@rs = rs
|
412
|
+
@fill = fill
|
411
413
|
@block = block || proc { body }
|
412
414
|
if table.has_data_class?
|
413
415
|
@names = table.members
|
@@ -426,6 +428,9 @@ module CA
|
|
426
428
|
@table = table.object ### convert to CA_OBJECT
|
427
429
|
end
|
428
430
|
end
|
431
|
+
if @table.has_mask?
|
432
|
+
@table.unmask(@fill)
|
433
|
+
end
|
429
434
|
@regexp_simple = /#{@sep}/o
|
430
435
|
end
|
431
436
|
|
@@ -532,15 +537,15 @@ class CArray
|
|
532
537
|
end
|
533
538
|
end
|
534
539
|
|
535
|
-
def save_csv (file, option = {}, rs: $/, sep: ",", mode: "w", &block)
|
536
|
-
option = {:sep=>sep, :rs=>rs, :mode=>mode}.update(option)
|
537
|
-
writer = CA::CSVWriter.new(option[:sep], option[:rs], &block)
|
540
|
+
def save_csv (file, option = {}, rs: $/, sep: ",", fill: "", mode: "w", &block)
|
541
|
+
option = {:sep=>sep, :rs=>rs, :fill=>fill, :mode=>mode}.update(option)
|
542
|
+
writer = CA::CSVWriter.new(option[:sep], option[:rs], option[:fill], &block)
|
538
543
|
return writer.write_file(self, file, option[:mode])
|
539
544
|
end
|
540
545
|
|
541
|
-
def to_csv (io="", option ={}, rs: $/, sep: ",", &block)
|
542
|
-
option = {:sep=>sep, :rs=>rs}.update(option)
|
543
|
-
writer = CA::CSVWriter.new(option[:sep], option[:rs], &block)
|
546
|
+
def to_csv (io="", option ={}, rs: $/, sep: ",", fill: "", &block)
|
547
|
+
option = {:sep=>sep, :rs=>rs, :fill=>fill}.update(option)
|
548
|
+
writer = CA::CSVWriter.new(option[:sep], option[:rs], option[:fill], &block)
|
544
549
|
case io
|
545
550
|
when IO, StringIO
|
546
551
|
return writer.write_io(self, io)
|