From: Etienne Kneuss Date: Thu, 15 May 2008 17:05:20 +0000 (+0000) Subject: Implement SplPriorityQueue::getExtractFlags() X-Git-Tag: BEFORE_HEAD_NS_CHANGE~1754 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=db0e4fac8b5dfc4457c960836f892ba19986bf3a;p=php Implement SplPriorityQueue::getExtractFlags() --- diff --git a/ext/spl/spl_heap.c b/ext/spl/spl_heap.c index 862bc11422..b6551a33cb 100644 --- a/ext/spl/spl_heap.c +++ b/ext/spl/spl_heap.c @@ -737,7 +737,7 @@ SPL_METHOD(SplPriorityQueue, top) } /* }}} */ -/* {{{ proto int SplPriorityQueue::setIteratorMode($flags) U +/* {{{ proto int SplPriorityQueue::setExtractFlags($flags) U Set the flags of extraction*/ SPL_METHOD(SplPriorityQueue, setExtractFlags) { @@ -755,6 +755,22 @@ SPL_METHOD(SplPriorityQueue, setExtractFlags) RETURN_LONG(intern->flags); } /* }}} */ +/* {{{ proto int SplPriorityQueue::getExtractFlags($flags) U + Set the flags of extraction*/ +SPL_METHOD(SplPriorityQueue, getExtractFlags) +{ + long value; + spl_heap_object *intern; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) { + return; + } + + intern = (spl_heap_object*)zend_object_store_get_object(getThis() TSRMLS_CC); + + RETURN_LONG(intern->flags & SPL_PQUEUE_EXTR_MASK;); +} +/* }}} */ /* {{{ proto int SplHeap::recoverFromCorruption() U Recover from a corrupted state*/ @@ -1119,6 +1135,7 @@ static const zend_function_entry spl_funcs_SplPriorityQueue[] = { SPL_ME(SplPriorityQueue, compare, arginfo_heap_compare, ZEND_ACC_PUBLIC) SPL_ME(SplPriorityQueue, insert, arginfo_pqueue_insert, ZEND_ACC_PUBLIC) SPL_ME(SplPriorityQueue, setExtractFlags, arginfo_pqueue_setflags, ZEND_ACC_PUBLIC) + SPL_ME(SplPriorityQueue, getExtractFlags, NULL, ZEND_ACC_PUBLIC) SPL_ME(SplPriorityQueue, top, NULL, ZEND_ACC_PUBLIC) SPL_ME(SplPriorityQueue, extract, NULL, ZEND_ACC_PUBLIC) SPL_ME(SplHeap, count, NULL, ZEND_ACC_PUBLIC) diff --git a/ext/spl/tests/pqueue_001.phpt b/ext/spl/tests/pqueue_001.phpt index 8dae2ef510..1384132412 100644 --- a/ext/spl/tests/pqueue_001.phpt +++ b/ext/spl/tests/pqueue_001.phpt @@ -5,6 +5,7 @@ SPL: SplPriorityQueue: std operations and extract flags --FILE-- getExtractFlags()."\n"; // errors try { @@ -25,6 +26,7 @@ echo "EXTR_BOTH\n"; $pq1 = new SplPriorityQueue(); $pq1->setExtractFlags(SplPriorityQueue::EXTR_BOTH); +echo $pq1->getExtractFlags()."\n"; $pq1->insert("a", 1); $pq1->insert("b", 2); @@ -38,6 +40,7 @@ echo "EXTR_DATA\n"; $pq2 = new SplPriorityQueue(); $pq2->setExtractFlags(SplPriorityQueue::EXTR_DATA); +echo $pq2->getExtractFlags()."\n"; $pq2->insert("a", 1); $pq2->insert("b", 2); @@ -51,6 +54,7 @@ echo "EXTR_PRIORITY\n"; $pq3 = new SplPriorityQueue(); $pq3->setExtractFlags(SplPriorityQueue::EXTR_PRIORITY); +echo $pq3->getExtractFlags()."\n"; $pq3->insert("a", 1); $pq3->insert("b", 2); @@ -64,11 +68,13 @@ foreach ($pq3 as $k=>$v) { ===DONE=== --EXPECTF-- +1 Exception: Can't extract from an empty heap 3=>b 2=>a 1=>c EXTR_BOTH +3 3=>Array ( [data] => b @@ -88,10 +94,12 @@ EXTR_BOTH ) EXTR_DATA +1 3=>b 2=>a 1=>c EXTR_PRIORITY +2 3=>2 2=>1 1=>0