[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:002876] Re: ruby-1.9.0



大塚@京大です。

> 西澤です
> 
> 公約通りruby-1.9.0がリリースされましたね

> 昔試したときはnarrayから失敗したので挫折した記憶があります。

NArray を ruby 1.9 で使うためのパッチを作ったので投げます。
アドホックなものですが、とりあえず使ってみたい方はどうぞ。

拡張ライブラリから ruby の機能を呼ぶときに
  RSTRING( hoge )->ptr
みたいなのが廃止されて
  RSTRING_PTR( hoge )
となっている類がいくつかあるようです。

-- 
京都大学大学院理学研究科
気象学研究室 D2
大塚成徳 (Shigenori OTSUKA)
email: otsuka@xxxxxxxxxxxxxxxxxx
diff -Naur narray-0.5.9p2-org/na_array.c narray-0.5.9p2/na_array.c
--- narray-0.5.9p2-org/na_array.c	2005-08-05 13:36:28.000000000 +0900
+++ narray-0.5.9p2/na_array.c	2007-12-26 15:04:54.359375000 +0900
@@ -560,7 +560,8 @@
 {
   VALUE str=Qnil, tmp;
   int max_col = 77;
-  int sep_len = RSTRING(sep)->len;
+  //int sep_len = RSTRING(sep)->len;
+  int sep_len = RSTRING_LEN(sep);
 
   if (n>0)
     (*tostr)(&str,p2);
@@ -571,7 +572,8 @@
 
     if (!NIL_P(sep)) rb_str_concat(str, sep);
 
-    if (RSTRING(str)->len + RSTRING(tmp)->len + rank*4 + sep_len < max_col) {
+    //if (RSTRING(str)->len + RSTRING(tmp)->len + rank*4 + sep_len < max_col) {
+    if (RSTRING_LEN(str) + RSTRING_LEN(tmp) + rank*4 + sep_len < max_col) {
       rb_str_concat(str, tmp);
     } else {
       rb_str_cat(str,"...",3);
diff -Naur narray-0.5.9p2-org/narray.c narray-0.5.9p2/narray.c
--- narray-0.5.9p2-org/narray.c	2006-08-09 01:10:11.000000000 +0900
+++ narray-0.5.9p2/narray.c	2007-12-26 15:04:09.953125000 +0900
@@ -10,13 +10,13 @@
 */
 #define NARRAY_C
 #include <ruby.h>
-#include <version.h>
+//#include <version.h>
 #include "narray.h"
 #include "narray_local.h"
 
-#if RUBY_VERSION_CODE < 150
-#define NARRAY_GC
-#endif
+//#if RUBY_VERSION_CODE < 150
+//#define NARRAY_GC
+//#endif
 
 /* global variables within this module */
 VALUE cNArray, cNArrayScalar, cComplex;
@@ -170,7 +170,8 @@
   while (v) {
     if (v == cNArray || RCLASS(v)->m_tbl == RCLASS(cNArray)->m_tbl)
       return;
-    v = RCLASS(v)->super;
+    //v = RCLASS(v)->super;
+    v = RCLASS_SUPER(v);
   }
   rb_raise(rb_eRuntimeError, "need NArray or its subclass");
 }
@@ -378,7 +379,8 @@
   }
   if (TYPE(v)==T_STRING) {
     for (i=1; i<NA_NTYPES; i++) {
-      if ( !strncmp( RSTRING(v)->ptr, na_typestring[i], RSTRING(v)->len) )
+      //if ( !strncmp( RSTRING(v)->ptr, na_typestring[i], RSTRING(v)->len) )
+      if ( !strncmp( RSTRING_PTR(v), na_typestring[i], RSTRING_LEN(v)) )
 	return i;
     }
   }
@@ -602,7 +604,8 @@
 
   type = na_get_typecode(argv[0]);
 
-  str_len = RSTRING(str)->len;
+  //str_len = RSTRING(str)->len;
+  str_len = RSTRING_LEN(str);
 
   if (argc == 1) {
     rank  = 1;
@@ -622,7 +625,8 @@
   
   v = na_make_object( type, rank, shape, cNArray );
   GetNArray(v,ary);
-  memcpy( ary->ptr, RSTRING(str)->ptr, ary->total*na_sizeof[type] );
+  //memcpy( ary->ptr, RSTRING(str)->ptr, ary->total*na_sizeof[type] );
+  memcpy( ary->ptr, RSTRING_PTR(str), ary->total*na_sizeof[type] );
 
   return v;
 }