mirror of https://gitee.com/bigwinds/arangodb
107 lines
1.8 KiB
Ruby
107 lines
1.8 KiB
Ruby
##
|
|
# Array
|
|
#
|
|
# ISO 15.2.12
|
|
class Array
|
|
|
|
##
|
|
# Calls the given block for each element of +self+
|
|
# and pass the respective element.
|
|
#
|
|
# ISO 15.2.12.5.10
|
|
def each(&block)
|
|
idx = 0
|
|
while(idx < length)
|
|
block.call(self[idx])
|
|
idx += 1
|
|
end
|
|
self
|
|
end
|
|
|
|
##
|
|
# Calls the given block for each element of +self+
|
|
# and pass the index of the respective elment.
|
|
#
|
|
# ISO 15.2.12.5.11
|
|
def each_index(&block)
|
|
idx = 0
|
|
while(idx < length)
|
|
block.call(idx)
|
|
idx += 1
|
|
end
|
|
self
|
|
end
|
|
|
|
##
|
|
# Calls the given block for each element of +self+
|
|
# and pass the respective element. Each element will
|
|
# be replaced by the resulting values.
|
|
#
|
|
# ISO 15.2.12.5.7
|
|
def collect!(&block)
|
|
self.each_index{|idx|
|
|
self[idx] = block.call(self[idx])
|
|
}
|
|
self
|
|
end
|
|
|
|
##
|
|
# Alias for collect!
|
|
#
|
|
# ISO 15.2.12.5.20
|
|
alias map! collect!
|
|
|
|
##
|
|
# Private method for Array creation.
|
|
#
|
|
# ISO 15.2.12.5.15
|
|
def initialize(size=0, obj=nil, &block)
|
|
raise TypeError, "expected Integer for 1st argument" unless size.kind_of? Integer
|
|
raise ArgumentError, "negative array size" if size < 0
|
|
|
|
self.clear
|
|
if size > 0
|
|
self[size - 1] = nil # allocate
|
|
|
|
idx = 0
|
|
while(idx < size)
|
|
self[idx] = (block)? block.call(idx): obj
|
|
idx += 1
|
|
end
|
|
end
|
|
|
|
self
|
|
end
|
|
|
|
##
|
|
# Delete element with index +key+
|
|
def delete(key, &block)
|
|
while i = self.index(key)
|
|
self.delete_at(i)
|
|
ret = key
|
|
end
|
|
if ret == nil && block
|
|
block.call
|
|
else
|
|
ret
|
|
end
|
|
end
|
|
end
|
|
|
|
##
|
|
# Array is enumerable and comparable
|
|
module Enumerable; end
|
|
module Comparable; end
|
|
class Array
|
|
# ISO 15.2.12.3
|
|
include Enumerable
|
|
include Comparable
|
|
|
|
##
|
|
# Sort all elements and replace +self+ with these
|
|
# elements.
|
|
def sort!(&block)
|
|
self.replace(self.sort(&block))
|
|
end
|
|
end
|