From d07a2c04c1599fe707831afdd29397cc36e02fa6 Mon Sep 17 00:00:00 2001 From: scott Chacon Date: Tue, 20 Nov 2007 12:07:46 -0800 Subject: added files from the gitrb project, which seems abandoned, but which is great code --- lib/git/raw/internal/mmap.rb | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 lib/git/raw/internal/mmap.rb (limited to 'lib/git/raw/internal/mmap.rb') diff --git a/lib/git/raw/internal/mmap.rb b/lib/git/raw/internal/mmap.rb new file mode 100644 index 0000000..d7390b1 --- /dev/null +++ b/lib/git/raw/internal/mmap.rb @@ -0,0 +1,44 @@ +begin + require 'mmap' +rescue LoadError + +module Git module Raw module Internal + class Mmap + def initialize(file) + @file = file + @offset = nil + end + + def unmap + @file = nil + end + + def [](*idx) + idx = idx[0] if idx.length == 1 + case idx + when Range + offset = idx.first + len = idx.last - idx.first + idx.exclude_end? ? 0 : 1 + when Fixnum + offset = idx + len = nil + when Array + offset, len = idx + else + raise RuntimeError, "invalid index param: #{idx.class}" + end + if @offset != offset + @file.seek(offset) + end + @offset = offset + len ? len : 1 + if not len + @file.read(1)[0] + else + @file.read(len) + end + end + end +end end + +end # rescue LoadError + -- cgit