/* * call-seq: * dvector[int] -> number or nil * dvector[start, length] -> dvector or nil * dvector[range] -> dvector or nil * dvector.slice(index) -> number or nil * dvector.slice(start, length) -> dvector or nil * dvector.slice(range) -> dvector or nil * * Element Reference---Returns the element at index _int_, * or returns a subvector starting at _start_ and * continuing for _length_ elements, or returns a subvector * specified by _range_. * Negative indices count backward from the end of the * vector (-1 is the last element). Returns <code>nil</code> if the index * (or starting index) are out of range. If the start index equals the * vector size and a _length_ or _range_ parameter is given, an * empty vector is returned. * * a = Dvector[ 1, 2, 3, 4, 5 ] * a[2] + a[0] + a[1] -> 6 * a[6] -> nil * a[1, 2] -> Dvector[ 2, 3 ] * a[1..3] -> Dvector[ 2, 3, 4 ] * a[4..7] -> Dvector[ 5 ] * a[6..10] -> nil * a[-3, 3] -> Dvector[ 3, 4, 5 ] * # special cases * a[5] -> nil * a[5, 1] -> Dvector[] * a[5..10] -> Dvector[] * */ VALUE dvector_aref(int argc, VALUE *argv, VALUE ary) {