From 2873361069dc2f8c793875316a0a2c9b8fa54761 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Mon, 27 Dec 2010 04:23:34 +0000 Subject: fiber/io: avoid allocating Range objects for slicing It's slightly faster this way, but string slicing sucks anyways :< --- lib/rainbows/fiber/io.rb | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'lib/rainbows/fiber') diff --git a/lib/rainbows/fiber/io.rb b/lib/rainbows/fiber/io.rb index 94996ee..6c3d91c 100644 --- a/lib/rainbows/fiber/io.rb +++ b/lib/rainbows/fiber/io.rb @@ -59,19 +59,17 @@ class Rainbows::Fiber::IO else begin (rv = @to_io.write_nonblock(buf)) == buf.bytesize and return - buf = byte_slice(buf, rv..-1) + buf = byte_slice(buf, rv) rescue Errno::EAGAIN kgio_wait_writable end while true end end - def byte_slice(buf, range) # :nodoc: - if buf.encoding != Encoding::BINARY - buf.dup.force_encoding(Encoding::BINARY)[range] - else - buf[range] - end + def byte_slice(buf, start) # :nodoc: + buf.encoding == Encoding::BINARY or + buf = buf.dup.force_encoding(Encoding::BINARY) + buf.slice(start, buf.size) end # used for reading headers (respecting keepalive_timeout) -- cgit v1.2.3-24-ge0c7