本文整理汇总了PHP中SplPriorityQueue::valid方法的典型用法代码示例。如果您正苦于以下问题:PHP SplPriorityQueue::valid方法的具体用法?PHP SplPriorityQueue::valid怎么用?PHP SplPriorityQueue::valid使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SplPriorityQueue
的用法示例。
在下文中一共展示了SplPriorityQueue::valid方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: calculate_score
function calculate_score()
{
global $score_board;
global $TOTAL_P_SCORE;
global $score_P_ratio;
$qCur = new SplPriorityQueue();
$qExpire = new SplPriorityQueue();
$total_p_score = $TOTAL_P_SCORE;
$multiplier = 0.01;
$qCur->setExtractFlags(SplPriorityQueue::EXTR_DATA);
$qExpire->setExtractFlags(SplPriorityQueue::EXTR_DATA);
foreach ($score_board as $k => $r) {
///// f_score
if (IsValidScoreboardEntry($k)) {
$score_board[$k]["func"] = $score_board[$k]["check_pattern"] * pow(0.9, $score_board[$k]["mem_error"]);
if ($score_board[$k]["mem_heap"] > 0) {
$score_board[$k]["func"] *= ($score_board[$k]["mem_heap"] - $score_board[$k]["heap_lost"]) / $score_board[$k]["mem_heap"];
}
if ($r["priority"] > 0) {
$qCur->insert($k, $r["priority"]);
}
} else {
$score_board[$k]["func"] = 0;
}
////// init p_score
$score_board[$k]["p_score"] = 0;
}
while ($qCur->valid() && $total_p_score > 0) {
while ($qCur->valid()) {
$idx = $qCur->extract();
$s = $score_board[$idx]["priority"] * $multiplier;
// alloted score in the scheduling cycle
if ($s > 100 - $score_board[$idx]["p_score"]) {
$s = 100 - $score_board[$idx]["p_score"];
}
$score_board[$idx]["p_score"] += $s;
$total_p_score -= $s;
if ($score_board[$idx]["p_score"] < 100) {
$qExpire->insert($idx, $score_board[$idx]["priority"]);
}
}
$qCur = $qExpire;
$qExpire = new SplPriorityQueue();
$qExpire->setExtractFlags(SplPriorityQueue::EXTR_DATA);
}
foreach ($score_board as $k => $r) {
$score_board[$k]["score"] = 100 * $score_board[$k]["func"] * (1 - $score_P_ratio + $score_board[$k]["p_score"] * $score_P_ratio / 100);
}
////////sort by score
$tmp = array();
foreach ($score_board as &$ma) {
$tmp[] =& $ma["score"];
}
array_multisort($tmp, SORT_DESC, $score_board);
}
示例2: trigger
/**
* @param string $event
* @param array $params
* @param string $context
*/
public function trigger($event, $params = [], $context = '')
{
if (empty($this->events[$event])) {
return;
}
$queue = new \SplPriorityQueue();
foreach ($this->events[$event] as $index => $action) {
$queue->insert($index, $action['prio']);
}
$queue->top();
while ($queue->valid()) {
$index = $queue->current();
if (!empty($context)) {
$contexts = explode(',', $this->events[$event][$index]['contexts']);
$current_context = false;
foreach ($contexts as $route) {
if (fnmatch(trim($route), $context)) {
$current_context = true;
break;
}
}
} else {
$current_context = true;
}
if ($current_context && is_callable($this->events[$event][$index]['fn'])) {
if (call_user_func_array($this->events[$event][$index]['fn'], $params) === false) {
break;
}
}
$queue->next();
}
}
示例3: apply
public function apply($filter, $value, $args = [])
{
if (!isset($this->filters[$filter])) {
return $value;
}
if (!count($this->filters[$filter])) {
return $this;
}
$queue = new \SplPriorityQueue();
foreach ($this->filters[$filter] as $index => $action) {
$queue->insert($index, $action["prio"]);
}
$queue->top();
while ($queue->valid()) {
$index = $queue->current();
if (is_callable($this->filters[$filter][$index]["fn"])) {
$value = call_user_func_array($this->filters[$filter][$index]["fn"], [$value, $args]);
}
$queue->next();
}
return $value;
}
示例4: cleanup
protected function cleanup(OutputInterface $output)
{
// Recursive directory iterator
$dir_it = function ($dir) {
return new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($dir, \RecursiveDirectoryIterator::SKIP_DOTS), \RecursiveIteratorIterator::CHILD_FIRST);
};
// Recursive directory deletion
$rmdir = function ($dir) use(&$dir_it) {
foreach ($dir_it($dir) as $file) {
if ($file->isLink()) {
unlink($file->getPathname());
} elseif ($file->isDir()) {
rmdir($file->getPathname());
} else {
unlink($file->getPathname());
}
}
rmdir($dir);
};
$further_cleanup_required = FALSE;
$release_folder = $this->getReleaseDirectory();
$distributions = array_keys($this->getConfig('distribution_info'));
// First, release directory cleanup
foreach (new \DirectoryIterator($release_folder) as $file) {
if ($file->isDot() || !$file->isDir() || $file->isLink()) {
continue;
}
// Remove distributions which no longer exist (have been removed from the config file).
if (!in_array($file->getBasename(), $distributions)) {
$rmdir($file->getPathname());
$further_cleanup_required = TRUE;
} else {
// Clean up timestamped release directories within each distribution.
// The number to keep is specified by --dirs
$directories = new \SplPriorityQueue();
foreach (new \DirectoryIterator($file->getPathname()) as $dir) {
if ($dir->isDot() || !$dir->isDir() || $dir->isLink()) {
continue;
}
// Store directories keeping the last modified at the top.
$directories->insert($dir->getPathname(), $dir->getCTime());
}
// No further action is required for this directory.
if ($directories->count() <= $this->dirs) {
continue;
}
$further_cleanup_required = TRUE;
// Timestamped release directories we want to keep
for ($i = 0; $i < $this->dirs; $i++) {
$directories->extract();
}
// Delete all the others
$directories->top();
while ($directories->valid()) {
$dir = $directories->current();
$rmdir($dir);
$directories->next();
}
}
}
// No release directories were removed so no need to do any further cleanup.
// (all other assets should be in use)
if (FALSE == $further_cleanup_required) {
return FALSE;
}
// Get a list of all assets that are in use (in use counts as being linked to
// from a releases directory).
$find_symlinks = function ($dir) use(&$dir_it) {
$active_symlinks = [];
foreach ($dir_it($dir) as $file) {
// Ignore latest folder symlink
if ($file->getBasename() != 'latest' && $file->isLink()) {
$active_symlinks[] = basename($file->getRealPath());
}
}
return array_unique($active_symlinks);
};
// Find all assets that are in use
$active_symlinks = $find_symlinks($release_folder);
// Get a list of all assets that are downloaded
$downloads = [];
$base_download_dir = $this->getBaseDownloadDirectory();
$d_it = new \DirectoryIterator($base_download_dir);
foreach ($d_it as $file) {
if (!$file->isDot() && $file->isDir()) {
$downloads[] = $file->getBasename();
}
}
// Calculate which asset folders need to be removed from the downloads directory.
$to_delete = array_diff($downloads, $active_symlinks);
if (!empty($to_delete)) {
$assets = [];
foreach ($to_delete as $dir) {
$rmdir($base_download_dir . '/' . $dir);
$parts = explode('-', $dir);
if (count($parts) == 5) {
$assets[] = $parts[1] . '-' . $parts[2] . '-' . $parts[3];
} else {
$assets[] = $parts[1] . '-' . $parts[2];
}
//.........这里部分代码省略.........
示例5: trigger
/**
* Trigger event.
* @param String $event
* @param Array $params
* @return Boolean
*/
public function trigger($event, $params = [])
{
if (!isset($this->events[$event])) {
return $this;
}
if (!count($this->events[$event])) {
return $this;
}
$queue = new \SplPriorityQueue();
foreach ($this->events[$event] as $index => $action) {
$queue->insert($index, $action["prio"]);
}
$queue->top();
while ($queue->valid()) {
$index = $queue->current();
if (is_callable($this->events[$event][$index]["fn"])) {
if (call_user_func_array($this->events[$event][$index]["fn"], $params) === false) {
break;
// stop Propagation
}
}
$queue->next();
}
return $this;
}
示例6: valid
/**
* {@inheritdoc}
*/
public function valid()
{
return $this->queue->valid();
}