summaryrefslogtreecommitdiff
path: root/jni/ruby/lib/rubygems/util
diff options
context:
space:
mode:
Diffstat (limited to 'jni/ruby/lib/rubygems/util')
-rw-r--r--jni/ruby/lib/rubygems/util/list.rb48
-rw-r--r--jni/ruby/lib/rubygems/util/stringio.rb34
2 files changed, 82 insertions, 0 deletions
diff --git a/jni/ruby/lib/rubygems/util/list.rb b/jni/ruby/lib/rubygems/util/list.rb
new file mode 100644
index 0000000..9bc11fe
--- /dev/null
+++ b/jni/ruby/lib/rubygems/util/list.rb
@@ -0,0 +1,48 @@
+module Gem
+ List = Struct.new(:value, :tail)
+
+ class List
+ def each
+ n = self
+ while n
+ yield n.value
+ n = n.tail
+ end
+ end
+
+ def to_a
+ ary = []
+ n = self
+ while n
+ ary.unshift n.value
+ n = n.tail
+ end
+
+ ary
+ end
+
+ def find
+ n = self
+ while n
+ v = n.value
+ return v if yield(v)
+ n = n.tail
+ end
+
+ nil
+ end
+
+ def prepend(value)
+ List.new value, self
+ end
+
+ def pretty_print q # :nodoc:
+ q.pp to_a
+ end
+
+ def self.prepend(list, value)
+ return List.new(value) unless list
+ List.new value, list
+ end
+ end
+end
diff --git a/jni/ruby/lib/rubygems/util/stringio.rb b/jni/ruby/lib/rubygems/util/stringio.rb
new file mode 100644
index 0000000..2ea6961
--- /dev/null
+++ b/jni/ruby/lib/rubygems/util/stringio.rb
@@ -0,0 +1,34 @@
+class Gem::StringSink
+ def initialize
+ @string = ""
+ end
+
+ attr_reader :string
+
+ def write(s)
+ @string += s
+ s.size
+ end
+
+ def set_encoding(enc)
+ @string.force_encoding enc
+ end
+end
+
+class Gem::StringSource
+ def initialize(str)
+ @string = str.dup
+ end
+
+ def read(count=nil)
+ if count
+ @string.slice!(0,count)
+ else
+ s = @string
+ @string = ""
+ s
+ end
+ end
+
+ alias_method :readpartial, :read
+end