def delete_at(index)
      node = self
      deleted_value = nil

      while node do
        if node.is_leaf?
          deleted_value = node.values.delete_at(index)
          if node.parent
            node.parent.adjust_offsets(node, -1)
            if node.size < min_size
              node.parent.consolidate_child_nodes(node)
            end
          end

          return deleted_value
        else
          # Descend into the right child node to add the value to.
          cidx = (node.offsets.bsearch_index { |o| o > index } ||
                  node.offsets.length) - 1
          if (index -= node.offsets[cidx]) < 0
            node.fatal "Index (#{index}) became negative"
          end
          node = node.children[cidx]
        end
      end

      PEROBS.log.fatal "Could not find proper node to delete from while " +
        "looking for index #{index}"
    end
def delete_at(index)
      node = self
      deleted_value = nil

      while node do
        if node.is_leaf?
          deleted_value = node.values.delete_at(index)
          if node.parent
            node.parent.adjust_offsets(node, -1)
            if node.size < min_size
              node.parent.consolidate_child_nodes(node)
            end
          end

          return deleted_value
        else
          # Descend into the right child node to add the value to.
          cidx = (node.offsets.bsearch_index { |o| o > index } ||
                  node.offsets.length) - 1
          if (index -= node.offsets[cidx]) < 0
            node.fatal "Index (#{index}) became negative"
          end
          node = node.children[cidx]
        end
      end

      PEROBS.log.fatal "Could not find proper node to delete from while " +
        "looking for index #{index}"
    end
Delete the element at the specified index, returning that element, or
 nil if the index is out of range.
 @param index [Integer] Index in the BigArray
 @return [Object] found value or nil