carray 1.4.0 → 1.5.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (239) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +32 -0
  3. data/LICENSE +22 -0
  4. data/NEWS.md +83 -0
  5. data/README.md +38 -18
  6. data/Rakefile +2 -2
  7. data/TODO.md +17 -0
  8. data/carray.gemspec +13 -18
  9. data/{ca_iter_block.c → ext/ca_iter_block.c} +16 -18
  10. data/{ca_iter_dimension.c → ext/ca_iter_dimension.c} +20 -21
  11. data/{ca_iter_window.c → ext/ca_iter_window.c} +12 -14
  12. data/{ca_obj_array.c → ext/ca_obj_array.c} +451 -176
  13. data/{ca_obj_bitarray.c → ext/ca_obj_bitarray.c} +18 -23
  14. data/{ca_obj_bitfield.c → ext/ca_obj_bitfield.c} +12 -16
  15. data/{ca_obj_block.c → ext/ca_obj_block.c} +47 -54
  16. data/{ca_obj_fake.c → ext/ca_obj_fake.c} +10 -12
  17. data/{ca_obj_farray.c → ext/ca_obj_farray.c} +21 -23
  18. data/{ca_obj_field.c → ext/ca_obj_field.c} +30 -32
  19. data/{ca_obj_grid.c → ext/ca_obj_grid.c} +32 -33
  20. data/{ca_obj_mapping.c → ext/ca_obj_mapping.c} +11 -13
  21. data/{ca_obj_object.c → ext/ca_obj_object.c} +40 -42
  22. data/{ca_obj_reduce.c → ext/ca_obj_reduce.c} +3 -5
  23. data/{ca_obj_refer.c → ext/ca_obj_refer.c} +44 -48
  24. data/{ca_obj_repeat.c → ext/ca_obj_repeat.c} +45 -47
  25. data/{ca_obj_select.c → ext/ca_obj_select.c} +4 -6
  26. data/{ca_obj_shift.c → ext/ca_obj_shift.c} +26 -28
  27. data/{ca_obj_transpose.c → ext/ca_obj_transpose.c} +26 -28
  28. data/{ca_obj_unbound_repeat.c → ext/ca_obj_unbound_repeat.c} +106 -160
  29. data/{ca_obj_window.c → ext/ca_obj_window.c} +33 -35
  30. data/{carray.h → ext/carray.h} +86 -59
  31. data/{carray_access.c → ext/carray_access.c} +194 -101
  32. data/{carray_attribute.c → ext/carray_attribute.c} +161 -207
  33. data/{carray_call_cfunc.c → ext/carray_call_cfunc.c} +1 -3
  34. data/{carray_cast.c → ext/carray_cast.c} +351 -150
  35. data/{carray_cast_func.rb → ext/carray_cast_func.rb} +1 -2
  36. data/{carray_class.c → ext/carray_class.c} +28 -36
  37. data/{carray_conversion.c → ext/carray_conversion.c} +63 -68
  38. data/{carray_copy.c → ext/carray_copy.c} +34 -50
  39. data/{carray_core.c → ext/carray_core.c} +75 -62
  40. data/ext/carray_data_type.c +66 -0
  41. data/{carray_element.c → ext/carray_element.c} +34 -53
  42. data/{carray_generate.c → ext/carray_generate.c} +71 -50
  43. data/{carray_iterator.c → ext/carray_iterator.c} +53 -53
  44. data/{carray_loop.c → ext/carray_loop.c} +77 -106
  45. data/{carray_mask.c → ext/carray_mask.c} +105 -114
  46. data/{carray_math.rb → ext/carray_math.rb} +29 -13
  47. data/ext/{mathfunc/carray_mathfunc.c → carray_mathfunc.c} +1 -3
  48. data/{carray_numeric.c → ext/carray_numeric.c} +43 -46
  49. data/{carray_operator.c → ext/carray_operator.c} +49 -36
  50. data/{carray_order.c → ext/carray_order.c} +232 -217
  51. data/{carray_sort_addr.c → ext/carray_sort_addr.c} +14 -21
  52. data/{carray_stat.c → ext/carray_stat.c} +6 -8
  53. data/{carray_stat_proc.rb → ext/carray_stat_proc.rb} +25 -27
  54. data/{carray_test.c → ext/carray_test.c} +63 -51
  55. data/{carray_undef.c → ext/carray_undef.c} +1 -11
  56. data/{carray_utils.c → ext/carray_utils.c} +12 -4
  57. data/{extconf.rb → ext/extconf.rb} +10 -7
  58. data/{mkmath.rb → ext/mkmath.rb} +2 -2
  59. data/{ruby_carray.c → ext/ruby_carray.c} +20 -8
  60. data/{ruby_ccomplex.c → ext/ruby_ccomplex.c} +2 -4
  61. data/{ruby_float_func.c → ext/ruby_float_func.c} +1 -3
  62. data/ext/version.h +16 -0
  63. data/{version.rb → ext/version.rb} +0 -0
  64. data/lib/carray.rb +51 -40
  65. data/lib/carray/{base/autoload.rb → autoload.rb} +1 -3
  66. data/lib/carray/autoload/autoload_base.rb +1 -1
  67. data/lib/carray/autoload/autoload_gem_numo_narray.rb +7 -6
  68. data/lib/carray/autoload/autoload_gem_random.rb +8 -0
  69. data/lib/carray/basic.rb +191 -0
  70. data/lib/carray/broadcast.rb +101 -0
  71. data/lib/carray/compose.rb +315 -0
  72. data/lib/carray/construct.rb +484 -0
  73. data/lib/carray/convert.rb +115 -0
  74. data/lib/carray/info.rb +1 -3
  75. data/lib/carray/{base/inspect.rb → inspect.rb} +9 -11
  76. data/lib/carray/io/imagemagick.rb +2 -4
  77. data/lib/carray/{base/iterator.rb → iterator.rb} +6 -6
  78. data/lib/carray/mask.rb +102 -0
  79. data/lib/carray/{base/math.rb → math.rb} +20 -52
  80. data/lib/carray/math/histogram.rb +8 -10
  81. data/lib/carray/math/recurrence.rb +1 -3
  82. data/lib/carray/mkmf.rb +9 -3
  83. data/lib/carray/object/ca_obj_iterator.rb +1 -3
  84. data/lib/carray/object/ca_obj_link.rb +1 -3
  85. data/lib/carray/object/ca_obj_pack.rb +9 -11
  86. data/lib/carray/obsolete.rb +256 -0
  87. data/lib/carray/ordering.rb +181 -0
  88. data/lib/carray/{base/serialize.rb → serialize.rb} +60 -76
  89. data/lib/carray/{base/string.rb → string.rb} +10 -64
  90. data/lib/carray/{base/struct.rb → struct.rb} +19 -21
  91. data/lib/carray/{io/table.rb → table.rb} +1 -10
  92. data/lib/carray/testing.rb +51 -0
  93. data/lib/carray/time.rb +76 -0
  94. data/lib/carray/transform.rb +109 -0
  95. data/misc/Methods.ja.md +182 -0
  96. data/{NOTE → misc/NOTE} +16 -38
  97. data/spec/Classes/CABitfield_spec.rb +58 -0
  98. data/spec/Classes/CABlockIterator_spec.rb +114 -0
  99. data/spec/Classes/CABlock_spec.rb +205 -0
  100. data/spec/Classes/CAField_spec.rb +39 -0
  101. data/spec/Classes/CAGrid_spec.rb +75 -0
  102. data/spec/Classes/CAMap_spec.rb +0 -0
  103. data/{test/test_CAMapping.rb → spec/Classes/CAMapping_spec.rb} +35 -36
  104. data/spec/Classes/CAObject_attribute_spec.rb +33 -0
  105. data/spec/Classes/CAObject_spec.rb +33 -0
  106. data/spec/Classes/CARefer_spec.rb +93 -0
  107. data/spec/Classes/CARepeat_spec.rb +65 -0
  108. data/spec/Classes/CASelect_spec.rb +22 -0
  109. data/spec/Classes/CAShift_spec.rb +16 -0
  110. data/spec/Classes/CAStruct_spec.rb +71 -0
  111. data/{test/test_CATranspose.rb → spec/Classes/CATranspose_spec.rb} +20 -21
  112. data/spec/Classes/CAUnboudRepeat_spec.rb +102 -0
  113. data/spec/Classes/CAWindow_spec.rb +54 -0
  114. data/spec/Classes/CAWrap_spec.rb +8 -0
  115. data/{test/test_CArray.rb → spec/Classes/CArray_spec.rb} +48 -92
  116. data/spec/Classes/CScalar_spec.rb +55 -0
  117. data/spec/Features/feature_130_spec.rb +19 -0
  118. data/spec/Features/feature_attributes_spec.rb +280 -0
  119. data/spec/Features/feature_boolean_spec.rb +98 -0
  120. data/spec/Features/feature_broadcast.rb +116 -0
  121. data/spec/Features/feature_cast_function.rb +19 -0
  122. data/spec/Features/feature_cast_spec.rb +33 -0
  123. data/spec/Features/feature_class_spec.rb +84 -0
  124. data/spec/Features/feature_complex_spec.rb +42 -0
  125. data/{test/test_composite.rb → spec/Features/feature_composite_spec.rb} +17 -18
  126. data/spec/Features/feature_convert_spec.rb +46 -0
  127. data/spec/Features/feature_copy_spec.rb +123 -0
  128. data/spec/Features/feature_creation_spec.rb +84 -0
  129. data/spec/Features/feature_element_spec.rb +144 -0
  130. data/spec/Features/feature_extream_spec.rb +54 -0
  131. data/spec/Features/feature_generate_spec.rb +74 -0
  132. data/spec/Features/feature_index_spec.rb +69 -0
  133. data/spec/Features/feature_mask_spec.rb +580 -0
  134. data/spec/Features/feature_math_spec.rb +97 -0
  135. data/spec/Features/feature_order_spec.rb +146 -0
  136. data/spec/Features/feature_ref_store_spec.rb +209 -0
  137. data/spec/Features/feature_serialization_spec.rb +125 -0
  138. data/spec/Features/feature_stat_spec.rb +397 -0
  139. data/spec/Features/feature_virtual_spec.rb +48 -0
  140. data/spec/Features/method_eq_spec.rb +81 -0
  141. data/spec/Features/method_is_nan_spec.rb +12 -0
  142. data/spec/Features/method_map_spec.rb +54 -0
  143. data/spec/Features/method_max_with.rb +20 -0
  144. data/spec/Features/method_min_with.rb +19 -0
  145. data/spec/Features/method_ne_spec.rb +18 -0
  146. data/spec/Features/method_project_spec.rb +188 -0
  147. data/spec/Features/method_ref_spec.rb +27 -0
  148. data/spec/Features/method_round_spec.rb +11 -0
  149. data/spec/Features/method_s_linspace_spec.rb +48 -0
  150. data/spec/Features/method_s_span_spec.rb +14 -0
  151. data/spec/Features/method_seq_spec.rb +47 -0
  152. data/spec/Features/method_sort_with.rb +43 -0
  153. data/spec/Features/method_sorted_with.rb +29 -0
  154. data/spec/Features/method_span_spec.rb +42 -0
  155. data/spec/Features/method_wrap_readonly_spec.rb +43 -0
  156. data/{test → spec/UnitTest}/test_CAVirtual.rb +0 -0
  157. data/spec/spec_all.rb +0 -1
  158. data/utils/convert_test.rb +73 -0
  159. data/utils/{extract_rdoc.rb → extract_yard.rb} +7 -12
  160. data/{devel → utils}/guess_shape.rb +0 -0
  161. data/utils/{diff_method.rb → monkey_patch_methods.rb} +17 -7
  162. metadata +159 -206
  163. data/COPYING +0 -56
  164. data/GPL +0 -340
  165. data/LEGAL +0 -50
  166. data/TODO +0 -5
  167. data/carray_random.c +0 -531
  168. data/devel/im2col.rb +0 -17
  169. data/ext/calculus/carray_calculus.c +0 -931
  170. data/ext/calculus/carray_interp.c +0 -358
  171. data/ext/calculus/extconf.rb +0 -12
  172. data/ext/calculus/lib/math/calculus.rb +0 -119
  173. data/ext/calculus/lib/math/interp/adapter_interp1d.rb +0 -31
  174. data/ext/mathfunc/extconf.rb +0 -18
  175. data/ext/mathfunc/test/test_hypot.rb +0 -5
  176. data/ext/mathfunc/test/test_j0.rb +0 -22
  177. data/ext/mathfunc/test/test_jn.rb +0 -8
  178. data/ext/mathfunc/test/test_sph.rb +0 -9
  179. data/lib/carray/autoload/autoload_io_table.rb +0 -1
  180. data/lib/carray/autoload/autoload_math_interp.rb +0 -4
  181. data/lib/carray/base/basic.rb +0 -1146
  182. data/lib/carray/base/obsolete.rb +0 -131
  183. data/lib/carray/math/interp.rb +0 -57
  184. data/lib/carray/math/interp/adapter_gsl_spline.rb +0 -47
  185. data/mt19937ar.c +0 -182
  186. data/mt19937ar.h +0 -86
  187. data/rdoc_main.rb +0 -27
  188. data/rdoc_math.rb +0 -5
  189. data/rdoc_stat.rb +0 -31
  190. data/spec/CABlockIterator/CABlockIterator_spec.rb +0 -113
  191. data/spec/CArray/bug/store_spec.rb +0 -27
  192. data/spec/CArray/index/repeat_spec.rb +0 -10
  193. data/spec/CArray/method/eq_spec.rb +0 -80
  194. data/spec/CArray/method/is_nan_spec.rb +0 -12
  195. data/spec/CArray/method/ne_spec.rb +0 -18
  196. data/spec/CArray/method/round_spec.rb +0 -11
  197. data/spec/CArray/object/_attribute_spec.rb +0 -32
  198. data/spec/CArray/object/s_new_spec.rb +0 -31
  199. data/spec/CArray/serialize/Serialization_spec.rb +0 -89
  200. data/test/test_130.rb +0 -23
  201. data/test/test_ALL.rb +0 -51
  202. data/test/test_CABitfield.rb +0 -59
  203. data/test/test_CABlock.rb +0 -208
  204. data/test/test_CAField.rb +0 -40
  205. data/test/test_CAGrid.rb +0 -76
  206. data/test/test_CAMmap.rb +0 -11
  207. data/test/test_CARefer.rb +0 -94
  208. data/test/test_CARepeat.rb +0 -66
  209. data/test/test_CASelect.rb +0 -23
  210. data/test/test_CAShift.rb +0 -17
  211. data/test/test_CAWindow.rb +0 -55
  212. data/test/test_CAWrap.rb +0 -9
  213. data/test/test_CComplex.rb +0 -83
  214. data/test/test_CScalar.rb +0 -91
  215. data/test/test_attribute.rb +0 -281
  216. data/test/test_block_iterator.rb +0 -17
  217. data/test/test_boolean.rb +0 -99
  218. data/test/test_cast.rb +0 -33
  219. data/test/test_class.rb +0 -85
  220. data/test/test_complex.rb +0 -43
  221. data/test/test_convert.rb +0 -79
  222. data/test/test_copy.rb +0 -141
  223. data/test/test_creation.rb +0 -85
  224. data/test/test_element.rb +0 -146
  225. data/test/test_extream.rb +0 -55
  226. data/test/test_generate.rb +0 -75
  227. data/test/test_index.rb +0 -71
  228. data/test/test_mask.rb +0 -578
  229. data/test/test_math.rb +0 -98
  230. data/test/test_narray.rb +0 -64
  231. data/test/test_order.rb +0 -147
  232. data/test/test_random.rb +0 -15
  233. data/test/test_ref_store.rb +0 -211
  234. data/test/test_stat.rb +0 -414
  235. data/test/test_struct.rb +0 -72
  236. data/test/test_virtual.rb +0 -49
  237. data/utils/create_rdoc.sh +0 -9
  238. data/utils/make_tgz.sh +0 -3
  239. data/version.h +0 -18
