Method: Immutable::Vector#fill

Defined in:
lib/immutable/vector.rb

#fill(object) ⇒ Vector #fill(object, index) ⇒ Vector #fill(object, index, length) ⇒ Vector

Replace a range of indexes with the given object.

Overloads:

  • #fill(object) ⇒ Vector

    Return a new Vector of the same size, with every index set to object.

    Examples:

    Immutable::Vector["A", "B", "C", "D", "E", "F"].fill("Z")
    # => Immutable::Vector["Z", "Z", "Z", "Z", "Z", "Z"]

    Parameters:

    • object (Object)

      Fill value.

  • #fill(object, index) ⇒ Vector

    Return a new Vector with all indexes from index to the end of the vector set to object.

    Examples:

    Immutable::Vector["A", "B", "C", "D", "E", "F"].fill("Z", 3)
    # => Immutable::Vector["A", "B", "C", "Z", "Z", "Z"]

    Parameters:

    • object (Object)

      Fill value.

    • index (Integer)

      Starting index. May be negative.

  • #fill(object, index, length) ⇒ Vector

    Return a new Vector with length indexes, beginning from index, set to object. Expands the Vector if length would extend beyond the current length.

    Examples:

    Immutable::Vector["A", "B", "C", "D", "E", "F"].fill("Z", 3, 2)
    # => Immutable::Vector["A", "B", "C", "Z", "Z", "F"]
    Immutable::Vector["A", "B"].fill("Z", 1, 5)
    # => Immutable::Vector["A", "Z", "Z", "Z", "Z", "Z"]

    Parameters:

    • object (Object)

      Fill value.

    • index (Integer)

      Starting index. May be negative.

    • length (Integer)

Returns:

Raises:

  • (IndexError)

    if index is out of negative range.



812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
# File 'lib/immutable/vector.rb', line 812

def fill(object, index = 0, length = nil)
  raise IndexError if index < -@size
  index += @size if index < 0
  length ||= @size - index # to the end of the array, if no length given

  if index < @size
    suffix = flatten_suffix(@root, @levels * BITS_PER_LEVEL, index, [])
    suffix.fill(object, 0, length)
  elsif index == @size
    suffix = Array.new(length, object)
  else
    suffix = Array.new(index - @size, nil).concat(Array.new(length, object))
    index = @size
  end

  replace_suffix(index, suffix)
end