; docformat = 'rst'
;+
; Read from an URL (with error checking).
;
; :Returns: strarr
; :Params:
; `urlString` : in. required, type=string
; complete URL to query
; :Keywords:
; `error` : out, optional, type=long
; pass a named variable to get the response code: 0 for success,
; anything else indicates a failure
;-
function mgrndrandom::_getData, urlString, error=error
compile_opt strictarr
error = 0L
catch, error
if (error ne 0L) then begin
catch, /cancel
self.url->getProperty, response_code=error
return, ''
endif
return, self.url->get(url=urlString, /string_array)
end
;+
; Returns a permutation of the given range of integers.
;
; :Returns: lonarr
; :Keywords:
; `minimum` : in, optional, type=long, default=0
; minimum value of returned integers
; `maximum` : in, optional, type=long, default=100
; maximum value of returned integers
; `error` : out, optional, type=long
; pass a named variable to get the response code: 0 for success,
; anything else indicates a failure
;-
function mgrndrandom::getSequence, minimum=minimum, maximum=maximum, $
error=error
compile_opt strictarr
myMinimum = n_elements(minimum) eq 0 ? 0 : minimum
myMaximum = n_elements(maximum) eq 0 ? 100 : maximum
urlString = self.randomURL $
+ '/sequences/?' $
+ 'min=' + strtrim(myMinimum, 2) $
+ '&max=' + strtrim(myMaximum, 2) $
+ '&format=plain&rnd=new'
result = self->_getData(urlString, error=error)
return, long(result)
end
;+
; Return the given number of random integers (with repetition).
;
; :Returns: lonarr
; :Params:
; `number` : in, required, type=long
; number of random numbers to generate
; :Keywords:
; `minimum` : in, optional, type=long, default=0
; minimum value of returned integers
; `maximum` : in, optional, type=long, default=100
; maximum value of returned integers
; `error` : out, optional, type=long
; pass a named variable to get the response code: 0 for success,
; anything else indicates a failure
;-
function mgrndrandom::getIntegers, number, minimum=minimum, maximum=maximum, $
error=error
compile_opt strictarr
on_error, 2
if (n_elements(number) eq 0) then begin
message, 'number parameter required'
endif
myMinimum = n_elements(minimum) eq 0 ? 0 : minimum
myMaximum = n_elements(maximum) eq 0 ? 100 : maximum
urlString = self.randomURL $
+ '/integers/?' $
+ 'num=' + strtrim(number, 2) $
+ '&min=' + strtrim(myMinimum, 2) $
+ '&max=' + strtrim(myMaximum, 2) $
+ '&col=1&base=10&format=plain&rnd=new'
result = self->_getData(urlString, error=error)
return, long(result)
end
;+
; Free resources.
;-
pro mgrndrandom::cleanup
compile_opt strictarr
obj_destroy, self.url
end
;+
; Creates a random number generator.
;
; :Returns: 1 if success, 0 if failure
;-
function mgrndrandom::init
compile_opt strictarr
self.url = obj_new('IDLnetURL')
self.randomURL = 'http://random.org'
return, 1
end
;+
; :Fields:
; `randomURL` URL of the random.org website which generates the random
; numbers
;-
pro mgrndrandom__define
compile_opt strictarr
define = { MGrndRandom, $
url: obj_new(), $
randomURL: '' $
}
end