@@ -3,10 +3,8 @@
3
3
  carray_core.c
4
4
 
5
5
  This file is part of Ruby/CArray extension library.
6
- You can redistribute it and/or modify it under the terms of
7
- the Ruby Licence.
8
6
 
9
- Copyright (C) 2005 Hiroki Motoyoshi
7
+ Copyright (C) 2005-2020 Hiroki Motoyoshi
10
8
 
11
9
  ---------------------------------------------------------------------------- */
12
10
 
@@ -382,7 +380,7 @@ ca_addr2index (void *ap, ca_size_t addr, ca_size_t *idx)
382
380
  CArray *ca = (CArray *) ap;
383
381
  ca_size_t *dim = ca->dim;
384
382
  int8_t i;
385
- for (i=ca->rank-1; i>=0; i--) {
383
+ for (i=ca->ndim-1; i>=0; i--) {
386
384
  idx[i] = addr % dim[i];
387
385
  addr /= dim[i];
388
386
  }
@@ -398,7 +396,7 @@ ca_index2addr (void *ap, ca_size_t *idx)
398
396
  int8_t i;
399
397
  ca_size_t n;
400
398
  n = idx[0];
401
- for (i=1; i<ca->rank; i++) {
399
+ for (i=1; i<ca->ndim; i++) {
402
400
  n = dim[i]*n+idx[i];
403
401
  }
404
402
  return n;
@@ -998,10 +996,13 @@ rb_ca_s_ensure_detach (VALUE list)
998
996
  return Qnil;
999
997
  }
1000
998
 
1001
- /* rdoc:
1002
- def CArray.attach(*argv) # :nodoc:
1003
- yield
1004
- end
999
+ /* @overload attach (*arrays)
1000
+
1001
+ (Internal) Guarantees that the reference memory block is attached.
1002
+ The memory block is detached at the end of the block evaluation.
1003
+ It is not ensured the syncing the memory block at the end of the block evaluation.
1004
+
1005
+ @yield
1005
1006
  */
1006
1007
 
1007
1008
  static VALUE
@@ -1035,10 +1036,13 @@ rb_ca_s_ensure_sync_detach (VALUE list)
1035
1036
  return Qnil;
1036
1037
  }
