carray 1.5.9 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/NEWS.md +10 -0
- data/TODO.md +1 -0
- data/carray.gemspec +1 -1
- data/ext/ca_iter_block.c +20 -5
- data/ext/ca_iter_dimension.c +21 -10
- data/ext/ca_iter_window.c +17 -5
- data/ext/ca_obj_array.c +73 -10
- data/ext/ca_obj_bitarray.c +21 -6
- data/ext/ca_obj_bitfield.c +21 -11
- data/ext/ca_obj_block.c +34 -10
- data/ext/ca_obj_fake.c +21 -6
- data/ext/ca_obj_farray.c +34 -5
- data/ext/ca_obj_field.c +23 -7
- data/ext/ca_obj_grid.c +36 -7
- data/ext/ca_obj_mapping.c +36 -7
- data/ext/ca_obj_object.c +35 -9
- data/ext/ca_obj_reduce.c +34 -5
- data/ext/ca_obj_refer.c +31 -10
- data/ext/ca_obj_repeat.c +35 -12
- data/ext/ca_obj_select.c +35 -9
- data/ext/ca_obj_shift.c +41 -12
- data/ext/ca_obj_transpose.c +36 -7
- data/ext/ca_obj_unbound_repeat.c +39 -14
- data/ext/ca_obj_window.c +46 -15
- data/ext/carray.h +97 -31
- data/ext/carray_access.c +25 -42
- data/ext/carray_attribute.c +35 -35
- data/ext/carray_call_cfunc.c +28 -28
- data/ext/carray_cast.c +25 -26
- data/ext/carray_cast_func.rb +1 -2
- data/ext/carray_conversion.c +7 -10
- data/ext/carray_copy.c +5 -5
- data/ext/carray_core.c +44 -7
- data/ext/carray_element.c +9 -9
- data/ext/carray_generate.c +7 -7
- data/ext/carray_iterator.c +33 -23
- data/ext/carray_loop.c +9 -9
- data/ext/carray_mask.c +38 -36
- data/ext/carray_math.rb +6 -6
- data/ext/carray_numeric.c +1 -1
- data/ext/carray_operator.c +31 -21
- data/ext/carray_order.c +216 -12
- data/ext/carray_sort_addr.c +2 -2
- data/ext/carray_stat.c +22 -22
- data/ext/carray_stat_proc.rb +13 -13
- data/ext/carray_test.c +8 -8
- data/ext/ruby_carray.c +7 -0
- data/ext/ruby_ccomplex.c +25 -11
- data/ext/version.h +6 -6
- data/lib/carray/inspect.rb +0 -3
- data/lib/carray/io/imagemagick.rb +8 -9
- data/lib/carray/mkmf.rb +1 -0
- data/lib/carray/time.rb +1 -1
- data/spec/Classes/ex1.rb +46 -0
- metadata +4 -6
data/ext/ca_obj_fake.c
CHANGED
@@ -25,6 +25,18 @@ typedef struct {
|
|
25
25
|
uint8_t nosync;
|
26
26
|
} CAFake;
|
27
27
|
|
28
|
+
const rb_data_type_t cafake_data_type = {
|
29
|
+
.parent = &cavirtual_data_type,
|
30
|
+
.wrap_struct_name = "CAFake",
|
31
|
+
.function = {
|
32
|
+
.dmark = ca_mark,
|
33
|
+
.dfree = ca_free,
|
34
|
+
.dsize = NULL,
|
35
|
+
.dcompact = NULL
|
36
|
+
},
|
37
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY
|
38
|
+
};
|
39
|
+
|
28
40
|
static int8_t CA_OBJ_FAKE;
|
29
41
|
|
30
42
|
static VALUE rb_cCAFake;
|
@@ -319,7 +331,7 @@ rb_ca_fake_new (VALUE cary, int8_t data_type, ca_size_t bytes)
|
|
319
331
|
CArray *parent;
|
320
332
|
CAFake *ca;
|
321
333
|
rb_check_carray_object(cary);
|
322
|
-
|
334
|
+
TypedData_Get_Struct(cary, CArray, &carray_data_type, parent);
|
323
335
|
ca = ca_fake_new(parent, data_type, bytes);
|
324
336
|
obj = ca_wrap_struct(ca);
|
325
337
|
rb_ca_set_parent(obj, cary);
|
@@ -341,7 +353,7 @@ rb_ca_fake (int argc, VALUE *argv, VALUE self)
|
|
341
353
|
int8_t data_type;
|
342
354
|
ca_size_t bytes;
|
343
355
|
|
344
|
-
|
356
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
345
357
|
|
346
358
|
rb_scan_args(argc, argv, "11", (VALUE *) &rtype, (VALUE *) &ropt);
|
347
359
|
rb_scan_options(ropt, "bytes", &rbytes);
|
@@ -369,7 +381,7 @@ static VALUE
|
|
369
381
|
rb_ca_fake_s_allocate (VALUE klass)
|
370
382
|
{
|
371
383
|
CAFake *ca;
|
372
|
-
return
|
384
|
+
return TypedData_Make_Struct(klass, CAFake, &cafake_data_type, ca);
|
373
385
|
}
|
374
386
|
|
375
387
|
static VALUE
|
@@ -377,8 +389,8 @@ rb_ca_fake_initialize_copy (VALUE self, VALUE other)
|
|
377
389
|
{
|
378
390
|
CAFake *ca, *cs;
|
379
391
|
|
380
|
-
|
381
|
-
|
392
|
+
TypedData_Get_Struct(self, CAFake, &cafake_data_type, ca);
|
393
|
+
TypedData_Get_Struct(other, CAFake, &cafake_data_type, cs);
|
382
394
|
|
383
395
|
ca_fake_setup(ca, cs->parent, cs->data_type, cs->bytes);
|
384
396
|
|
@@ -390,7 +402,10 @@ Init_ca_obj_fake ()
|
|
390
402
|
{
|
391
403
|
rb_cCAFake = rb_define_class("CAFake", rb_cCAVirtual);
|
392
404
|
|
393
|
-
CA_OBJ_FAKE = ca_install_obj_type(rb_cCAFake,
|
405
|
+
CA_OBJ_FAKE = ca_install_obj_type(rb_cCAFake,
|
406
|
+
&cafake_data_type,
|
407
|
+
rb_cCArrayMask,
|
408
|
+
&carray_data_type, ca_fake_func);
|
394
409
|
rb_define_const(rb_cObject, "CA_OBJ_FAKE", INT2NUM(CA_OBJ_FAKE));
|
395
410
|
|
396
411
|
rb_define_method(rb_cCArray, "fake", rb_ca_fake, -1);
|
data/ext/ca_obj_farray.c
CHANGED
@@ -27,9 +27,34 @@ typedef struct {
|
|
27
27
|
ca_size_t step;
|
28
28
|
} CAFarray;
|
29
29
|
|
30
|
+
const rb_data_type_t cafarray_data_type = {
|
31
|
+
.parent = &cavirtual_data_type,
|
32
|
+
.wrap_struct_name = "CAFarray",
|
33
|
+
.function = {
|
34
|
+
.dmark = ca_mark,
|
35
|
+
.dfree = ca_free,
|
36
|
+
.dsize = NULL,
|
37
|
+
.dcompact = NULL
|
38
|
+
},
|
39
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY
|
40
|
+
};
|
41
|
+
|
42
|
+
const rb_data_type_t cafarray_mask_data_type = {
|
43
|
+
.parent = &cavirtual_data_type,
|
44
|
+
.wrap_struct_name = "CAFarrayMask",
|
45
|
+
.function = {
|
46
|
+
.dmark = NULL,
|
47
|
+
.dfree = ca_free_nop,
|
48
|
+
.dsize = NULL,
|
49
|
+
.dcompact = NULL
|
50
|
+
},
|
51
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY
|
52
|
+
};
|
53
|
+
|
30
54
|
static int8_t CA_OBJ_FARRAY;
|
31
55
|
|
32
56
|
static VALUE rb_cCAFarray;
|
57
|
+
static VALUE rb_cCAFarrayMask;
|
33
58
|
|
34
59
|
/* yard:
|
35
60
|
class CAFArray < CAVirtual # :nodoc:
|
@@ -419,7 +444,7 @@ rb_ca_farray_new (VALUE cary)
|
|
419
444
|
CArray *parent;
|
420
445
|
CAFarray *ca;
|
421
446
|
rb_check_carray_object(cary);
|
422
|
-
|
447
|
+
TypedData_Get_Struct(cary, CArray, &carray_data_type, parent);
|
423
448
|
ca = ca_farray_new(parent);
|
424
449
|
obj = ca_wrap_struct(ca);
|
425
450
|
rb_ca_set_parent(obj, cary);
|
@@ -445,7 +470,7 @@ static VALUE
|
|
445
470
|
rb_ca_farray_s_allocate (VALUE klass)
|
446
471
|
{
|
447
472
|
CAFarray *ca;
|
448
|
-
return
|
473
|
+
return TypedData_Make_Struct(klass, CAFarray, &cafarray_data_type, ca);
|
449
474
|
}
|
450
475
|
|
451
476
|
static VALUE
|
@@ -453,8 +478,8 @@ rb_ca_farray_initialize_copy (VALUE self, VALUE other)
|
|
453
478
|
{
|
454
479
|
CAFarray *ca, *cs;
|
455
480
|
|
456
|
-
|
457
|
-
|
481
|
+
TypedData_Get_Struct(self, CAFarray, &cafarray_data_type, ca);
|
482
|
+
TypedData_Get_Struct(other, CAFarray, &cafarray_data_type, cs);
|
458
483
|
|
459
484
|
ca_farray_setup(ca, cs->parent);
|
460
485
|
|
@@ -465,8 +490,12 @@ void
|
|
465
490
|
Init_ca_obj_farray ()
|
466
491
|
{
|
467
492
|
rb_cCAFarray = rb_define_class("CAFarray", rb_cCAVirtual);
|
493
|
+
rb_cCAFarrayMask = rb_define_class("CAFarrayMask", rb_cCAFarray);
|
468
494
|
|
469
|
-
CA_OBJ_FARRAY = ca_install_obj_type(rb_cCAFarray,
|
495
|
+
CA_OBJ_FARRAY = ca_install_obj_type(rb_cCAFarray,
|
496
|
+
&cafarray_data_type,
|
497
|
+
rb_cCAFarrayMask,
|
498
|
+
&cafarray_mask_data_type, ca_farray_func);
|
470
499
|
rb_define_const(rb_cObject, "CA_OBJ_FARRAY", INT2NUM(CA_OBJ_FARRAY));
|
471
500
|
|
472
501
|
rb_define_method(rb_cCArray, "farray", rb_ca_farray, 0);
|
data/ext/ca_obj_field.c
CHANGED
@@ -27,6 +27,19 @@ typedef struct {
|
|
27
27
|
ca_size_t offset;
|
28
28
|
} CAField;
|
29
29
|
|
30
|
+
|
31
|
+
const rb_data_type_t cafield_data_type = {
|
32
|
+
.parent = &cavirtual_data_type,
|
33
|
+
.wrap_struct_name = "CAField",
|
34
|
+
.function = {
|
35
|
+
.dmark = ca_mark,
|
36
|
+
.dfree = ca_free,
|
37
|
+
.dsize = NULL,
|
38
|
+
.dcompact = NULL
|
39
|
+
},
|
40
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY
|
41
|
+
};
|
42
|
+
|
30
43
|
static int8_t CA_OBJ_FIELD;
|
31
44
|
|
32
45
|
static VALUE rb_cCAField;
|
@@ -514,7 +527,7 @@ rb_ca_field_new (VALUE cary, ca_size_t offset, int8_t data_type, ca_size_t bytes
|
|
514
527
|
CArray *parent;
|
515
528
|
CAField *ca;
|
516
529
|
rb_check_carray_object(cary);
|
517
|
-
|
530
|
+
TypedData_Get_Struct(cary, CArray, &carray_data_type, parent);
|
518
531
|
ca = ca_field_new(parent, offset, data_type, bytes);
|
519
532
|
obj = ca_wrap_struct(ca);
|
520
533
|
rb_ca_set_parent(obj, cary);
|
@@ -525,7 +538,7 @@ static VALUE
|
|
525
538
|
rb_ca_field_s_allocate (VALUE klass)
|
526
539
|
{
|
527
540
|
CAField *ca;
|
528
|
-
return
|
541
|
+
return TypedData_Make_Struct(klass, CAField, &cafield_data_type, ca);
|
529
542
|
}
|
530
543
|
|
531
544
|
static VALUE
|
@@ -533,8 +546,8 @@ rb_ca_field_initialize_copy (VALUE self, VALUE other)
|
|
533
546
|
{
|
534
547
|
CAField *ca, *cs;
|
535
548
|
|
536
|
-
|
537
|
-
|
549
|
+
TypedData_Get_Struct(self, CAField, &cafield_data_type, ca);
|
550
|
+
TypedData_Get_Struct(other, CAField, &cafield_data_type, cs);
|
538
551
|
|
539
552
|
ca_field_setup(ca, cs->parent, cs->offset, cs->data_type, cs->bytes);
|
540
553
|
|
@@ -567,7 +580,7 @@ rb_ca_field (int argc, VALUE *argv, VALUE self)
|
|
567
580
|
return rb_ca_field_as_member(self, argv[0]);
|
568
581
|
}
|
569
582
|
|
570
|
-
|
583
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
571
584
|
|
572
585
|
/* CArray#field(offset, data_type[, :bytes=>bytes]) */
|
573
586
|
/* CArray#field(offset, data_class) */
|
@@ -583,7 +596,7 @@ rb_ca_field (int argc, VALUE *argv, VALUE self)
|
|
583
596
|
ca_size_t dim[CA_RANK_MAX];
|
584
597
|
int8_t ndim;
|
585
598
|
int8_t i, j;
|
586
|
-
|
599
|
+
TypedData_Get_Struct(rtype, CArray, &carray_data_type, ct);
|
587
600
|
data_type = CA_FIXLEN;
|
588
601
|
bytes = ct->bytes * ct->elements;
|
589
602
|
obj = rb_ca_field_new(self, offset, data_type, bytes);
|
@@ -612,7 +625,10 @@ Init_ca_obj_field ()
|
|
612
625
|
{
|
613
626
|
rb_cCAField = rb_define_class("CAField", rb_cCAVirtual);
|
614
627
|
|
615
|
-
CA_OBJ_FIELD = ca_install_obj_type(rb_cCAField,
|
628
|
+
CA_OBJ_FIELD = ca_install_obj_type(rb_cCAField,
|
629
|
+
&cafield_data_type,
|
630
|
+
rb_cCArrayMask,
|
631
|
+
&carray_mask_data_type, ca_field_func);
|
616
632
|
rb_define_const(rb_cObject, "CA_OBJ_FIELD", INT2NUM(CA_OBJ_FIELD));
|
617
633
|
|
618
634
|
rb_define_method(rb_cCArray, "field", rb_ca_field, -1);
|
data/ext/ca_obj_grid.c
CHANGED
@@ -28,7 +28,32 @@ typedef struct {
|
|
28
28
|
int8_t *contig;
|
29
29
|
} CAGrid;
|
30
30
|
|
31
|
+
const rb_data_type_t cagrid_data_type = {
|
32
|
+
.parent = &cavirtual_data_type,
|
33
|
+
.wrap_struct_name = "CAGrid",
|
34
|
+
.function = {
|
35
|
+
.dmark = ca_mark,
|
36
|
+
.dfree = ca_free,
|
37
|
+
.dsize = NULL,
|
38
|
+
.dcompact = NULL
|
39
|
+
},
|
40
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY
|
41
|
+
};
|
42
|
+
|
43
|
+
const rb_data_type_t cagrid_mask_data_type = {
|
44
|
+
.parent = &cagrid_data_type,
|
45
|
+
.wrap_struct_name = "CAGridMask",
|
46
|
+
.function = {
|
47
|
+
.dmark = NULL,
|
48
|
+
.dfree = ca_free_nop,
|
49
|
+
.dsize = NULL,
|
50
|
+
.dcompact = NULL
|
51
|
+
},
|
52
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY
|
53
|
+
};
|
54
|
+
|
31
55
|
static VALUE rb_cCAGrid;
|
56
|
+
static VALUE rb_cCAGridMask;
|
32
57
|
|
33
58
|
/* yard:
|
34
59
|
class CAGrid < CAVirtual # :nodoc:
|
@@ -593,7 +618,7 @@ rb_ca_grid_new (VALUE cary, ca_size_t *dim, CArray **grid)
|
|
593
618
|
CArray *parent;
|
594
619
|
CAGrid *ca;
|
595
620
|
rb_check_carray_object(cary);
|
596
|
-
|
621
|
+
TypedData_Get_Struct(cary, CArray, &carray_data_type, parent);
|
597
622
|
ca = ca_grid_new(parent, dim, grid);
|
598
623
|
obj = ca_wrap_struct(ca);
|
599
624
|
rb_ca_set_parent(obj, cary);
|
@@ -619,7 +644,7 @@ rb_ca_grid (int argc, VALUE *argv, VALUE self)
|
|
619
644
|
CArray *grid[CA_RANK_MAX];
|
620
645
|
ca_size_t i;
|
621
646
|
|
622
|
-
|
647
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type,ca);
|
623
648
|
|
624
649
|
ridx = rb_ary_new4(argc, argv);
|
625
650
|
|
@@ -635,7 +660,7 @@ rb_ca_grid (int argc, VALUE *argv, VALUE self)
|
|
635
660
|
for (i=0; i<rndim; i++) {
|
636
661
|
rval = rb_ary_entry(ridx, i);
|
637
662
|
if ( rb_obj_is_carray(rval) ) {
|
638
|
-
|
663
|
+
TypedData_Get_Struct(rval, CArray, &carray_data_type, cv);
|
639
664
|
rdim[i] = 1;
|
640
665
|
for (k=0; k<cv->ndim; k++) {
|
641
666
|
rdim[i] *= ca->dim[j];
|
@@ -702,7 +727,7 @@ static VALUE
|
|
702
727
|
rb_ca_grid_s_allocate (VALUE klass)
|
703
728
|
{
|
704
729
|
CAGrid *ca;
|
705
|
-
return
|
730
|
+
return TypedData_Make_Struct(klass, CAGrid, &cagrid_data_type, ca);
|
706
731
|
}
|
707
732
|
|
708
733
|
static VALUE
|
@@ -710,8 +735,8 @@ rb_ca_grid_initialize_copy (VALUE self, VALUE other)
|
|
710
735
|
{
|
711
736
|
CAGrid *ca, *cs;
|
712
737
|
|
713
|
-
|
714
|
-
|
738
|
+
TypedData_Get_Struct(self, CAGrid, &cagrid_data_type, ca);
|
739
|
+
TypedData_Get_Struct(other, CAGrid, &cagrid_data_type, cs);
|
715
740
|
|
716
741
|
/* share grid info */
|
717
742
|
ca_grid_setup(ca, cs->parent, cs->dim, cs->grid, cs->contig, 1);
|
@@ -725,8 +750,12 @@ void
|
|
725
750
|
Init_ca_obj_grid ()
|
726
751
|
{
|
727
752
|
rb_cCAGrid = rb_define_class("CAGrid", rb_cCAVirtual);
|
753
|
+
rb_cCAGridMask = rb_define_class("CAGridMask", rb_cCAGrid);
|
728
754
|
|
729
|
-
CA_OBJ_GRID = ca_install_obj_type(rb_cCAGrid,
|
755
|
+
CA_OBJ_GRID = ca_install_obj_type(rb_cCAGrid,
|
756
|
+
&cagrid_data_type,
|
757
|
+
rb_cCAGridMask,
|
758
|
+
&cagrid_mask_data_type, ca_grid_func);
|
730
759
|
rb_define_const(rb_cObject, "CA_OBJ_GRID", INT2NUM(CA_OBJ_GRID));
|
731
760
|
|
732
761
|
rb_define_method(rb_cCArray, "grid", rb_ca_grid, -1);
|
data/ext/ca_obj_mapping.c
CHANGED
@@ -33,9 +33,34 @@ typedef struct {
|
|
33
33
|
CArray *mapper;
|
34
34
|
} CAMapping;
|
35
35
|
|
36
|
+
const rb_data_type_t camapping_data_type = {
|
37
|
+
.parent = &cavirtual_data_type,
|
38
|
+
.wrap_struct_name = "CAMapping",
|
39
|
+
.function = {
|
40
|
+
.dmark = ca_mark,
|
41
|
+
.dfree = ca_free,
|
42
|
+
.dsize = NULL,
|
43
|
+
.dcompact = NULL
|
44
|
+
},
|
45
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY
|
46
|
+
};
|
47
|
+
|
48
|
+
const rb_data_type_t camapping_mask_data_type = {
|
49
|
+
.parent = &camapping_data_type,
|
50
|
+
.wrap_struct_name = "CAMappingMask",
|
51
|
+
.function = {
|
52
|
+
.dmark = NULL,
|
53
|
+
.dfree = ca_free_nop,
|
54
|
+
.dsize = NULL,
|
55
|
+
.dcompact = NULL
|
56
|
+
},
|
57
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY
|
58
|
+
};
|
59
|
+
|
36
60
|
static int8_t CA_OBJ_MAPPING;
|
37
61
|
|
38
|
-
|
62
|
+
VALUE rb_cCAMapping;
|
63
|
+
VALUE rb_cCAMappingMask;
|
39
64
|
|
40
65
|
/* yard:
|
41
66
|
class CAMapping < CAVirtual # :nodoc:
|
@@ -553,7 +578,7 @@ rb_ca_mapping_new (VALUE cary, CArray *mapper)
|
|
553
578
|
CArray *parent;
|
554
579
|
CAMapping *ca;
|
555
580
|
rb_check_carray_object(cary);
|
556
|
-
|
581
|
+
TypedData_Get_Struct(cary, CArray, &carray_data_type, parent);
|
557
582
|
ca = ca_mapping_new(parent, mapper);
|
558
583
|
obj = ca_wrap_struct(ca);
|
559
584
|
rb_ca_set_parent(obj, cary);
|
@@ -568,7 +593,7 @@ rb_ca_mapping (int argc, VALUE *argv, VALUE self)
|
|
568
593
|
volatile VALUE obj;
|
569
594
|
CArray *ca;
|
570
595
|
CArray *mapper;
|
571
|
-
|
596
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
572
597
|
|
573
598
|
rb_scan_args(argc, argv, "1", (VALUE *) &rmapper);
|
574
599
|
rb_check_carray_object(rmapper);
|
@@ -584,7 +609,7 @@ static VALUE
|
|
584
609
|
rb_ca_mapping_s_allocate (VALUE klass)
|
585
610
|
{
|
586
611
|
CAMapping *ca;
|
587
|
-
return
|
612
|
+
return TypedData_Make_Struct(klass, CAMapping, &camapping_data_type, ca);
|
588
613
|
}
|
589
614
|
|
590
615
|
static VALUE
|
@@ -592,8 +617,8 @@ rb_ca_mapping_initialize_copy (VALUE self, VALUE other)
|
|
592
617
|
{
|
593
618
|
CAMapping *ca, *cs;
|
594
619
|
|
595
|
-
|
596
|
-
|
620
|
+
TypedData_Get_Struct(self, CAMapping, &camapping_data_type, ca);
|
621
|
+
TypedData_Get_Struct(other, CAMapping, &camapping_data_type, cs);
|
597
622
|
|
598
623
|
/* share mapper info */
|
599
624
|
ca_mapping_setup(ca, cs->parent, cs->mapper, 1);
|
@@ -605,8 +630,12 @@ void
|
|
605
630
|
Init_ca_obj_mapping ()
|
606
631
|
{
|
607
632
|
rb_cCAMapping = rb_define_class("CAMapping", rb_cCAVirtual);
|
633
|
+
rb_cCAMappingMask = rb_define_class("CAMappingMask", rb_cCAMapping);
|
608
634
|
|
609
|
-
CA_OBJ_MAPPING = ca_install_obj_type(rb_cCAMapping,
|
635
|
+
CA_OBJ_MAPPING = ca_install_obj_type(rb_cCAMapping,
|
636
|
+
&camapping_data_type,
|
637
|
+
rb_cCAMappingMask,
|
638
|
+
&camapping_mask_data_type, ca_mapping_func);
|
610
639
|
rb_define_const(rb_cObject, "CA_OBJ_MAPPING", INT2NUM(CA_OBJ_MAPPING));
|
611
640
|
|
612
641
|
rb_define_alloc_func(rb_cCAMapping, rb_ca_mapping_s_allocate);
|
data/ext/ca_obj_object.c
CHANGED
@@ -36,6 +36,18 @@
|
|
36
36
|
|
37
37
|
#include "carray.h"
|
38
38
|
|
39
|
+
const rb_data_type_t caobject_data_type = {
|
40
|
+
.parent = &cavirtual_data_type,
|
41
|
+
.wrap_struct_name = "CAObject",
|
42
|
+
.function = {
|
43
|
+
.dmark = ca_mark,
|
44
|
+
.dfree = ca_free,
|
45
|
+
.dsize = NULL,
|
46
|
+
.dcompact = NULL
|
47
|
+
},
|
48
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY
|
49
|
+
};
|
50
|
+
|
39
51
|
VALUE rb_cCAObject;
|
40
52
|
|
41
53
|
|
@@ -47,8 +59,19 @@ VALUE rb_cCAObject;
|
|
47
59
|
|
48
60
|
/* ---------------------------------------------------------------------- */
|
49
61
|
|
62
|
+
const rb_data_type_t caobjectmask_data_type = {
|
63
|
+
.wrap_struct_name = "CAObjectMask",
|
64
|
+
.function = {
|
65
|
+
.dmark = ca_mark,
|
66
|
+
.dfree = ca_free,
|
67
|
+
.dsize = NULL,
|
68
|
+
.dcompact = NULL
|
69
|
+
},
|
70
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY
|
71
|
+
};
|
72
|
+
|
50
73
|
static int8_t CA_OBJ_OBJECT_MASK;
|
51
|
-
|
74
|
+
VALUE rb_cCAObjectMask;
|
52
75
|
|
53
76
|
/* yard:
|
54
77
|
class CAObjectMask < CAVirtual # :nodoc:
|
@@ -277,7 +300,7 @@ static VALUE
|
|
277
300
|
rb_ca_objmask_s_allocate (VALUE klass)
|
278
301
|
{
|
279
302
|
CAObjectMask *ca;
|
280
|
-
return
|
303
|
+
return TypedData_Make_Struct(klass, CAObjectMask, &caobject_data_type, ca);
|
281
304
|
}
|
282
305
|
|
283
306
|
static VALUE
|
@@ -285,8 +308,8 @@ rb_ca_objmask_initialize_copy (VALUE self, VALUE other)
|
|
285
308
|
{
|
286
309
|
CAObjectMask *ca, *cs;
|
287
310
|
|
288
|
-
|
289
|
-
|
311
|
+
TypedData_Get_Struct(self, CAObjectMask, &caobjectmask_data_type, ca);
|
312
|
+
TypedData_Get_Struct(other, CAObjectMask, &caobjectmask_data_type, cs);
|
290
313
|
|
291
314
|
carray_setup((CArray *)ca, CA_BOOLEAN, cs->ndim, cs->dim, 0, NULL);
|
292
315
|
ca->obj_type = CA_OBJ_OBJECT_MASK;
|
@@ -674,8 +697,8 @@ rb_ca_object_initialize_copy (VALUE self, VALUE other)
|
|
674
697
|
volatile VALUE data;
|
675
698
|
CAObject *ca, *cs;
|
676
699
|
|
677
|
-
|
678
|
-
|
700
|
+
TypedData_Get_Struct(self, CAObject, &caobject_data_type, ca);
|
701
|
+
TypedData_Get_Struct(other, CAObject, &caobject_data_type, cs);
|
679
702
|
|
680
703
|
ca_object_setup(ca, cs->data_type, cs->ndim, cs->dim, cs->bytes);
|
681
704
|
ca->self = self;
|
@@ -724,7 +747,7 @@ rb_ca_object_initialize (int argc, VALUE *argv, VALUE self)
|
|
724
747
|
dim[i] = NUM2SIZE(rb_ary_entry(rdim, i));
|
725
748
|
}
|
726
749
|
|
727
|
-
|
750
|
+
TypedData_Get_Struct(self, CAObject, &caobject_data_type, ca);
|
728
751
|
ca_object_setup(ca, data_type, ndim, dim, bytes);
|
729
752
|
ca->self = self;
|
730
753
|
|
@@ -739,7 +762,7 @@ rb_ca_object_initialize (int argc, VALUE *argv, VALUE self)
|
|
739
762
|
|
740
763
|
if ( ! NIL_P(rparent) ) {
|
741
764
|
CArray *cp;
|
742
|
-
|
765
|
+
TypedData_Get_Struct(rparent, CArray, &carray_data_type, cp);
|
743
766
|
ca->parent = cp;
|
744
767
|
rb_ca_set_parent(self, rparent);
|
745
768
|
}
|
@@ -754,7 +777,10 @@ Init_ca_obj_object ()
|
|
754
777
|
{
|
755
778
|
rb_cCAObjectMask = rb_define_class("CAObjectMask", rb_cCArray);
|
756
779
|
|
757
|
-
CA_OBJ_OBJECT_MASK = ca_install_obj_type(rb_cCAObjectMask,
|
780
|
+
CA_OBJ_OBJECT_MASK = ca_install_obj_type(rb_cCAObjectMask,
|
781
|
+
&caobjectmask_data_type,
|
782
|
+
rb_cCArrayMask,
|
783
|
+
&carray_data_type, ca_objmask_func);
|
758
784
|
rb_define_const(rb_cObject, "CA_OBJ_OBJECT_MASK", INT2NUM(CA_OBJ_OBJECT_MASK));
|
759
785
|
|
760
786
|
rb_define_alloc_func(rb_cCAObjectMask, rb_ca_objmask_s_allocate);
|
data/ext/ca_obj_reduce.c
CHANGED
@@ -10,9 +10,34 @@
|
|
10
10
|
|
11
11
|
#include "carray.h"
|
12
12
|
|
13
|
+
const rb_data_type_t careduce_data_type = {
|
14
|
+
.parent = &cavirtual_data_type,
|
15
|
+
.wrap_struct_name = "CAReduce",
|
16
|
+
.function = {
|
17
|
+
.dmark = ca_mark,
|
18
|
+
.dfree = ca_free,
|
19
|
+
.dsize = NULL,
|
20
|
+
.dcompact = NULL
|
21
|
+
},
|
22
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY
|
23
|
+
};
|
24
|
+
|
25
|
+
const rb_data_type_t careduce_mask_data_type = {
|
26
|
+
.parent = &careduce_data_type,
|
27
|
+
.wrap_struct_name = "CAReduceMask",
|
28
|
+
.function = {
|
29
|
+
.dmark = NULL,
|
30
|
+
.dfree = ca_free_nop,
|
31
|
+
.dsize = NULL,
|
32
|
+
.dcompact = NULL
|
33
|
+
},
|
34
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY
|
35
|
+
};
|
36
|
+
|
13
37
|
static int8_t CA_OBJ_REDUCE;
|
14
38
|
|
15
|
-
|
39
|
+
VALUE rb_cCAReduce;
|
40
|
+
VALUE rb_cCAReduceMask;
|
16
41
|
|
17
42
|
/* yard:
|
18
43
|
class CAReduce < CAVirtual # :nodoc:
|
@@ -265,7 +290,7 @@ static VALUE
|
|
265
290
|
rb_ca_reduce_s_allocate (VALUE klass)
|
266
291
|
{
|
267
292
|
CAReduce *ca;
|
268
|
-
return
|
293
|
+
return TypedData_Make_Struct(klass, CAReduce, &careduce_data_type, ca);
|
269
294
|
}
|
270
295
|
|
271
296
|
static VALUE
|
@@ -273,8 +298,8 @@ rb_ca_reduce_initialize_copy (VALUE self, VALUE other)
|
|
273
298
|
{
|
274
299
|
CAReduce *ca, *cs;
|
275
300
|
|
276
|
-
|
277
|
-
|
301
|
+
TypedData_Get_Struct(self, CAReduce, &careduce_data_type, ca);
|
302
|
+
TypedData_Get_Struct(other, CAReduce, &careduce_data_type, cs);
|
278
303
|
|
279
304
|
ca_reduce_setup(ca, cs->parent, cs->count, cs->offset);
|
280
305
|
|
@@ -285,8 +310,12 @@ void
|
|
285
310
|
Init_ca_obj_reduce ()
|
286
311
|
{
|
287
312
|
rb_cCAReduce = rb_define_class("CAReduce", rb_cCAVirtual);
|
313
|
+
rb_cCAReduceMask = rb_define_class("CAReduceMask", rb_cCAReduce);
|
288
314
|
|
289
|
-
CA_OBJ_REDUCE = ca_install_obj_type(rb_cCAReduce,
|
315
|
+
CA_OBJ_REDUCE = ca_install_obj_type(rb_cCAReduce,
|
316
|
+
&careduce_data_type,
|
317
|
+
rb_cCAReduceMask,
|
318
|
+
&careduce_mask_data_type, ca_reduce_func);
|
290
319
|
rb_define_const(rb_cObject, "CA_OBJ_REDUCE", INT2NUM(CA_OBJ_REDUCE));
|
291
320
|
|
292
321
|
rb_define_alloc_func(rb_cCAReduce, rb_ca_reduce_s_allocate);
|
data/ext/ca_obj_refer.c
CHANGED
@@ -10,7 +10,32 @@
|
|
10
10
|
|
11
11
|
#include "carray.h"
|
12
12
|
|
13
|
+
const rb_data_type_t carefer_data_type = {
|
14
|
+
.parent = &cavirtual_data_type,
|
15
|
+
.wrap_struct_name = "CARefer",
|
16
|
+
.function = {
|
17
|
+
.dmark = ca_mark,
|
18
|
+
.dfree = ca_free,
|
19
|
+
.dsize = NULL,
|
20
|
+
.dcompact = NULL
|
21
|
+
},
|
22
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY
|
23
|
+
};
|
24
|
+
|
25
|
+
const rb_data_type_t carefer_mask_data_type = {
|
26
|
+
.parent = &carefer_data_type,
|
27
|
+
.wrap_struct_name = "CAReferMask",
|
28
|
+
.function = {
|
29
|
+
.dmark = NULL,
|
30
|
+
.dfree = ca_free_nop,
|
31
|
+
.dsize = NULL,
|
32
|
+
.dcompact = NULL
|
33
|
+
},
|
34
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY
|
35
|
+
};
|
36
|
+
|
13
37
|
VALUE rb_cCARefer;
|
38
|
+
VALUE rb_cCAReferMask;
|
14
39
|
|
15
40
|
/* yard:
|
16
41
|
class CARefer < CAVirtual # :nodoc:
|
@@ -140,13 +165,12 @@ static char *
|
|
140
165
|
ca_refer_func_ptr_at_addr (void *ap, ca_size_t addr)
|
141
166
|
{
|
142
167
|
CARefer *ca = (CARefer *) ap;
|
143
|
-
ca_size_t
|
168
|
+
ca_size_t minor;
|
144
169
|
switch ( ca->is_deformed ) {
|
145
170
|
case 0:
|
146
171
|
case 1:
|
147
172
|
return ca->ptr + ca->bytes * addr;
|
148
173
|
case -2:
|
149
|
-
major = (addr * ca->bytes) / ca->parent->bytes;
|
150
174
|
minor = (addr * ca->bytes) % ca->parent->bytes;
|
151
175
|
return ca->ptr + ca->bytes * addr + minor;
|
152
176
|
case 2:
|
@@ -470,7 +494,7 @@ static VALUE
|
|
470
494
|
rb_ca_refer_s_allocate (VALUE klass)
|
471
495
|
{
|
472
496
|
CARefer *ca;
|
473
|
-
return
|
497
|
+
return TypedData_Make_Struct(klass, CARefer, &carefer_data_type, ca);
|
474
498
|
}
|
475
499
|
|
476
500
|
static VALUE
|
@@ -478,8 +502,8 @@ rb_ca_refer_initialize_copy (VALUE self, VALUE other)
|
|
478
502
|
{
|
479
503
|
CARefer *ca, *cs;
|
480
504
|
|
481
|
-
|
482
|
-
|
505
|
+
TypedData_Get_Struct(self, CARefer, &carefer_data_type, ca);
|
506
|
+
TypedData_Get_Struct(other, CARefer, &carefer_data_type, cs);
|
483
507
|
|
484
508
|
ca_refer_setup(ca, cs->parent, cs->data_type, cs->ndim, cs->dim,
|
485
509
|
cs->bytes, cs->offset);
|
@@ -515,7 +539,7 @@ rb_ca_refer (int argc, VALUE *argv, VALUE self)
|
|
515
539
|
ca_size_t bytes, offset = 0;
|
516
540
|
int8_t i;
|
517
541
|
|
518
|
-
|
542
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
519
543
|
|
520
544
|
if ( argc == 0 ) { /* CArray#refer() */
|
521
545
|
data_type = ca->data_type;
|
@@ -531,7 +555,6 @@ rb_ca_refer (int argc, VALUE *argv, VALUE self)
|
|
531
555
|
}
|
532
556
|
else {
|
533
557
|
volatile VALUE rtype, rdim, ropt, rbytes = Qnil, roffset = Qnil;
|
534
|
-
ca_size_t elements;
|
535
558
|
|
536
559
|
ropt = rb_pop_options(&argc, &argv);
|
537
560
|
rb_scan_args(argc, argv, "11", (VALUE *) &rtype, (VALUE *) &rdim);
|
@@ -556,10 +579,8 @@ rb_ca_refer (int argc, VALUE *argv, VALUE self)
|
|
556
579
|
Check_Type(rdim, T_ARRAY);
|
557
580
|
ndim = RARRAY_LEN(rdim);
|
558
581
|
|
559
|
-
elements = 1;
|
560
582
|
for (i=0; i<ndim; i++) {
|
561
583
|
dim[i] = NUM2SIZE(rb_ary_entry(rdim, i));
|
562
|
-
elements *= dim[i];
|
563
584
|
}
|
564
585
|
|
565
586
|
if ( ! NIL_P(roffset) ) {
|
@@ -587,7 +608,7 @@ rb_ca_refer_new (VALUE self,
|
|
587
608
|
CArray *ca;
|
588
609
|
int8_t i;
|
589
610
|
|
590
|
-
|
611
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
591
612
|
|
592
613
|
rdim = rb_ary_new2(ndim);
|
593
614
|
for (i=0; i<ndim; i++) {
|