Davor Ocelic, SPINLOCK Solutions - Advanced Unix-based systems for commercial and education sectors. http://www.spinlocksolutions.com/ diff -ru narray-0.5.9p6/narray.c narray-0.5.9p6,buffer1.8/narray.c --- narray-0.5.9p6/narray.c 2008-11-05 05:42:55.000000000 +0100 +++ narray-0.5.9p6,buffer1.8/narray.c 2008-12-18 18:17:36.000000000 +0100 @@ -293,6 +293,26 @@ return na_wrap_struct(na_ref_alloc_struct(self), self); } + +/* method: buffer */ +static VALUE + na_buffer(VALUE self) +{ + struct NARRAY *a1; + VALUE str; + GetNArray(self,a1); + /* str= str_alloc( rb_cString); -- static, not useful */ + str= rb_str_new( NULL, 0); + RSTRING(str)->len = na_sizeof[a1->type]*a1->total; + free( RSTRING(str)->ptr); + RSTRING(str)->ptr = a1->ptr; + FL_SET(str, ELTS_SHARED); + RSTRING(str)->aux.shared = self; + OBJ_FREEZE( str); + return str; +} + + /* singleton method: NArray.refer( other ) */ static VALUE na_s_refer(VALUE klass, VALUE self) @@ -1227,6 +1247,7 @@ rb_define_method(cNArray, "to_binary", na_to_binary, 0); rb_define_method(cNArray, "to_type_as_binary", na_to_type_as_binary, 1); rb_define_method(cNArray, "to_string", na_to_string, 0); + rb_define_method(cNArray, "buffer", na_buffer, 0); /*mask*/ rb_define_method(cNArray, "count_false", na_count_false, 0); rb_define_method(cNArray, "count_true", na_count_true, 0);