2008-01-01 18:07:13 +00:00
|
|
|
<?php
|
2008-08-05 22:43:14 +00:00
|
|
|
// This file is part of BOINC.
|
|
|
|
// http://boinc.berkeley.edu
|
|
|
|
// Copyright (C) 2008 University of California
|
|
|
|
//
|
|
|
|
// BOINC is free software; you can redistribute it and/or modify it
|
|
|
|
// under the terms of the GNU Lesser General Public License
|
|
|
|
// as published by the Free Software Foundation,
|
|
|
|
// either version 3 of the License, or (at your option) any later version.
|
|
|
|
//
|
|
|
|
// BOINC is distributed in the hope that it will be useful,
|
|
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
// See the GNU Lesser General Public License for more details.
|
|
|
|
//
|
|
|
|
// You should have received a copy of the GNU Lesser General Public License
|
|
|
|
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
|
2008-01-01 18:07:13 +00:00
|
|
|
|
2008-01-28 22:42:05 +00:00
|
|
|
class BoltRandom extends BoltSet {
|
2008-01-01 18:07:13 +00:00
|
|
|
public $units;
|
2008-10-27 21:30:55 +00:00
|
|
|
function __construct($name, $units, $number, $attrs) {
|
|
|
|
parent::__construct($name, $units, $number, $attrs);
|
2008-01-01 18:07:13 +00:00
|
|
|
}
|
|
|
|
|
2008-02-07 23:21:31 +00:00
|
|
|
function order(&$iter) {
|
|
|
|
$state_rec = $iter->state[$this->name];
|
2008-01-28 22:42:05 +00:00
|
|
|
if ($state_rec) {
|
2008-02-07 23:21:31 +00:00
|
|
|
if (array_key_exists('seed', $state_rec)) {
|
|
|
|
$seed = $state_rec['seed'];
|
|
|
|
} else {
|
|
|
|
$seed = ((double)microtime()*1000000);
|
|
|
|
$state_rec['seed'] = $seed;
|
|
|
|
$iter->state[$this->name] = $state_rec;
|
|
|
|
}
|
2008-01-01 18:07:13 +00:00
|
|
|
} else {
|
2008-02-07 23:21:31 +00:00
|
|
|
$state_rec = $this->init();
|
2008-01-01 18:07:13 +00:00
|
|
|
$seed = ((double)microtime()*1000000);
|
|
|
|
$state_rec['seed'] = $seed;
|
2008-02-07 23:21:31 +00:00
|
|
|
$iter->state[$this->name] = $state_rec;
|
2008-01-01 18:07:13 +00:00
|
|
|
}
|
2008-01-28 22:42:05 +00:00
|
|
|
srand($seed);
|
|
|
|
shuffle($this->units);
|
2008-02-07 23:21:31 +00:00
|
|
|
$this->ordered = true;
|
2008-01-01 18:07:13 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function random() {
|
|
|
|
$args = func_get_args();
|
|
|
|
$units = array();
|
|
|
|
$name = "";
|
2008-08-14 21:05:02 +00:00
|
|
|
$number = 0;
|
2010-11-04 18:20:57 +00:00
|
|
|
$attrs = null;
|
2008-01-01 18:07:13 +00:00
|
|
|
foreach ($args as $arg) {
|
|
|
|
if (is_array($arg)) {
|
|
|
|
switch ($arg[0]) {
|
|
|
|
case 'name': $name = $arg[1]; break;
|
|
|
|
case 'title': $title = $arg[1]; break;
|
|
|
|
case 'number': $number = $arg[1]; break;
|
2008-10-27 21:30:55 +00:00
|
|
|
case 'attrs': $attrs = $arg[1]; break;
|
2008-01-01 18:07:13 +00:00
|
|
|
default: echo "Unrecognized array arg: ", $arg[0], "\n"; break;
|
|
|
|
}
|
|
|
|
} else if (is_object($arg)) {
|
|
|
|
if (is_subclass_of($arg, "BoltUnit")) {
|
|
|
|
$units[] = $arg;
|
|
|
|
} else {
|
|
|
|
echo "Unrecognized arg: ";
|
|
|
|
print_r($arg);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2008-08-14 21:05:02 +00:00
|
|
|
if ($number == 0) $number = count($units);
|
2008-10-27 21:30:55 +00:00
|
|
|
return new BoltRandom($name, $units, $number, $attrs);
|
2008-01-01 18:07:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
?>
|