1037
1038
 
1038
- /* rdoc:
1039
- def CArray.attach!(*argv) # :nodoc:
1040
- yield
1041
- end
1039
+ /* @overload attach! (*arrays)
1040
+
1041
+ (Internal) Guarantees that the reference memory block is attached.
1042
+ The memory block is detached at the end of the block evaluation.
1043
+ It is ensured the syncing the memory block at the end of the block evaluation.
1044
+
1045
+ @yield
1042
1046
  */
1043
1047
 
1044
1048
  static VALUE
@@ -1065,12 +1069,13 @@ rb_ca_ensure_detach (VALUE self)
1065
1069
  return Qnil;
1066
1070
  }
1067
1071
 
1068
- /* rdoc:
1069
- class CArray
1070
- def attach () # :nodoc:
1071
- yield
1072
- end
1073
- end
1072
+ /* @overload attach
1073
+
1074
+ (Internal) Guarantees that the reference memory block is attached.
1075
+ The memory block is detached at the end of the block evaluation.
1076
+ It is ensured the syncing the memory block at the end of the block evaluation.
1077
+
1078
+ @yield
1074
1079
  */
1075
1080
 
1076
1081
  static VALUE
@@ -1088,12 +1093,13 @@ rb_ca_ensure_sync_detach (VALUE self)
1088
1093
  return Qnil;
