numo-narray 0.9.0.8 → 0.9.0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ed3756dc41da4cc17c42eb3d74b452c496ca2e69
4
- data.tar.gz: 7c65512df44bde3bb57d6989ca5f0394cb7663cf
3
+ metadata.gz: '09918199887bb7a9559b43147fd5174245bd8889'
4
+ data.tar.gz: 801ffe2b5cdc10afa543987c1862a5ae4eae27f5
5
5
  SHA512:
6
- metadata.gz: 805d2bf586831a5ffac8e75131bf085e5ed60f7cd72721ca022d94b51686e7771146f6063f96df89637ccbac8edd617356b5b3e8be3bed5afb57ceb08e696d3b
7
- data.tar.gz: 8437d1379938785bdbe1a9f3b8421efcecb16987cf4107350b5dcec3673c99f54df3e6fbbad0a49f2eaa2fc2752f73d956b1c61e9f393ec364b8758a4d8b87c8
6
+ metadata.gz: ac932f2ad8b580607d05a86da8a6f22c17c2ec1afbde5b0f48a751c7c6b374bd8119173b104bf6e3b674716b38bf3a9a33294f8456833a2483099d9838c23def
7
+ data.tar.gz: ecd2bf05f24dc79100c28fbd66d5af556dc7b410bbed1a8a5bf0e06d2cd2175ecc6ee556e1c277e5e333c464039f56dbc6dfbdf441323d6042ffe8b2126756bf
@@ -47,6 +47,11 @@ struct
47
47
  rand
48
48
  )
49
49
 
50
+ if RUBY_VERSION[0..3] == "2.1."
51
+ puts "add kwargs"
52
+ srcs << "kwargs"
53
+ end
54
+
50
55
  if have_header("stdbool.h")
51
56
  stdbool = "stdbool.h"
52
57
  else
