numo-narray 0.9.1.5 → 0.9.1.6
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/Rakefile +1 -63
- data/ext/numo/narray/depend.erb +6 -10
- data/ext/numo/narray/extconf.rb +23 -21
- data/ext/numo/narray/gen/cogen.rb +1 -1
- data/ext/numo/narray/gen/narray_def.rb +1 -1
- data/ext/numo/narray/gen/tmpl/alloc_func.c +4 -1
- data/ext/numo/narray/gen/tmpl/allocate.c +1 -0
- data/ext/numo/narray/gen/tmpl_bit/allocate.c +1 -0
- data/ext/numo/narray/index.c +4 -10
- data/ext/numo/narray/narray.c +104 -7
- data/ext/numo/narray/numo/narray.h +15 -11
- data/ext/numo/narray/numo/types/int16.h +5 -2
- data/ext/numo/narray/numo/types/int32.h +0 -1
- data/ext/numo/narray/numo/types/int64.h +0 -1
- data/ext/numo/narray/numo/types/int8.h +1 -2
- data/ext/numo/narray/numo/types/uint16.h +5 -2
- data/ext/numo/narray/numo/types/uint32.h +0 -1
- data/ext/numo/narray/numo/types/uint64.h +0 -1
- data/ext/numo/narray/numo/types/uint8.h +1 -2
- data/ext/numo/narray/numo/types/xint_macro.h +2 -0
- data/lib/numo/narray.rb +1 -7
- data/numo-narray.gemspec +0 -2
- metadata +3 -37
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a2232329c5ed735d60a1b661d6a0db1b9522cc9cad8f98eb8fc1c6db9026b2cb
|
4
|
+
data.tar.gz: ef322c74597e29f8e10c62887feceedc400bbadaa6858ffe80f60949ca31f56d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a745b45d333641210bd942a39609b32df1a18638fdbe03c50fd884c5b31c186816019e2a02532ed23b719b24869054434ea227c0a0a9254155d0dc4d9fd1be4
|
7
|
+
data.tar.gz: 288ea51ef740d909a6f66f5506de47112071d7d6fb7fe6e9bf6e2c04f470ac397cfc3b1edd8da1fd1228ffc5b3ef31eecc6f7265867ec51d03f40ebe88c2d35d
|
data/Rakefile
CHANGED
@@ -1,76 +1,14 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
|
-
begin
|
3
2
|
|
4
3
|
task :doc do
|
5
4
|
dir = "ext/numo/narray"
|
6
5
|
src = %w[array.c data.c index.c math.c narray.c rand.c struct.c].
|
7
6
|
map{|s| File.join(dir,s)} +
|
8
|
-
[File.join(dir,"
|
7
|
+
[File.join(dir,"t_*.c"), "lib/numo/narray/extra.rb"]
|
9
8
|
sh "cd ext/numo/narray; ruby extconf.rb; make src"
|
10
9
|
sh "rm -rf yard .yardoc; yard doc -o yard -m markdown -r README.md #{src.join(' ')}"
|
11
10
|
end
|
12
11
|
|
13
|
-
require "rake/extensiontask"
|
14
|
-
require "rake_compiler_dock"
|
15
|
-
require "shellwords"
|
16
|
-
|
17
|
-
spec = Bundler::GemHelper.gemspec
|
18
|
-
|
19
|
-
cross_platforms = ["x86-mingw32", "x64-mingw32"]
|
20
|
-
Rake::ExtensionTask.new("numo/narray", spec) do |ext|
|
21
|
-
ext.cross_compile = true
|
22
|
-
ext.cross_platform = cross_platforms
|
23
|
-
end
|
24
|
-
|
25
|
-
pkg_dir = "pkg"
|
26
|
-
windows_gem_paths = cross_platforms.collect do |platform|
|
27
|
-
File.join(pkg_dir, "#{spec.full_name}-#{platform}.gem")
|
28
|
-
end
|
29
|
-
|
30
|
-
namespace :build do
|
31
|
-
directory pkg_dir
|
32
|
-
|
33
|
-
desc "Build gems for Windows into the pkg directory"
|
34
|
-
task :windows => pkg_dir do
|
35
|
-
build_dir = "tmp/windows"
|
36
|
-
rm_rf build_dir
|
37
|
-
mkdir_p build_dir
|
38
|
-
|
39
|
-
commands = [
|
40
|
-
["git", "clone", "file://#{Dir.pwd}/.git", build_dir],
|
41
|
-
["cd", build_dir],
|
42
|
-
["bundle"],
|
43
|
-
[
|
44
|
-
"rake",
|
45
|
-
"RUBY_CC_VERSION=2.5.0:2.4.0:2.3.0:2.2.2:2.1.6",
|
46
|
-
"cross",
|
47
|
-
"native",
|
48
|
-
"gem",
|
49
|
-
],
|
50
|
-
]
|
51
|
-
raw_commands = commands.collect do |command|
|
52
|
-
Shellwords.join(command)
|
53
|
-
end
|
54
|
-
raw_command_line = raw_commands.join(" && ")
|
55
|
-
|
56
|
-
RakeCompilerDock.sh(raw_command_line)
|
57
|
-
|
58
|
-
cp(Dir.glob("#{build_dir}/#{pkg_dir}/*.gem"),
|
59
|
-
"#{pkg_dir}/")
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
namespace :release do
|
64
|
-
task :windows => "build:windows" do
|
65
|
-
windows_gem_paths.each do |path|
|
66
|
-
ruby("-S", "gem", "push", path)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
rescue LoadError
|
72
|
-
end
|
73
|
-
|
74
12
|
require 'rake/testtask'
|
75
13
|
Rake::TestTask.new(:test) do |t|
|
76
14
|
t.libs << "test"
|
data/ext/numo/narray/depend.erb
CHANGED
@@ -1,17 +1,13 @@
|
|
1
1
|
TAGSRC = \
|
2
|
-
|
3
|
-
|
4
|
-
*.h \
|
5
|
-
types/*.h \
|
6
|
-
*.c \
|
7
|
-
types/*.c
|
2
|
+
numo/types/*.h \
|
3
|
+
*.c
|
8
4
|
|
9
5
|
tags : TAGS
|
10
6
|
TAGS : $(TAGSRC)
|
11
7
|
etags $(TAGSRC)
|
12
8
|
|
13
9
|
doc :
|
14
|
-
yard doc *.c
|
10
|
+
yard doc *.c
|
15
11
|
|
16
12
|
C_TMPL = <%=Dir.glob("#{__dir__}/gen/tmpl*/*.c").join(" ")%>
|
17
13
|
|
@@ -22,13 +18,13 @@ DEPENDS = $(C_TMPL) <%= __dir__ %>/gen/*.rb
|
|
22
18
|
type_c = []
|
23
19
|
type_rb = Dir.glob("#{__dir__}/gen/def/*.rb")
|
24
20
|
type_rb.each do |s|
|
25
|
-
type_c << c = "
|
21
|
+
type_c << c = "t_"+File.basename(s,".rb")+".c"
|
26
22
|
%>
|
27
23
|
<%=c%>: <%=s%> $(DEPENDS)
|
28
|
-
$(MAKEDIRS) $(@D) types
|
29
24
|
ruby $(COGEN) -l -o $@ <%=s%>
|
30
25
|
<% end %>
|
31
26
|
|
32
27
|
src : <%= type_c.join(" ") %>
|
33
28
|
|
34
|
-
CLEANOBJS = *.o
|
29
|
+
CLEANOBJS = *.o t_*.c *.bak
|
30
|
+
DISTCLEANFILES = depend TAGS
|
data/ext/numo/narray/extconf.rb
CHANGED
@@ -7,7 +7,11 @@ if RUBY_VERSION < "2.1.0"
|
|
7
7
|
exit(1)
|
8
8
|
end
|
9
9
|
|
10
|
-
|
10
|
+
def d(file)
|
11
|
+
File.join(__dir__,file)
|
12
|
+
end
|
13
|
+
|
14
|
+
rm_f d('numo/extconf.h')
|
11
15
|
|
12
16
|
#$CFLAGS="-g3 -O0 -Wall"
|
13
17
|
#$CFLAGS=" $(cflags) -O3 -m64 -msse2 -funroll-loops"
|
@@ -28,20 +32,20 @@ step
|
|
28
32
|
index
|
29
33
|
ndloop
|
30
34
|
data
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
35
|
+
t_bit
|
36
|
+
t_int8
|
37
|
+
t_int16
|
38
|
+
t_int32
|
39
|
+
t_int64
|
40
|
+
t_uint8
|
41
|
+
t_uint16
|
42
|
+
t_uint32
|
43
|
+
t_uint64
|
44
|
+
t_sfloat
|
45
|
+
t_dfloat
|
46
|
+
t_scomplex
|
47
|
+
t_dcomplex
|
48
|
+
t_robject
|
45
49
|
math
|
46
50
|
SFMT
|
47
51
|
struct
|
@@ -89,14 +93,12 @@ have_var("rb_cComplex")
|
|
89
93
|
|
90
94
|
$objs = srcs.collect{|i| i+".o"}
|
91
95
|
|
92
|
-
create_header('numo/extconf.h')
|
96
|
+
create_header d('numo/extconf.h')
|
93
97
|
|
94
|
-
|
95
|
-
File.open(
|
96
|
-
depend_erb_path = File.join(__dir__, "depend.erb")
|
97
|
-
File.open(depend_erb_path, "r") do |depend_erb|
|
98
|
+
File.open(d('depend'), "w") do |depend|
|
99
|
+
File.open(d('depend.erb'), "r") do |depend_erb|
|
98
100
|
erb = ERB.new(depend_erb.read)
|
99
|
-
erb.filename =
|
101
|
+
erb.filename = d('depend.erb')
|
100
102
|
depend.print(erb.result)
|
101
103
|
end
|
102
104
|
end
|
@@ -50,7 +50,7 @@ code = DefLib.new do
|
|
50
50
|
set file_name: $output||""
|
51
51
|
set include_files: ["numo/types/#{type_name}.h"]
|
52
52
|
set lib_name: "numo_"+type_name
|
53
|
-
|
53
|
+
|
54
54
|
if (::RbConfig::CONFIG['target_cpu'] == 'x86_64') or (::RbConfig::CONFIG['target_cpu'] == 'x64')
|
55
55
|
set is_simd: true
|
56
56
|
else
|
@@ -29,7 +29,9 @@ static void
|
|
29
29
|
assert(na->base.type == NARRAY_DATA_T);
|
30
30
|
|
31
31
|
if (na->ptr != NULL) {
|
32
|
-
|
32
|
+
if (na->owned) {
|
33
|
+
xfree(na->ptr);
|
34
|
+
}
|
33
35
|
na->ptr = NULL;
|
34
36
|
}
|
35
37
|
if (na->base.size > 0) {
|
@@ -103,5 +105,6 @@ static VALUE
|
|
103
105
|
na->base.shape = NULL;
|
104
106
|
na->base.reduce = INT2FIX(0);
|
105
107
|
na->ptr = NULL;
|
108
|
+
na->owned = FALSE;
|
106
109
|
return TypedData_Wrap_Struct(klass, &<%=type_name%>_data_type, (void*)na);
|
107
110
|
}
|
data/ext/numo/narray/index.c
CHANGED
@@ -1050,11 +1050,8 @@ static VALUE na_slice(int argc, VALUE *argv, VALUE self)
|
|
1050
1050
|
# [10, 11, 99, 13, 14],
|
1051
1051
|
# [15, 16, 99, 18, 19]]
|
1052
1052
|
*/
|
1053
|
-
|
1054
|
-
|
1055
|
-
// implemented in subclasses
|
1056
|
-
return rb_f_notimplement(argc,argv,self);
|
1057
|
-
}
|
1053
|
+
// implemented in subclasses
|
1054
|
+
#define na_aref rb_f_notimplement
|
1058
1055
|
|
1059
1056
|
/*
|
1060
1057
|
Multi-dimensional element assignment.
|
@@ -1094,11 +1091,8 @@ static VALUE na_aref(int argc, VALUE *argv, VALUE self)
|
|
1094
1091
|
# [8, 9, 10, 11]]
|
1095
1092
|
|
1096
1093
|
*/
|
1097
|
-
|
1098
|
-
|
1099
|
-
// implemented in subclasses
|
1100
|
-
return rb_f_notimplement(argc,argv,self);
|
1101
|
-
}
|
1094
|
+
// implemented in subclasses
|
1095
|
+
#define na_aset rb_f_notimplement
|
1102
1096
|
|
1103
1097
|
/*
|
1104
1098
|
Multi-dimensional array indexing.
|
data/ext/numo/narray/narray.c
CHANGED
@@ -34,6 +34,7 @@ static ID id_count_false;
|
|
34
34
|
static ID id_axis;
|
35
35
|
static ID id_nan;
|
36
36
|
static ID id_keepdims;
|
37
|
+
static ID id_source;
|
37
38
|
|
38
39
|
VALUE cPointer;
|
39
40
|
|
@@ -605,6 +606,87 @@ na_s_eye(int argc, VALUE *argv, VALUE klass)
|
|
605
606
|
#define READ 1
|
606
607
|
#define WRITE 2
|
607
608
|
|
609
|
+
static void
|
610
|
+
na_set_pointer(VALUE self, char *ptr, size_t byte_size)
|
611
|
+
{
|
612
|
+
VALUE obj;
|
613
|
+
narray_t *na;
|
614
|
+
|
615
|
+
if (OBJ_FROZEN(self)) {
|
616
|
+
rb_raise(rb_eRuntimeError, "cannot write to frozen NArray.");
|
617
|
+
}
|
618
|
+
|
619
|
+
GetNArray(self,na);
|
620
|
+
|
621
|
+
switch(NA_TYPE(na)) {
|
622
|
+
case NARRAY_DATA_T:
|
623
|
+
if (NA_SIZE(na) > 0) {
|
624
|
+
if (NA_DATA_PTR(na) != NULL && NA_DATA_OWNED(na)) {
|
625
|
+
xfree(NA_DATA_PTR(na));
|
626
|
+
}
|
627
|
+
NA_DATA_PTR(na) = ptr;
|
628
|
+
NA_DATA_OWNED(na) = FALSE;
|
629
|
+
}
|
630
|
+
return;
|
631
|
+
case NARRAY_VIEW_T:
|
632
|
+
obj = NA_VIEW_DATA(na);
|
633
|
+
if (OBJ_FROZEN(obj)) {
|
634
|
+
rb_raise(rb_eRuntimeError, "cannot write to frozen NArray.");
|
635
|
+
}
|
636
|
+
GetNArray(obj,na);
|
637
|
+
switch(NA_TYPE(na)) {
|
638
|
+
case NARRAY_DATA_T:
|
639
|
+
if (NA_SIZE(na) > 0) {
|
640
|
+
if (NA_DATA_PTR(na) != NULL && NA_DATA_OWNED(na)) {
|
641
|
+
xfree(NA_DATA_PTR(na));
|
642
|
+
}
|
643
|
+
NA_DATA_PTR(na) = ptr;
|
644
|
+
NA_DATA_OWNED(na) = FALSE;
|
645
|
+
}
|
646
|
+
return;
|
647
|
+
default:
|
648
|
+
rb_raise(rb_eRuntimeError,"invalid NA_TYPE of view: %d",NA_TYPE(na));
|
649
|
+
}
|
650
|
+
default:
|
651
|
+
rb_raise(rb_eRuntimeError,"invalid NA_TYPE: %d",NA_TYPE(na));
|
652
|
+
}
|
653
|
+
}
|
654
|
+
|
655
|
+
static void
|
656
|
+
na_pointer_copy_on_write(VALUE self)
|
657
|
+
{
|
658
|
+
narray_t *na;
|
659
|
+
void *ptr;
|
660
|
+
VALUE velmsz;
|
661
|
+
size_t byte_size;
|
662
|
+
|
663
|
+
GetNArray(self,na);
|
664
|
+
if (NA_TYPE(na) == NARRAY_VIEW_T) {
|
665
|
+
self = NA_VIEW_DATA(na);
|
666
|
+
GetNArray(self,na);
|
667
|
+
}
|
668
|
+
|
669
|
+
ptr = NA_DATA_PTR(na);
|
670
|
+
if (ptr == NULL) {
|
671
|
+
return;
|
672
|
+
}
|
673
|
+
|
674
|
+
if (NA_DATA_OWNED(na)) {
|
675
|
+
return;
|
676
|
+
}
|
677
|
+
|
678
|
+
velmsz = rb_const_get(rb_obj_class(self), id_element_byte_size);
|
679
|
+
if (FIXNUM_P(velmsz)) {
|
680
|
+
byte_size = NA_SIZE(na) * NUM2SIZET(velmsz);
|
681
|
+
} else {
|
682
|
+
byte_size = ceil(NA_SIZE(na) * NUM2DBL(velmsz));
|
683
|
+
}
|
684
|
+
NA_DATA_PTR(na) = NULL;
|
685
|
+
rb_funcall(self, id_allocate, 0);
|
686
|
+
memcpy(NA_DATA_PTR(na), ptr, byte_size);
|
687
|
+
rb_ivar_set(self, id_source, Qnil);
|
688
|
+
}
|
689
|
+
|
608
690
|
static char *
|
609
691
|
na_get_pointer_for_rw(VALUE self, int flag)
|
610
692
|
{
|
@@ -620,6 +702,9 @@ na_get_pointer_for_rw(VALUE self, int flag)
|
|
620
702
|
|
621
703
|
switch(NA_TYPE(na)) {
|
622
704
|
case NARRAY_DATA_T:
|
705
|
+
if (flag & WRITE) {
|
706
|
+
na_pointer_copy_on_write(self);
|
707
|
+
}
|
623
708
|
ptr = NA_DATA_PTR(na);
|
624
709
|
if (NA_SIZE(na) > 0 && ptr == NULL) {
|
625
710
|
if (flag & READ) {
|
@@ -636,6 +721,9 @@ na_get_pointer_for_rw(VALUE self, int flag)
|
|
636
721
|
if ((flag & WRITE) && OBJ_FROZEN(obj)) {
|
637
722
|
rb_raise(rb_eRuntimeError, "cannot write to frozen NArray.");
|
638
723
|
}
|
724
|
+
if (flag & WRITE) {
|
725
|
+
na_pointer_copy_on_write(self);
|
726
|
+
}
|
639
727
|
GetNArray(obj,na);
|
640
728
|
switch(NA_TYPE(na)) {
|
641
729
|
case NARRAY_DATA_T:
|
@@ -1260,7 +1348,6 @@ nary_s_from_binary(int argc, VALUE *argv, VALUE type)
|
|
1260
1348
|
{
|
1261
1349
|
size_t len, str_len, byte_size;
|
1262
1350
|
size_t *shape;
|
1263
|
-
char *ptr;
|
1264
1351
|
int i, nd, narg;
|
1265
1352
|
VALUE vstr, vshape, vna;
|
1266
1353
|
VALUE velmsz;
|
@@ -1315,9 +1402,13 @@ nary_s_from_binary(int argc, VALUE *argv, VALUE type)
|
|
1315
1402
|
}
|
1316
1403
|
|
1317
1404
|
vna = nary_new(type, nd, shape);
|
1318
|
-
|
1319
|
-
|
1320
|
-
|
1405
|
+
if (OBJ_FROZEN(vstr)) {
|
1406
|
+
na_set_pointer(vna, RSTRING_PTR(vstr), byte_size);
|
1407
|
+
rb_ivar_set(vna, id_source, vstr);
|
1408
|
+
} else {
|
1409
|
+
void *ptr = na_get_pointer_for_write(vna);
|
1410
|
+
memcpy(ptr, RSTRING_PTR(vstr), byte_size);
|
1411
|
+
}
|
1321
1412
|
|
1322
1413
|
return vna;
|
1323
1414
|
}
|
@@ -1333,7 +1424,6 @@ static VALUE
|
|
1333
1424
|
nary_store_binary(int argc, VALUE *argv, VALUE self)
|
1334
1425
|
{
|
1335
1426
|
size_t size, str_len, byte_size, offset;
|
1336
|
-
char *ptr;
|
1337
1427
|
int narg;
|
1338
1428
|
VALUE vstr, voffset;
|
1339
1429
|
VALUE velmsz;
|
@@ -1363,8 +1453,13 @@ nary_store_binary(int argc, VALUE *argv, VALUE self)
|
|
1363
1453
|
rb_raise(rb_eArgError, "string is too short to store");
|
1364
1454
|
}
|
1365
1455
|
|
1366
|
-
|
1367
|
-
|
1456
|
+
if (OBJ_FROZEN(vstr)) {
|
1457
|
+
na_set_pointer(self, RSTRING_PTR(vstr)+offset, byte_size);
|
1458
|
+
rb_ivar_set(self, id_source, vstr);
|
1459
|
+
} else {
|
1460
|
+
void *ptr = na_get_pointer_for_write(self);
|
1461
|
+
memcpy(ptr, RSTRING_PTR(vstr)+offset, byte_size);
|
1462
|
+
}
|
1368
1463
|
|
1369
1464
|
return SIZET2NUM(byte_size);
|
1370
1465
|
}
|
@@ -1470,6 +1565,7 @@ nary_marshal_load(VALUE self, VALUE a)
|
|
1470
1565
|
ptr = na_get_pointer_for_write(self);
|
1471
1566
|
memcpy(ptr, RARRAY_PTR(v), NA_SIZE(na)*sizeof(VALUE));
|
1472
1567
|
} else {
|
1568
|
+
rb_str_freeze(v);
|
1473
1569
|
nary_store_binary(1,&v,self);
|
1474
1570
|
if (TEST_BYTE_SWAPPED(self)) {
|
1475
1571
|
rb_funcall(na_inplace(self),id_to_host,0);
|
@@ -2009,6 +2105,7 @@ Init_narray()
|
|
2009
2105
|
id_axis = rb_intern("axis");
|
2010
2106
|
id_nan = rb_intern("nan");
|
2011
2107
|
id_keepdims = rb_intern("keepdims");
|
2108
|
+
id_source = rb_intern("source");
|
2012
2109
|
|
2013
2110
|
sym_reduce = ID2SYM(rb_intern("reduce"));
|
2014
2111
|
sym_option = ID2SYM(rb_intern("option"));
|
@@ -13,8 +13,8 @@ extern "C" {
|
|
13
13
|
#endif
|
14
14
|
#endif
|
15
15
|
|
16
|
-
#define NARRAY_VERSION "0.9.1.
|
17
|
-
#define NARRAY_VERSION_CODE
|
16
|
+
#define NARRAY_VERSION "0.9.1.6"
|
17
|
+
#define NARRAY_VERSION_CODE 916
|
18
18
|
|
19
19
|
#include <math.h>
|
20
20
|
#include "numo/compat.h"
|
@@ -81,6 +81,8 @@ extern "C" {
|
|
81
81
|
# ifndef PRIu64
|
82
82
|
# define PRIu64 "llu"
|
83
83
|
# endif
|
84
|
+
#else
|
85
|
+
# error ---->> numo/narray requires 8-byte integer. <<----
|
84
86
|
#endif
|
85
87
|
|
86
88
|
#if SIZEOF_LONG==4
|
@@ -96,22 +98,22 @@ extern "C" {
|
|
96
98
|
# endif
|
97
99
|
#elif SIZEOF_INT==4
|
98
100
|
# define NUM2INT32(x) NUM2INT(x)
|
99
|
-
# define INT322NUM(x) INT2NUM(x)
|
100
101
|
# define NUM2UINT32(x) NUM2UINT(x)
|
101
|
-
#
|
102
|
+
# if SIZEOF_LONG > 4
|
103
|
+
# define INT322NUM(x) INT2FIX(x)
|
104
|
+
# define UINT322NUM(x) INT2FIX(x)
|
105
|
+
# else
|
106
|
+
# define INT322NUM(x) INT2NUM(x)
|
107
|
+
# define UINT322NUM(x) UINT2NUM(x)
|
108
|
+
# endif
|
102
109
|
# ifndef PRId32
|
103
110
|
# define PRId32 "d"
|
104
111
|
# endif
|
105
112
|
# ifndef PRIu32
|
106
113
|
# define PRIu32 "u"
|
107
114
|
# endif
|
108
|
-
#
|
109
|
-
|
110
|
-
#if SIZEOF_VALUE > 4
|
111
|
-
# undef INT322NUM
|
112
|
-
# undef UINT322NUM
|
113
|
-
# define INT322NUM(x) INT2FIX(x)
|
114
|
-
# define UINT322NUM(x) INT2FIX(x)
|
115
|
+
#else
|
116
|
+
# error ---->> numo/narray requires 4-byte integer. <<----
|
115
117
|
#endif
|
116
118
|
|
117
119
|
#ifndef HAVE_TYPE_BOOL
|
@@ -195,6 +197,7 @@ typedef struct RNArray {
|
|
195
197
|
typedef struct RNArrayData {
|
196
198
|
narray_t base;
|
197
199
|
char *ptr;
|
200
|
+
bool owned;
|
198
201
|
} narray_data_t;
|
199
202
|
|
200
203
|
|
@@ -323,6 +326,7 @@ _na_get_narray_t(VALUE obj, unsigned char na_type)
|
|
323
326
|
#define NA_DATA(na) ((narray_data_t*)(na))
|
324
327
|
#define NA_VIEW(na) ((narray_view_t*)(na))
|
325
328
|
#define NA_DATA_PTR(na) (NA_DATA(na)->ptr)
|
329
|
+
#define NA_DATA_OWNED(na) (NA_DATA(na)->owned)
|
326
330
|
#define NA_VIEW_DATA(na) (NA_VIEW(na)->data)
|
327
331
|
#define NA_VIEW_OFFSET(na) (NA_VIEW(na)->offset)
|
328
332
|
#define NA_VIEW_STRIDX(na) (NA_VIEW(na)->stridx)
|
@@ -4,8 +4,11 @@ typedef int16_t rtype;
|
|
4
4
|
#define cRT cT
|
5
5
|
|
6
6
|
#define m_num_to_data(x) ((dtype)NUM2INT(x))
|
7
|
-
#
|
8
|
-
#define
|
7
|
+
#if SIZEOF_INT > 2
|
8
|
+
#define m_data_to_num(x) INT2FIX(x)
|
9
|
+
#else
|
10
|
+
#define m_data_to_num(x) INT2NUM(x)
|
11
|
+
#endif
|
9
12
|
#define m_sprintf(s,x) sprintf(s,"%d",(int)(x))
|
10
13
|
|
11
14
|
#ifndef INT16_MIN
|
@@ -4,8 +4,7 @@ typedef int8_t rtype;
|
|
4
4
|
#define cRT cT
|
5
5
|
|
6
6
|
#define m_num_to_data(x) ((dtype)NUM2INT(x))
|
7
|
-
#define m_data_to_num(x)
|
8
|
-
#define m_extract(x) INT2NUM((int)*(dtype*)(x))
|
7
|
+
#define m_data_to_num(x) INT2FIX(x)
|
9
8
|
#define m_sprintf(s,x) sprintf(s,"%d",(int)(x))
|
10
9
|
|
11
10
|
#ifndef INT8_MIN
|
@@ -4,8 +4,11 @@ typedef u_int16_t rtype;
|
|
4
4
|
#define cRT cT
|
5
5
|
|
6
6
|
#define m_num_to_data(x) ((dtype)NUM2UINT(x))
|
7
|
-
#
|
8
|
-
#define
|
7
|
+
#if SIZEOF_INT > 2
|
8
|
+
#define m_data_to_num(x) INT2FIX(x)
|
9
|
+
#else
|
10
|
+
#define m_data_to_num(x) UINT2NUM(x)
|
11
|
+
#endif
|
9
12
|
#define m_sprintf(s,x) sprintf(s,"%u",(unsigned int)(x))
|
10
13
|
|
11
14
|
#ifndef UINT16_MAX
|
@@ -5,7 +5,6 @@ typedef u_int32_t rtype;
|
|
5
5
|
|
6
6
|
#define m_num_to_data(x) ((dtype)NUM2UINT32(x))
|
7
7
|
#define m_data_to_num(x) UINT322NUM((u_int32_t)(x))
|
8
|
-
#define m_extract(x) UINT322NUM((u_int32_t)*(dtype*)(x))
|
9
8
|
#define m_sprintf(s,x) sprintf(s,"%"PRIu32,(u_int32_t)(x))
|
10
9
|
|
11
10
|
#ifndef UINT32_MAX
|
@@ -5,7 +5,6 @@ typedef u_int64_t rtype;
|
|
5
5
|
|
6
6
|
#define m_num_to_data(x) ((dtype)NUM2UINT64(x))
|
7
7
|
#define m_data_to_num(x) UINT642NUM((u_int64_t)(x))
|
8
|
-
#define m_extract(x) UINT642NUM((u_int64_t)*(dtype*)(x))
|
9
8
|
#define m_sprintf(s,x) sprintf(s,"%"PRIu64,(u_int64_t)(x))
|
10
9
|
|
11
10
|
#ifndef UINT64_MAX
|
@@ -4,8 +4,7 @@ typedef u_int8_t rtype;
|
|
4
4
|
#define cRT cT
|
5
5
|
|
6
6
|
#define m_num_to_data(x) ((dtype)NUM2UINT(x))
|
7
|
-
#define m_data_to_num(x)
|
8
|
-
#define m_extract(x) UINT2NUM((unsigned int)*(dtype*)(x))
|
7
|
+
#define m_data_to_num(x) INT2FIX(x)
|
9
8
|
#define m_sprintf(s,x) sprintf(s,"%u",(unsigned int)(x))
|
10
9
|
|
11
10
|
#ifndef UINT8_MAX
|
data/lib/numo/narray.rb
CHANGED
data/numo-narray.gemspec
CHANGED
@@ -39,6 +39,4 @@ Gem::Specification.new do |spec|
|
|
39
39
|
spec.add_development_dependency "rake", "~> 10.0"
|
40
40
|
end
|
41
41
|
spec.add_development_dependency "test-unit", "~> 3.0"
|
42
|
-
spec.add_development_dependency 'rake-compiler', "~> 1.0", ">= 1.0.1"
|
43
|
-
spec.add_development_dependency "rake-compiler-dock", "~> 0.0"
|
44
42
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: numo-narray
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.1.
|
4
|
+
version: 0.9.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Masahiro TANAKA
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-12-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,40 +52,6 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: rake-compiler
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '1.0'
|
62
|
-
- - ">="
|
63
|
-
- !ruby/object:Gem::Version
|
64
|
-
version: 1.0.1
|
65
|
-
type: :development
|
66
|
-
prerelease: false
|
67
|
-
version_requirements: !ruby/object:Gem::Requirement
|
68
|
-
requirements:
|
69
|
-
- - "~>"
|
70
|
-
- !ruby/object:Gem::Version
|
71
|
-
version: '1.0'
|
72
|
-
- - ">="
|
73
|
-
- !ruby/object:Gem::Version
|
74
|
-
version: 1.0.1
|
75
|
-
- !ruby/object:Gem::Dependency
|
76
|
-
name: rake-compiler-dock
|
77
|
-
requirement: !ruby/object:Gem::Requirement
|
78
|
-
requirements:
|
79
|
-
- - "~>"
|
80
|
-
- !ruby/object:Gem::Version
|
81
|
-
version: '0.0'
|
82
|
-
type: :development
|
83
|
-
prerelease: false
|
84
|
-
version_requirements: !ruby/object:Gem::Requirement
|
85
|
-
requirements:
|
86
|
-
- - "~>"
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
version: '0.0'
|
89
55
|
description: Numo::NArray - New NArray class library in Ruby/Numo.
|
90
56
|
email:
|
91
57
|
- masa16.tanaka@gmail.com
|
@@ -265,7 +231,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
265
231
|
- !ruby/object:Gem::Version
|
266
232
|
version: '0'
|
267
233
|
requirements: []
|
268
|
-
rubygems_version: 3.
|
234
|
+
rubygems_version: 3.1.2
|
269
235
|
signing_key:
|
270
236
|
specification_version: 4
|
271
237
|
summary: alpha release of Numo::NArray - New NArray class library in Ruby/Numo (NUmerical
|