1089
1094
  }
1090
1095
 
1091
- /* rdoc:
1092
- class CArray
1093
- def attach! () # :nodoc:
1094
- yield
1095
- end
1096
- end
1096
+ /* @overload attach!
1097
+
1098
+ (Internal) Guarantees that the reference memory block is attached.
1099
+ The memory block is detached at the end of the block evaluation.
1100
+ It is ensured the syncing the memory block at the end of the block evaluation.
1101
+
1102
+ @yield
1097
1103
  */
1098
1104
 
1099
1105
  static VALUE
@@ -1104,7 +1110,11 @@ rb_ca_attach_bang (VALUE self)
1104
1110
  return rb_ensure(rb_yield, self, rb_ca_ensure_sync_detach, self);
1105
1111
  }
1106
1112
 
1107
- /* CArray#__attach__ */
1113
+ /* @overload __attach__
1114
+
1115
+ (Internal, DevelopperOnly) Attaches the reference memory block.
1116
+ User must call "CArray#__detach__" appropreate timing.
1117
+ */
1108
1118
 
1109
1119
  static VALUE
1110
1120
  rb_ca__attach__ (VALUE self)
@@ -1113,7 +1123,10 @@ rb_ca__attach__ (VALUE self)
1113
1123
  return self;
1114
1124
  }