@@ -0,0 +1,153 @@
1
+ /**********************************************************************
2
+
3
+ Function to extract Keyword argument for ruby-2.1.x
4
+ Copied from class.c in ruby-2.4.2
5
+
6
+ Copyright (C) 1993-2007 Yukihiro Matsumoto
7
+
8
+ **********************************************************************/
9
+ #include <ruby.h>
10
+ #define rb_hash_tbl_raw(hash) rb_hash_tbl(hash)
11
+
12
+ /* from internal.h */
13
+ struct RBasicRaw {
14
+ VALUE flags;
15
+ VALUE klass;
16
+ };
17
+
18
+ #define RBASIC_SET_CLASS(obj, cls) do { \
19
+ VALUE _obj_ = (obj); \
20
+ RB_OBJ_WRITE(_obj_, &((struct RBasicRaw *)(_obj_))->klass, cls); \
21
+ } while (0)
22
+
23
+ /* from class.c */
24
+ VALUE
25
+ rb_keyword_error_new(const char *error, VALUE keys)
26
+ {
27
+ const char *msg = "";
28
+ VALUE error_message;
29
+
30
+ if (RARRAY_LEN(keys) == 1) {
31
+ keys = RARRAY_AREF(keys, 0);
32
+ }
33
+ else {
34
+ keys = rb_ary_join(keys, rb_usascii_str_new2(", "));
35
+ msg = "s";
36
+ }
37
+
38
+ error_message = rb_sprintf("%s keyword%s: %"PRIsVALUE, error, msg, keys);
39
+
40
+ return rb_exc_new_str(rb_eArgError, error_message);
41
+ }
42
+
43
+ NORETURN(static void rb_keyword_error(const char *error, VALUE keys));
44
+ static void
45
+ rb_keyword_error(const char *error, VALUE keys)
46
+ {
47
+ rb_exc_raise(rb_keyword_error_new(error, keys));
48
+ }
49
+
50
+ NORETURN(static void unknown_keyword_error(VALUE hash, const ID *table, int keywords));
51
+ static void
52
+ unknown_keyword_error(VALUE hash, const ID *table, int keywords)
53
+ {
54
+ st_table *tbl = rb_hash_tbl_raw(hash);
55
+ VALUE keys;
56
+ int i;
57
+ for (i = 0; i < keywords; i++) {
58
+ st_data_t key = ID2SYM(table[i]);
59
+ st_delete(tbl, &key, NULL);
60
+ }
61
+ keys = rb_funcallv(hash, rb_intern("keys"), 0, 0);
62
+ if (!RB_TYPE_P(keys, T_ARRAY)) rb_raise(rb_eArgError, "unknown keyword");
63
+ rb_keyword_error("unknown", keys);
64
+ }
65
+
66
+ static int
67
+ separate_symbol(st_data_t key, st_data_t value, st_data_t arg)
68
+ {
69
+ VALUE *kwdhash = (VALUE *)arg;
70
+
71
+ if (!SYMBOL_P(key)) kwdhash++;
72
+ if (!*kwdhash) *kwdhash = rb_hash_new();
73
+ rb_hash_aset(*kwdhash, (VALUE)key, (VALUE)value);
74
+ return ST_CONTINUE;
75
+ }
76
+
77
+ VALUE
78
+ rb_extract_keywords(VALUE *orighash)
79
+ {
80
+ VALUE parthash[2] = {0, 0};
81
+ VALUE hash = *orighash;
82
+
83
+ if (RHASH_EMPTY_P(hash)) {
84
+ *orighash = 0;
85
+ return hash;
86
+ }
87
+ st_foreach(rb_hash_tbl_raw(hash), separate_symbol, (st_data_t)&parthash);
88
+ *orighash = parthash[1];
89
+ if (parthash[1] && RBASIC_CLASS(hash) != rb_cHash) {
90
+ RBASIC_SET_CLASS(parthash[1], RBASIC_CLASS(hash));
91
+ }
92
+ return parthash[0];
93
+ }
94
+
95
+ int
96
+ rb_get_kwargs(VALUE keyword_hash, const ID *table, int required, int optional, VALUE *values)
97
+ {
98
+ int i = 0, j;
99
+ int rest = 0;
100
+ VALUE missing = Qnil;
101
+ st_data_t key;
102
+
103
+ #define extract_kwarg(keyword, val) \
104
+ (key = (st_data_t)(keyword), values ? \
105
+ st_delete(rb_hash_tbl_raw(keyword_hash), &key, (val)) : \
106
+ st_lookup(rb_hash_tbl_raw(keyword_hash), key, (val)))
107
+
108
+ if (NIL_P(keyword_hash)) keyword_hash = 0;
109
+
110
+ if (optional < 0) {
111
+ rest = 1;
112
+ optional = -1-optional;
113
+ }
114
+ if (values) {
115
+ for (j = 0; j < required + optional; j++) {
116
+ values[j] = Qundef;
117
+ }
118
+ }
119
+ if (required) {
120
+ for (; i < required; i++) {
121
+ VALUE keyword = ID2SYM(table[i]);
122
+ if (keyword_hash) {
123
+ st_data_t val;
124
+ if (extract_kwarg(keyword, &val)) {
125
+ if (values) values[i] = (VALUE)val;
126
+ continue;
127
+ }
128
+ }
129
+ if (NIL_P(missing)) missing = rb_ary_tmp_new(1);
130
+ rb_ary_push(missing, keyword);
131
+ }
132
+ if (!NIL_P(missing)) {
133
+ rb_keyword_error("missing", missing);
134
+ }
135
+ }
136
+ j = i;
137
+ if (optional && keyword_hash) {
138
+ for (i = 0; i < optional; i++) {
139
+ st_data_t val;
140
+ if (extract_kwarg(ID2SYM(table[required+i]), &val)) {
141
+ if (values) values[required+i] = (VALUE)val;
142
+ j++;
143
+ }
144
+ }
145
+ }
146
+ if (!rest && keyword_hash) {
147
+ if (RHASH_SIZE(keyword_hash) > (unsigned int)(values ? 0 : j)) {
148
+ unknown_keyword_error(keyword_hash, table, required+optional);
149
+ }
150
+ }
151
+ return j;
152
+ #undef extract_kwarg
153
+ }
@@ -106,4 +106,12 @@ int nary_get_result_dimension(VALUE self, int argc, VALUE *argv, ssize_t stride,
106
106
  #define na_aref_main nary_aref_main
107
107
  VALUE nary_aref_main(int nidx, VALUE *idx, VALUE self, int keep_dim, int nd);
108
108
 
109
+ #include "ruby/version.h"
110
+
111
+ #if RUBY_API_VERSION_CODE == 20100 // 2.1.0
112
+ int rb_get_kwargs(VALUE keyword_hash, const ID *table, int required, int optional, VALUE *);
113
+ VALUE rb_extract_keywords(VALUE *orighash);
114
+ #endif
115
+
116
+
109
117
  #endif /* ifndef INTERN_H */
@@ -13,8 +13,8 @@ extern "C" {
13
13
  #endif
14
14
  #endif
15
15
 
16
- #define NARRAY_VERSION "0.9.0.8"
17
- #define NARRAY_VERSION_CODE 908
16
+ #define NARRAY_VERSION "0.9.0.9"
17
+ #define NARRAY_VERSION_CODE 909
18
18
 
19
19
  #include <math.h>
20
20
  #include "numo/compat.h"
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.0.8
4
+ version: 0.9.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masahiro TANAKA
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-23 00:00:00.000000000 Z
11
+ date: 2017-10-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -204,6 +204,7 @@ files:
204
204
  - ext/numo/narray/gen/tmpl_bit/where.c
205
205
  - ext/numo/narray/gen/tmpl_bit/where2.c
206
206
  - ext/numo/narray/index.c
207
+ - ext/numo/narray/kwargs.c
207
208
  - ext/numo/narray/math.c
208
209
  - ext/numo/narray/narray.c
209
210
  - ext/numo/narray/ndloop.c
@@ -266,7 +267,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
266
267
  version: '0'
267
268
  requirements: []
268
269
  rubyforge_project:
269
- rubygems_version: 2.6.11
270
+ rubygems_version: 2.6.13
270
271
  signing_key:
271
272
  specification_version: 4
272
273
  summary: alpha release of Numo::NArray - New NArray class library in Ruby/Numo (NUmerical