vdsp 1.8.0 → 1.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/vdsp/vdsp.c +184 -45
- data/ext/vdsp/vdsp.h +1 -0
- data/lib/vdsp/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5c68d2c6fcfd278007d16c59196ef9bc72c6f43119db2a3018230c3f18e16653
|
4
|
+
data.tar.gz: cab3b5e5630378581854a1a5e86b1d1bacb2ba9fb17fb5514cced0027d518085
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ee4fc1111d826dbc9a8e7cae82700f69fb692c6e06a3ca6cd0e5fa46eca99f9fbc119742f9ebdeacc725b755980c0d55d40789555f7e4c8e78b30af226f4f8e0
|
7
|
+
data.tar.gz: '08c66b9d34da6f64c4e7138ca883dc8fc76ec286cd4d84f0bd323fe4867d179d9434b7f94cff1dfbe50601395be7e3186757a79cf456ebd33f427e7df413b0f0'
|
data/ext/vdsp/vdsp.c
CHANGED
@@ -391,76 +391,215 @@ VALUE rb_double_array_div(VALUE self, VALUE other)
|
|
391
391
|
}
|
392
392
|
}
|
393
393
|
|
394
|
-
VALUE
|
394
|
+
VALUE rb_double_array_entry(VALUE self, long offset)
|
395
395
|
{
|
396
|
-
|
396
|
+
VdspArrayNativeResource *_a = get_vdsp_array_native_resource(self);
|
397
|
+
long len = _a->length;
|
397
398
|
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
}
|
402
|
-
|
399
|
+
if (offset < 0) {
|
400
|
+
offset += len;
|
401
|
+
if (offset < 0) return Qnil;
|
402
|
+
}
|
403
|
+
else if (len <= offset) {
|
404
|
+
return Qnil;
|
403
405
|
}
|
406
|
+
return DBL2NUM(_a->v.d[offset]);
|
404
407
|
}
|
405
408
|
|
406
|
-
VALUE
|
409
|
+
VALUE rb_double_array_subseq(VALUE self, long beg, long len)
|
407
410
|
{
|
408
|
-
|
411
|
+
VdspArrayNativeResource *_a = get_vdsp_array_native_resource(self);
|
412
|
+
long alen = _a->length;
|
409
413
|
|
410
|
-
|
411
|
-
if (0
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
} else {
|
416
|
-
rb_raise(rb_eIndexError, "Index out of range: %ld", _i);
|
414
|
+
if (beg > alen) return Qnil;
|
415
|
+
if (beg < 0 || len < 0) return Qnil;
|
416
|
+
|
417
|
+
if (alen < len || alen < beg + len) {
|
418
|
+
len = alen - beg;
|
417
419
|
}
|
420
|
+
|
421
|
+
VALUE lenv = LONG2NUM(len);
|
422
|
+
VALUE c = rb_class_new_instance(1, &lenv, rb_cDoubleArray);
|
423
|
+
VdspArrayNativeResource *_c = get_vdsp_array_native_resource(c);
|
424
|
+
memcpy(_c->v.d, _a->v.d+beg, sizeof(double) * len);
|
425
|
+
|
426
|
+
return c;
|
418
427
|
}
|
419
428
|
|
420
|
-
VALUE
|
429
|
+
VALUE rb_double_array_aref2(VALUE self, VALUE b, VALUE e)
|
421
430
|
{
|
422
|
-
|
423
|
-
|
431
|
+
VdspArrayNativeResource *_a = get_vdsp_array_native_resource(self);
|
432
|
+
|
433
|
+
long beg = NUM2LONG(b);
|
434
|
+
long len = NUM2LONG(e);
|
435
|
+
|
436
|
+
if (beg < 0) {
|
437
|
+
beg += _a->length;
|
438
|
+
}
|
439
|
+
|
440
|
+
return rb_double_array_subseq(self, beg, len);
|
424
441
|
}
|
425
442
|
|
426
|
-
VALUE
|
443
|
+
VALUE rb_double_array_aref1(VALUE self, VALUE arg)
|
427
444
|
{
|
428
|
-
|
445
|
+
long beg, len;
|
429
446
|
|
430
447
|
VdspArrayNativeResource *_a = get_vdsp_array_native_resource(self);
|
431
448
|
long alen = _a->length;
|
432
449
|
|
433
|
-
|
434
|
-
|
450
|
+
if (FIXNUM_P(arg)) {
|
451
|
+
return rb_double_array_entry(self, FIX2LONG(arg));
|
452
|
+
}
|
453
|
+
switch (rb_range_beg_len(arg, &beg, &len, alen, 0)) {
|
454
|
+
case Qfalse:
|
455
|
+
break;
|
456
|
+
case Qnil:
|
457
|
+
return Qnil;
|
458
|
+
default:
|
459
|
+
return rb_double_array_subseq(self, beg, len);
|
460
|
+
}
|
461
|
+
return rb_double_array_entry(self, FIX2LONG(arg));
|
462
|
+
}
|
435
463
|
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
464
|
+
VALUE rb_double_array_aref(int argc, const VALUE *argv, VALUE self)
|
465
|
+
{
|
466
|
+
rb_check_arity(argc, 1, 2);
|
467
|
+
|
468
|
+
if (argc == 2) {
|
469
|
+
return rb_double_array_aref2(self, argv[0], argv[1]);
|
470
|
+
}
|
471
|
+
return rb_double_array_aref1(self, argv[0]);
|
472
|
+
}
|
473
|
+
|
474
|
+
VALUE double_array_aset1(VALUE self, long idx, VALUE val)
|
475
|
+
{
|
476
|
+
VdspArrayNativeResource *_a = get_vdsp_array_native_resource(self);
|
477
|
+
double _val = NUM2DBL(val);
|
478
|
+
|
479
|
+
long len = _a->length;
|
480
|
+
|
481
|
+
if (idx < 0) {
|
482
|
+
idx += len;
|
483
|
+
if (idx < 0) {
|
484
|
+
rb_raise(rb_eIndexError, "index %ld too small for array; minimum: %ld", idx - len, -len);
|
448
485
|
}
|
449
486
|
}
|
450
487
|
|
451
|
-
if (
|
452
|
-
|
488
|
+
if (idx >= len) {
|
489
|
+
//rb_raise(rb_eIndexError, "Index out of range: %ld", idx);
|
490
|
+
double_array_resize(_a, idx+1);
|
491
|
+
_a->length = idx+1;
|
492
|
+
}
|
453
493
|
|
494
|
+
_a->v.d[idx] = _val;
|
495
|
+
|
496
|
+
return self;
|
497
|
+
}
|
498
|
+
|
499
|
+
VALUE double_array_aset2(VALUE self, long beg, long len, VALUE val)
|
500
|
+
{
|
501
|
+
VdspArrayNativeResource *_a = get_vdsp_array_native_resource(self);
|
502
|
+
long alen = _a->length;
|
503
|
+
|
504
|
+
if (len<0) {
|
505
|
+
len += alen;
|
506
|
+
}
|
507
|
+
if (len<beg) {
|
508
|
+
len = beg;
|
509
|
+
}
|
454
510
|
if (alen < len || alen < beg + len) {
|
455
511
|
len = alen - beg;
|
456
512
|
}
|
457
513
|
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
514
|
+
if (RB_TYPE_P(val, T_ARRAY)) {
|
515
|
+
val = rb_funcall(rb_cDoubleArray, rb_intern("create"), 1, val);
|
516
|
+
}
|
517
|
+
if (rb_obj_is_kind_of(val, rb_mVdspArray)) {
|
518
|
+
val = rb_funcall(val, rb_intern("to_da"), 0);
|
519
|
+
if (self==val) {
|
520
|
+
val = rb_funcall(val, rb_intern("clone"), 0);
|
521
|
+
}
|
462
522
|
|
463
|
-
|
523
|
+
VdspArrayNativeResource *_b = get_vdsp_array_native_resource(val);
|
524
|
+
long new_len = alen - len + _b->length;
|
525
|
+
|
526
|
+
bool after_resize = false;
|
527
|
+
if (alen==new_len) {
|
528
|
+
} else if (alen<new_len) {
|
529
|
+
double_array_resize(_a, new_len);
|
530
|
+
_a->length = new_len;
|
531
|
+
} else {
|
532
|
+
after_resize = true;
|
533
|
+
}
|
534
|
+
|
535
|
+
memmove(_a->v.d+beg+_b->length, _a->v.d+beg+len, sizeof(double) * (alen-beg-len));
|
536
|
+
memcpy(_a->v.d+beg, _b->v.d, sizeof(double) * _b->length);
|
537
|
+
|
538
|
+
if (after_resize) {
|
539
|
+
double_array_resize(_a, new_len);
|
540
|
+
_a->length = new_len;
|
541
|
+
}
|
542
|
+
|
543
|
+
return self;
|
544
|
+
} else {
|
545
|
+
long new_len = alen - len + 1;
|
546
|
+
|
547
|
+
bool after_resize = false;
|
548
|
+
if (alen==new_len) {
|
549
|
+
} else if (alen<new_len) {
|
550
|
+
double_array_resize(_a, new_len);
|
551
|
+
_a->length = new_len;
|
552
|
+
} else {
|
553
|
+
after_resize = true;
|
554
|
+
}
|
555
|
+
|
556
|
+
memmove(_a->v.d+beg+1, _a->v.d+len, sizeof(double) * (alen-beg-len));
|
557
|
+
_a->v.d[beg] = NUM2DBL(val);
|
558
|
+
|
559
|
+
if (after_resize) {
|
560
|
+
double_array_resize(_a, new_len);
|
561
|
+
_a->length = new_len;
|
562
|
+
}
|
563
|
+
|
564
|
+
return self;
|
565
|
+
}
|
566
|
+
}
|
567
|
+
|
568
|
+
VALUE rb_double_array_aset(int argc, const VALUE *argv, VALUE self)
|
569
|
+
{
|
570
|
+
long offset, beg, len;
|
571
|
+
VALUE val;
|
572
|
+
|
573
|
+
if (argc == 3) {
|
574
|
+
beg = NUM2LONG(argv[0]);
|
575
|
+
len = NUM2LONG(argv[1]);
|
576
|
+
val = argv[2];
|
577
|
+
return double_array_aset2(self, beg, len, val);
|
578
|
+
}
|
579
|
+
|
580
|
+
rb_check_arity(argc, 2, 2);
|
581
|
+
|
582
|
+
if (FIXNUM_P(argv[0])) {
|
583
|
+
offset = FIX2LONG(argv[0]);
|
584
|
+
val = argv[1];
|
585
|
+
return double_array_aset1(self, offset, val);
|
586
|
+
}
|
587
|
+
|
588
|
+
VdspArrayNativeResource *_a = get_vdsp_array_native_resource(self);
|
589
|
+
if (rb_range_beg_len(argv[0], &beg, &len, _a->length, 1)) {
|
590
|
+
val = argv[1];
|
591
|
+
return double_array_aset2(self, beg, len, val);
|
592
|
+
}
|
593
|
+
|
594
|
+
offset = NUM2LONG(argv[0]);
|
595
|
+
val = argv[1];
|
596
|
+
return double_array_aset1(self, offset, val);
|
597
|
+
}
|
598
|
+
|
599
|
+
VALUE rb_double_array_coerce(VALUE self, VALUE other)
|
600
|
+
{
|
601
|
+
other = rb_class_new_instance(1, &other, rb_cDoubleScalar);
|
602
|
+
return rb_assoc_new(other, self);
|
464
603
|
}
|
465
604
|
|
466
605
|
void double_array_resize(VdspArrayNativeResource *_a, unsigned long len)
|
@@ -2597,12 +2736,12 @@ void Init_vdsp()
|
|
2597
2736
|
rb_define_method(rb_cDoubleArray, "-", rb_double_array_minus, 1);
|
2598
2737
|
rb_define_method(rb_cDoubleArray, "*", rb_double_array_mul, 1);
|
2599
2738
|
rb_define_method(rb_cDoubleArray, "/", rb_double_array_div, 1);
|
2600
|
-
rb_define_method(rb_cDoubleArray, "[]", rb_double_array_aref, 1);
|
2601
|
-
rb_define_method(rb_cDoubleArray, "[]=", rb_double_array_aset,
|
2739
|
+
rb_define_method(rb_cDoubleArray, "[]", rb_double_array_aref, -1);
|
2740
|
+
rb_define_method(rb_cDoubleArray, "[]=", rb_double_array_aset, -1);
|
2602
2741
|
rb_define_method(rb_cDoubleArray, "each", rb_double_array_each, 0);
|
2603
2742
|
rb_define_method(rb_cDoubleArray, "to_a", rb_double_array_get_values, 0);
|
2604
2743
|
rb_define_method(rb_cDoubleArray, "coerce", rb_double_array_coerce, 1);
|
2605
|
-
rb_define_method(rb_cDoubleArray, "slice",
|
2744
|
+
rb_define_method(rb_cDoubleArray, "slice", rb_double_array_aref, -1);
|
2606
2745
|
rb_define_method(rb_cDoubleArray, "resize", rb_double_array_resize, 1);
|
2607
2746
|
rb_define_method(rb_cDoubleArray, "concat", rb_double_array_concat, -1);
|
2608
2747
|
rb_define_method(rb_cDoubleArray, "abs", rb_double_array_abs, 0);
|
data/ext/vdsp/vdsp.h
CHANGED
data/lib/vdsp/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vdsp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yoshida Tetsuya
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-10-
|
11
|
+
date: 2019-10-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|