diff options
author | Nicolas LÅ“uillet <nicolas@loeuillet.org> | 2014-02-21 15:57:10 +0100 |
---|---|---|
committer | Nicolas LÅ“uillet <nicolas@loeuillet.org> | 2014-02-21 15:57:10 +0100 |
commit | 99679d06884120c57f43b44e55e03595f1f87bed (patch) | |
tree | a3f2a1aa1afdaeca1386d0c6e8a75344fd2241fb /inc/3rdparty/htmlpurifier/HTMLPurifier/Queue.php | |
parent | 655214ab30ee84884dc408488b85586f36263fcb (diff) | |
parent | d3b47e94705e17b3ba3529cbb1dc6efe69c5d2b7 (diff) | |
download | wallabag-99679d06884120c57f43b44e55e03595f1f87bed.tar.gz wallabag-99679d06884120c57f43b44e55e03595f1f87bed.tar.zst wallabag-99679d06884120c57f43b44e55e03595f1f87bed.zip |
Merge pull request #481 from wallabag/dev1.5.2
1.5.2
Diffstat (limited to 'inc/3rdparty/htmlpurifier/HTMLPurifier/Queue.php')
-rw-r--r-- | inc/3rdparty/htmlpurifier/HTMLPurifier/Queue.php | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/inc/3rdparty/htmlpurifier/HTMLPurifier/Queue.php b/inc/3rdparty/htmlpurifier/HTMLPurifier/Queue.php new file mode 100644 index 00000000..a75894d4 --- /dev/null +++ b/inc/3rdparty/htmlpurifier/HTMLPurifier/Queue.php | |||
@@ -0,0 +1,56 @@ | |||
1 | <?php | ||
2 | |||
3 | /** | ||
4 | * A simple array-backed queue, based off of the classic Okasaki | ||
5 | * persistent amortized queue. The basic idea is to maintain two | ||
6 | * stacks: an input stack and an output stack. When the output | ||
7 | * stack runs out, reverse the input stack and use it as the output | ||
8 | * stack. | ||
9 | * | ||
10 | * We don't use the SPL implementation because it's only supported | ||
11 | * on PHP 5.3 and later. | ||
12 | * | ||
13 | * Exercise: Prove that push/pop on this queue take amortized O(1) time. | ||
14 | * | ||
15 | * Exercise: Extend this queue to be a deque, while preserving amortized | ||
16 | * O(1) time. Some care must be taken on rebalancing to avoid quadratic | ||
17 | * behaviour caused by repeatedly shuffling data from the input stack | ||
18 | * to the output stack and back. | ||
19 | */ | ||
20 | class HTMLPurifier_Queue { | ||
21 | private $input; | ||
22 | private $output; | ||
23 | |||
24 | public function __construct($input = array()) { | ||
25 | $this->input = $input; | ||
26 | $this->output = array(); | ||
27 | } | ||
28 | |||
29 | /** | ||
30 | * Shifts an element off the front of the queue. | ||
31 | */ | ||
32 | public function shift() { | ||
33 | if (empty($this->output)) { | ||
34 | $this->output = array_reverse($this->input); | ||
35 | $this->input = array(); | ||
36 | } | ||
37 | if (empty($this->output)) { | ||
38 | return NULL; | ||
39 | } | ||
40 | return array_pop($this->output); | ||
41 | } | ||
42 | |||
43 | /** | ||
44 | * Pushes an element onto the front of the queue. | ||
45 | */ | ||
46 | public function push($x) { | ||
47 | array_push($this->input, $x); | ||
48 | } | ||
49 | |||
50 | /** | ||
51 | * Checks if it's empty. | ||
52 | */ | ||
53 | public function isEmpty() { | ||
54 | return empty($this->input) && empty($this->output); | ||
55 | } | ||
56 | } | ||