comparator = $comparator; } public function pop() { if (empty($this->content)) { return null; } return array_shift($this->content); } public function push($elt) { $start = 0; $end = count($this->content); while ($start < $end) { $middle = floor(($start + $end) / 2); $comp = call_user_func($this->comparator, $elt, $this->content[$middle]); if ($comp < 0) { $end = $middle; } else if ($comp > 0) { $start = $middle + 1; } else { array_splice($this->content, $middle, 0, array($elt)); return; } } array_splice($this->content, $start, 0, array($elt)); } public function count() { return count($this->content); } public function iterator() { return PlIteratorUtils::fromArray($this->content, 1, true); } } // vim:set et sw=4 sts=4 sws=4 foldmethod=marker fenc=utf-8: ?>