
Davor Ocelic, <docelic@spinlocksolutions.com>
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);
