; docformat = 'rst'
;+
; Create an array ranging from the `startValue` and stopping before the
; `stopValue`.
;
; :Examples:
; See the examples in the main-level program at the end of this file::
;
; IDL> print, mg_makerange(0, 10)
; 0.0000000 1.0000000 2.0000000 3.0000000
; 4.0000000 5.0000000 6.0000000 7.0000000
; 8.0000000 9.0000000 10.0000000
; IDL> print, mg_makerange(0, 10, n=5)
; 0.0000000 2.5000000 5.0000000 7.5000000
; 10.0000000
; IDL> print, mg_makerange(0, 10, increment=0.5)
; 0.0000000 0.5000000 1.0000000 1.5000000
; 2.0000000 2.5000000 3.0000000 3.5000000
; 4.0000000 4.5000000 5.0000000 5.5000000
; 6.0000000 6.5000000 7.0000000 7.5000000
; 8.0000000 8.5000000 9.0000000 9.5000000
; 10.0000000
;
; :Returns:
; `fltarr`
;
; :Params:
; startValue : in, required, type=float
; first value of the output array
; stopValue : in, required, type=float
; largest possible value for the last value of the output array
;
; :Keywords:
; n : in, optional, type=long
; number of elements in the output array; if not set, it is calculated
; from `INCREMENT`
; count : out, optional, type=long
; set to a named variable to return the number of elements in the
; returned array, i.e., `N` if `N` is used
; increment : in, optional, type=float, default=1.0
; if `N` is not set, then `INCREMENT` is used to compute `N`
;-
function mg_makerange, startValue, stopValue, increment=increment, n=n, $
count=count
compile_opt strictarr
_increment = n_elements(increment) gt 0L ? increment : 1.0
if (n_elements(n) gt 0L) then begin
count = long(n)
return, startValue + findgen(n) / (n - 1L) * (stopValue - startValue)
endif else begin
count = long((stopValue - startValue) / _increment + 1L)
return, startValue + findgen(count) * _increment
endelse
end
; main-level examples
print, mg_makerange(0, 10)
print, mg_makerange(0, 10, n=5)
print, mg_makerange(0, 10, increment=0.5)
print, mg_makerange(0., 10., increment=0.1, count=count)
end