1115
1125
 
1116
- /* CArray#__sync__ */
1126
+ /* @overload __detach__
1127
+
1128
+ (Internal, DevelopperOnly) Syncs the reference memory block to the parent array.
1129
+ */
1117
1130
 
1118
1131
  static VALUE
1119
1132
  rb_ca__sync__ (VALUE self)
@@ -1123,7 +1136,10 @@ rb_ca__sync__ (VALUE self)
1123
1136
  return self;
1124
1137
  }
1125
1138
 
1126
- /* CArray#__detach__ */
1139
+ /* @overload __detach__
1140
+
1141
+ (Internal, DevelopperOnly) Detaches the reference memory block.
1142
+ */
1127
1143
 
1128
1144
  static VALUE
1129
1145
  rb_ca__detach__ (VALUE self)
@@ -1162,18 +1178,15 @@ rb_ca_data_class_encode (VALUE self, VALUE obj)
1162
1178
 
1163
1179
  /* ------------------------------------------------------------------- */
1164
1180
 
1165
- /* rdoc:
1166
- class CArray
1167
- # Returns data class member names
1168
- def members
1169
- end
1170
- end
1181
+ /* @overload members
1182
+
1183
+ (Inquiry) Returns data class member names
1171
1184
  */
1172
1185
 
1173
1186
  VALUE
1174
1187
  rb_ca_members (VALUE self)
