/*
* call-seq:
* dvector.fill(number) -> dvector
* dvector.fill(number, start <, length>) -> dvector
* dvector.fill(number, range ) -> dvector
* dvector.fill {|index| block } -> dvector
* dvector.fill(start <, length> ) {|index| block } -> dvector
* dvector.fill(range) {|index| block } -> dvector
*
* The first three forms set the selected elements of _dvector_ (which
* may be the entire vector) to <i>number</i>. A <i>start</i> of
* <code>nil</code> is equivalent to zero. A <i>length</i> of
* <code>nil</code> is equivalent to _dvector_.<code>length</code>. The last three
* forms fill the vector with the value of the block. The block is
* passed the absolute index of each element to be filled.
*
* a = Dvector[ 1, 2, 3, 4, 5 ]
* a.fill(-1) -> Dvector[ -1, -1, -1, -1, -1 ]
* a.fill(7, 2, 2) -> Dvector[ -1, -1, 7, 7, -1 ]
* a.fill(8, 0..1) -> Dvector[ 8, 8, 7, 7, -1 ]
* a.fill {|i| i*i} -> Dvector[ 0, 1, 4, 9, 16 ]
* a.fill(-2) {|i| i*i*i} -> Dvector[ 0, 1, 4, 27, 64 ]
* a -> Dvector[ 0, 1, 4, 27, 64 ]
*/
VALUE dvector_fill(int argc, VALUE *argv, VALUE ary) {