Merge pull request #1046 from monaka/pr-add-configuration-macro-MRB_PARSER_BUF_SIZE
[mruby.git] / mrbgems / mruby-array-ext / mrblib / array.rb
index 83eaaa3..b3ff9bf 100644 (file)
@@ -6,11 +6,17 @@ class Array
       result << ary.shift
       ary.delete(result.last)
     end
-    self.replace(result)
+    if result.size == self.size
+      nil
+    else
+      self.replace(result)
+    end
   end
 
   def uniq
-    self.dup.uniq!
+    ary = self.dup
+    ary.uniq!
+    ary
   end
 
   def -(elem)
@@ -26,7 +32,8 @@ class Array
   def |(elem)
     raise TypeError, "can't convert to Array" unless elem.class == Array
 
-    (self + elem).uniq!
+    ary = self + elem
+    ary.uniq! or ary
   end
 
   def &(elem)
@@ -56,8 +63,22 @@ class Array
     ar
   end
 
-  def flatten!
-    self.replace(self.flatten)
+  def flatten!(depth=nil)
+    modified = false
+    ar = []
+    self.each do |e|
+      if e.is_a?(Array) && (depth.nil? || depth > 0)
+        ar += e.flatten(depth.nil? ? nil : depth - 1)
+        modified = true
+      else
+        ar << e
+      end
+    end
+    if modified
+      self.replace(ar)
+    else
+      nil
+    end
   end
 
   def compact
@@ -68,6 +89,10 @@ class Array
 
   def compact!
     result = self.select { |e| e != nil }
-    self.replace(result)
+    if result.size == self.size
+      nil
+    else
+      self.replace(result)
+    end
   end
 end