1175
1188
  {
1176
- VALUE data_class = rb_ca_data_class(self);
1189
+ volatile VALUE data_class = rb_ca_data_class(self);
1177
1190
  if ( NIL_P(data_class) ) {
1178
1191
  rb_raise(rb_eRuntimeError, "carray doesn't have data class");
1179
1192
  }
@@ -1185,9 +1198,9 @@ rb_ca_members (VALUE self)
1185
1198
  VALUE
1186
1199
  rb_ca_field_as_member (VALUE self, VALUE sym)
1187
1200
  {
1188
- VALUE data_class = rb_ca_data_class(self);
1189
- VALUE member;
1190
- VALUE obj;
1201
+ volatile VALUE data_class = rb_ca_data_class(self);
1202
+ volatile VALUE member;
1203
+ volatile VALUE obj;
1191
1204
 
1192
1205
  if ( NIL_P(data_class) ) {
1193
1206
  rb_raise(rb_eRuntimeError, "carray doesn't have data class");
@@ -1201,23 +1214,29 @@ rb_ca_field_as_member (VALUE self, VALUE sym)
1201
1214
  "for data_class array");
1202
1215
  }
1203
1216
 
1204
- if ( TYPE(sym) == T_SYMBOL ) {
1205
- sym = rb_funcall(sym, rb_intern("to_s"), 0);
1206
- }
1207
- else if ( rb_obj_is_kind_of(sym, rb_cInteger) ) {
1208
- VALUE member_names = rb_const_get(data_class, rb_intern("MEMBERS"));
1209
- sym = rb_ary_entry(member_names, NUM2SIZE(sym));
1217
+ if ( rb_obj_is_kind_of(sym, rb_cInteger) ) {
1218
+ volatile VALUE member_names = rb_const_get(data_class, rb_intern("MEMBERS"));
1219
+ sym = rb_ary_entry(member_names, NUM2SIZE(sym));
1220
+ obj = rb_hash_aref(member, sym);
1221
+ }
1222
+ else {
1223
+ obj = rb_hash_aref(member, sym);
1224
+ if ( NIL_P(obj) ) {
1225
+ sym = rb_funcall(sym, rb_intern("to_s"), 0);
1226
+ obj = rb_hash_aref(member, sym);
1227
+ }
1210
1228
  }
1211
1229
 
1212
- obj = rb_hash_aref(member, sym);
1213
-
1214
1230
  if ( rb_obj_is_carray(obj) ) {
1215
1231
  return obj;
1216
1232
  }
1217
1233
  else {
1218
- VALUE MEMBER_TABLE = rb_const_get(data_class, rb_intern("MEMBER_TABLE"));
1219
- VALUE info = rb_hash_aref(MEMBER_TABLE, sym);
1234
+ volatile VALUE MEMBER_TABLE = rb_const_get(data_class, rb_intern("MEMBER_TABLE"));
1235
+ volatile VALUE info = rb_hash_aref(MEMBER_TABLE, sym);
1220
1236
  if ( NIL_P(info) ) {
1237
+ if ( TYPE(sym) != T_STRING ) {
1238
+ sym = rb_funcall(sym, rb_intern("to_s"), 0);
1239
+ }
1221
1240
  rb_raise(rb_eRuntimeError,
1222
1241
  "can't find data_member named <%s>", StringValuePtr(sym));
1223
1242
  }
@@ -1228,18 +1247,15 @@ rb_ca_field_as_member (VALUE self, VALUE sym)
1228
1247
  }
1229
1248
  }
1230
1249
 
1231
- /* rdoc:
1232
- class CArray
1233
- # Returns an array of data class members (fields)
1234
- def fields
1235
- end
1236
- end
1250
+ /* @overload fields
1251
+
1252
+ (Reference) Returns an array of data class members (fields)
1237
1253
  */
1238
1254
 
1239
1255
  VALUE
1240
1256
  rb_ca_fields (VALUE self)
1241
1257
  {
1242
- VALUE data_class = rb_ca_data_class(self);
1258
+ volatile VALUE data_class = rb_ca_data_class(self);
1243
1259
  volatile VALUE member_names, list;
1244
1260
  int i;
1245
1261
  if ( NIL_P(data_class) ) {
@@ -1254,18 +1270,15 @@ rb_ca_fields (VALUE self)
1254
1270
  return list;
1255
1271
  }
1256
1272
 
1257
- /* rdoc:
1258
- class CArray
1259
- # Returns an array of data class members (fields) with names specified
1260
- def fields_at (*names)
1261
- end
1262
- end
1273
+ /* @overload fields_at (*names)
1274
+
1275
+ Returns an array of data class members (fields) with names specified
1263
1276
  */
1264
1277
 
1265
1278
  VALUE
1266
1279
  rb_ca_fields_at (int argc, VALUE *argv, VALUE self)
1267
1280
  {
1268
- VALUE data_class = rb_ca_data_class(self);
1281
+ volatile VALUE data_class = rb_ca_data_class(self);
1269
1282
  volatile VALUE member_names, list;
1270
1283
  int i;
1271
1284
  if ( NIL_P(data_class) ) {
@@ -0,0 +1,66 @@
1
+ #include "carray.h"
2
+
3
+ VALUE rb_cCArrayBoolean;
4
+ VALUE rb_cCArrayUInt8;
5
+ VALUE rb_cCArrayUInt16;
6
+ VALUE rb_cCArrayUInt32;
7
+ VALUE rb_cCArrayUInt64;
8
+ VALUE rb_cCArrayInt8;
9
+ VALUE rb_cCArrayInt16;
10
+ VALUE rb_cCArrayInt32;
11
+ VALUE rb_cCArrayInt64;
12
+ VALUE rb_cCArrayFloat32;
13
+ VALUE rb_cCArrayFloat64;
14
+ VALUE rb_cCArrayFloat128;
15
+ VALUE rb_cCArrayCmplx64;
16
+ VALUE rb_cCArrayCmplx128;
17
+ VALUE rb_cCArrayCmplx256;
18
+ VALUE rb_cCArrayObject;
19
+ VALUE rb_cCArrayFixlen;
20
+
21
+ VALUE
22
+ ca_data_type_class (int8_t data_type)
23
+ {
24
+ switch ( data_type ) {
25
+ case CA_BOOLEAN: return rb_cCArrayBoolean; break;
26
+ case CA_INT8: return rb_cCArrayInt8; break;
27
+ case CA_UINT8: return rb_cCArrayUInt8; break;
28
+ case CA_INT16: return rb_cCArrayInt16; break;
29
+ case CA_UINT16: return rb_cCArrayUInt16; break;
30
+ case CA_INT32: return rb_cCArrayInt32; break;
31
+ case CA_UINT32: return rb_cCArrayUInt32; break;
32
+ case CA_INT64: return rb_cCArrayInt64; break;
33
+ case CA_UINT64: return rb_cCArrayUInt64; break;
34
+ case CA_FLOAT32: return rb_cCArrayFloat32; break;
35
+ case CA_FLOAT64: return rb_cCArrayFloat64; break;
36
+ case CA_FLOAT128: return rb_cCArrayFloat128; break;
37
+ case CA_CMPLX64: return rb_cCArrayCmplx64; break;
38
+ case CA_CMPLX128: return rb_cCArrayCmplx128; break;
39
+ case CA_CMPLX256: return rb_cCArrayCmplx256; break;
40
+ case CA_OBJECT: return rb_cCArrayObject; break;
41
+ default: rb_raise(rb_eRuntimeError, "invalid data type");
42
+ }
43
+
44
+ }
45
+
46
+ void
47
+ Init_carray_data_type ()
48
+ {
49
+ rb_cCArrayBoolean = rb_define_class_under(rb_cCArray, "Boolean", rb_cObject);
50
+ rb_cCArrayUInt8 = rb_define_class_under(rb_cCArray, "UInt8", rb_cObject);
51
+ rb_cCArrayUInt16 = rb_define_class_under(rb_cCArray, "UInt16", rb_cObject);
52
+ rb_cCArrayUInt32 = rb_define_class_under(rb_cCArray, "UInt32", rb_cObject);
53
+ rb_cCArrayUInt64 = rb_define_class_under(rb_cCArray, "UInt64", rb_cObject);
54
+ rb_cCArrayInt8 = rb_define_class_under(rb_cCArray, "Int8", rb_cObject);
55
+ rb_cCArrayInt16 = rb_define_class_under(rb_cCArray, "Int16", rb_cObject);
56
+ rb_cCArrayInt32 = rb_define_class_under(rb_cCArray, "Int32", rb_cObject);
57
+ rb_cCArrayInt64 = rb_define_class_under(rb_cCArray, "Int64", rb_cObject);
58
+ rb_cCArrayFloat32 = rb_define_class_under(rb_cCArray, "Float32", rb_cObject);
59
+ rb_cCArrayFloat64 = rb_define_class_under(rb_cCArray, "Float64", rb_cObject);
60
+ rb_cCArrayFloat128 = rb_define_class_under(rb_cCArray, "Float128", rb_cObject);
61
+ rb_cCArrayCmplx64 = rb_define_class_under(rb_cCArray, "Cmplx64", rb_cObject);
62
+ rb_cCArrayCmplx128 = rb_define_class_under(rb_cCArray, "Cmplx128", rb_cObject);
63
+ rb_cCArrayCmplx256 = rb_define_class_under(rb_cCArray, "Cmplx256", rb_cObject);
64
+ rb_cCArrayObject = rb_define_class_under(rb_cCArray, "Object", rb_cObject);
65
+ rb_cCArrayFixlen = rb_define_class_under(rb_cCArray, "Fixlen", rb_cObject);
66
+ }
@@ -3,10 +3,8 @@
3
3
  carray_element.c
4
4
 
5
5
  This file is part of Ruby/CArray extension library.
6
- You can redistribute it and/or modify it under the terms of
7
- the Ruby Licence.
8
6
 
9
- Copyright (C) 2005 Hiroki Motoyoshi
7
+ Copyright (C) 2005-2020 Hiroki Motoyoshi
10
8
 
11
9
  ---------------------------------------------------------------------------- */
12
10
 
@@ -15,11 +13,9 @@
15
13
 
16
14
  /* ------------------------------------------------------------------- */
17
15
 
18
- /* rdoc:
19
- class CArray
20
- def elem_swap
21
- end
22
- end
16
+ /* @overload elem_swap (idx1, idx2)
17
+
18
+ (Element) Swaps the values at the elements which are specified by arguments.
23
19
  */
24
20
 
25
21
  VALUE
@@ -48,7 +44,7 @@ rb_ca_elem_swap (VALUE self, VALUE ridx1, VALUE ridx2)
48
44
  }
49
45
 
50
46
  if ( TYPE(ridx1) == T_ARRAY ) {
51
- for (i=0; i<ca->rank; i++) {
47
+ for (i=0; i<ca->ndim; i++) {
52
48
  k = NUM2SIZE(rb_ary_entry(ridx1, i));
53
49
  CA_CHECK_INDEX(k, ca->dim[i]);
54
50
  idx1[i] = k;
@@ -71,7 +67,7 @@ rb_ca_elem_swap (VALUE self, VALUE ridx1, VALUE ridx2)
71
67
  }
72
68
 
73
69
  if ( TYPE(ridx2) == T_ARRAY ) {
74
- for (i=0; i<ca->rank; i++) {
70
+ for (i=0; i<ca->ndim; i++) {
75
71
  k = NUM2SIZE(rb_ary_entry(ridx2, i));
76
72
  CA_CHECK_INDEX(k, ca->dim[i]);
77
73
  idx2[i] = k;
@@ -127,11 +123,9 @@ rb_ca_elem_swap (VALUE self, VALUE ridx1, VALUE ridx2)
127
123
  return self;
128
124
  }
129
125
 
130
- /* rdoc:
131
- class CArray
132
- def elem_copy
133
- end
134
- end
126
+ /* @overload elem_copy (idx1, idx2)
127
+
128
+ (Element) Copies the value of the element of idx1 to the element of idx2
135
129
  */
136
130
 
137
131
  VALUE
@@ -159,7 +153,7 @@ rb_ca_elem_copy (VALUE self, VALUE ridx1, VALUE ridx2)
159
153
  }
160
154
 
161
155
  if ( TYPE(ridx1) == T_ARRAY ) {
162
- for (i=0; i<ca->rank; i++) {
156
+ for (i=0; i<ca->ndim; i++) {
163
157
  k = NUM2SIZE(rb_ary_entry(ridx1, i));
164
158
  CA_CHECK_INDEX(k, ca->dim[i]);
165
159
  idx1[i] = k;
@@ -180,7 +174,7 @@ rb_ca_elem_copy (VALUE self, VALUE ridx1, VALUE ridx2)
180
174
  }
181
175
 
182
176
  if ( TYPE(ridx2) == T_ARRAY ) {
183
- for (i=0; i<ca->rank; i++) {
177
+ for (i=0; i<ca->ndim; i++) {
184
178
  k = NUM2SIZE(rb_ary_entry(ridx2, i));
185
179
  CA_CHECK_INDEX(k, ca->dim[i]);
186
180
  idx2[i] = k;
@@ -207,11 +201,9 @@ rb_ca_elem_copy (VALUE self, VALUE ridx1, VALUE ridx2)
207
201
  return self;
208
202
  }
209
203
 
210
- /* rdoc:
211
- class CArray
212
- def elem_store
213
- end
214
- end
204
+ /* @overload elem_store (idx, obj)
205
+
206
+ (Element) Stores the object value in the element of idx.
215
207
  */
216
208
 
217
209
  VALUE
@@ -228,7 +220,7 @@ rb_ca_elem_store (VALUE self, VALUE ridx, VALUE obj)
228
220
  Data_Get_Struct(self, CArray, ca);
229
221
 
230
222
  if ( TYPE(ridx) == T_ARRAY ) {
231
- for (i=0; i<ca->rank; i++) {
223
+ for (i=0; i<ca->ndim; i++) {
232
224
  k = NUM2SIZE(rb_ary_entry(ridx, i));
233
225
  CA_CHECK_INDEX(k, ca->dim[i]);
234
226
  idx[i] = k;
@@ -245,11 +237,9 @@ rb_ca_elem_store (VALUE self, VALUE ridx, VALUE obj)
245
237
  return obj;
246
238
  }
247
239
 
248
- /* rdoc:
249
- class CArray
250
- def elem_fetch
251
- end
252
- end
240
+ /* @overload elem_fetch (idx)
241
+
242
+ (Element) Fetches the object value at the element of idx.
253
243
  */
254
244
 
255
245
  VALUE
@@ -264,7 +254,7 @@ rb_ca_elem_fetch (VALUE self, VALUE ridx)
264
254
  Data_Get_Struct(self, CArray, ca);
265
255
 
266
256
  if ( TYPE(ridx) == T_ARRAY ) {
267
- for (i=0; i<ca->rank; i++) {
257
+ for (i=0; i<ca->ndim; i++) {
268
258
  k = NUM2SIZE(rb_ary_entry(ridx, i));
269
259
  CA_CHECK_INDEX(k, ca->dim[i]);
270
260
  idx[i] = k;
@@ -279,11 +269,9 @@ rb_ca_elem_fetch (VALUE self, VALUE ridx)
279
269
  }
280
270
  }
281
271
 
282
- /* rdoc:
283
- class CArray
284
- def elem_incr
285
- end
286
- end
272
+ /* @overload elem_incr (idx)
273
+
274
+ (Element) Increments the value by 1 at the element of idx.
287
275
  */
288
276
 
289
277
  VALUE
@@ -314,7 +302,7 @@ rb_ca_elem_incr (VALUE self, VALUE ridx1)
314
302
  has_mask = ( ca->mask ) ? 1 : 0;
315
303
 
316
304
  if ( TYPE(ridx1) == T_ARRAY ) {
317
- for (i=0; i<ca->rank; i++) {
305
+ for (i=0; i<ca->ndim; i++) {
318
306
  k = NUM2SIZE(rb_ary_entry(ridx1, i));
319
307
  CA_CHECK_INDEX(k, ca->dim[i]);
320
308
  idx1[i] = k;
@@ -366,11 +354,9 @@ rb_ca_elem_incr (VALUE self, VALUE ridx1)
366
354
  return out;
367
355
  }
368
356
 
369
- /* rdoc:
370
- class CArray
371
- def elem_decr
372
- end
373
- end
357
+ /* @overload elem_decr (idx)
358
+
359
+ (Element) Decrements the value by 1 at the element of idx.
374
360
  */
375
361
 
376
362
  VALUE
@@ -401,7 +387,7 @@ rb_ca_elem_decr (VALUE self, VALUE ridx1)
401
387
  has_mask = ( ca->mask ) ? 1 : 0;
402
388
 
403
389
  if ( TYPE(ridx1) == T_ARRAY ) {
404
- for (i=0; i<ca->rank; i++) {
390
+ for (i=0; i<ca->ndim; i++) {
405
391
  k = NUM2SIZE(rb_ary_entry(ridx1, i));
406
392
  CA_CHECK_INDEX(k, ca->dim[i]);
407
393
  idx1[i] = k;
@@ -453,11 +439,9 @@ rb_ca_elem_decr (VALUE self, VALUE ridx1)
453
439
  return out;
454
440
  }
455
441
 
456
- /* rdoc:
457
- class CArray
458
- def elem_masked?
459
- end
460
- end
442
+ /* @overload elem_masked? (idx)
443
+
444
+ (Masking, Element) Returns true if the element at given idx is masked.
461
445
  */
462
446
 
463
447
  VALUE
@@ -475,7 +459,7 @@ rb_ca_elem_test_masked (VALUE self, VALUE ridx1)
475
459
  ca_update_mask(ca);
476
460
 
477
461
  if ( TYPE(ridx1) == T_ARRAY ) {
478
- for (i=0; i<ca->rank; i++) {
462
+ for (i=0; i<ca->ndim; i++) {
479
463
  k = NUM2SIZE(rb_ary_entry(ridx1, i));
480
464
  CA_CHECK_INDEX(k, ca->dim[i]);
481
465
  idx1[i] = k;
@@ -498,12 +482,9 @@ rb_ca_elem_test_masked (VALUE self, VALUE ridx1)
498
482
 
499
483
  /* ----------------------------------------------------------------- */
500
484
 
501
- /* rdoc:
502
- class CArray
503
- # used in CAHistogram.
504
- def incr_addr
505
- end
506
- end
485
+ /* @overload incr_addr (addr)
486
+
487
+ (Element) Increment the value at the element of addr.
507
488
  */
508
489
 
509
490
  static VALUE