Finish rubifying MemoryBuffer and FramedTransport


git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@668992 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/rb/lib/thrift/transport.rb b/lib/rb/lib/thrift/transport.rb
index 7dd663a..d1792f7 100644
--- a/lib/rb/lib/thrift/transport.rb
+++ b/lib/rb/lib/thrift/transport.rb
@@ -141,10 +141,7 @@
 
       read_frame if @rbuf.empty?
 
-      # return full buf
-      out = @rbuf.slice(0...sz)
-      @rbuf = @rbuf.slice(sz..-1) || ''
-      out
+      @rbuf.slice!(0, sz)
     end
 
     def write(buf,sz=nil)
@@ -172,7 +169,7 @@
     def read_frame
       sz = @transport.read_all(4).unpack('N').first
 
-      @rbuf = @transport.read_all(sz)
+      @rbuf = @transport.read_all(sz).dup # protect against later #slice!
     end
   end
   deprecate_class! :TFramedTransport => FramedTransport
@@ -185,11 +182,8 @@
   deprecate_class! :TFramedTransportFactory => FramedTransportFactory
 
   class MemoryBuffer < Transport
-    def initialize(sz=1024)
+    def initialize
       @buf = ''
-      @sz  = sz
-      @wpos = 0
-      @rpos = 0
     end
 
     def open?
@@ -203,39 +197,23 @@
     end
 
     def peek
-      return @rpos < @wpos
+      not @buf.empty?
     end
 
     def reset_buffer(new_buf = '')
-       @buf  = new_buf
-       @sz   = new_buf.length
-       @wpos = new_buf.length
-       @rpos = 0
+      @buf.replace new_buf
     end
 
     def available
-      return @wpos - @rpos
+      @buf.length
     end
 
     def read(len)
-      avail = available
-
-      return '' if avail == 0
-
-      #how much to give
-      give = len
-      give = avail if avail < len
-
-      ret = @buf.slice(@rpos,give)
-
-      @rpos += give;
-
-      return ret;
+      @buf.slice!(0, len)
     end
 
     def write(wbuf)
-      @buf  << wbuf
-      @wpos += wbuf.length
+      @buf << wbuf
     end
 
     def flush