/** * Lazily append the next iterator to the chain */ private function lazyAppend() { if (!parent::valid() and $this->iterators->valid()) { $this->append($this->iterators->current()); $this->iterators->next(); } }
/** * Overrides valid function from parent iterator class to append new iterators on the fly * once the previous one reached its end. * * @return boolean true if there's still more results to be fetched, flase otherwise **/ public function valid() { $valid = parent::valid(); if (!$valid && $this->_current < $this->_totalPages) { $from = $this->_current * $this->_pageSize; $query = array('scroll_id' => $this->_scrollId, 'from' => $from, 'size' => $this->_pageSize); $this->append(new ElasticCursor($this->_source, compact('query') + $this->_options)); $this->_current++; $valid = true; } return $valid; }
protected function _eachGetIterator($method, $arg1 = NULL, $arg2 = NULL, $arg3 = NULL) { $it = new \AppendIterator(); $arr = array(); foreach ($this as $el) { $tmp = $el->{$method}($arg1, $arg2, $arg3); if ($tmp instanceof \Iterator) { $it->append($tmp); } else { $arr[] = $tmp; } } if (!empty($arr)) { $it->append(new \ArrayIterator($arr)); } if ($it->valid()) { return new QuipXmlElementIterator($it); } return $this->{'no results'}; }
function valid() { echo __METHOD__ . "\n"; return parent::valid(); }
<?php $a = new AppendIterator(); $a1 = new ArrayIterator([]); $a2 = new ArrayIterator([1, 2, 3]); $a->append($a1); $a->append($a2); var_dump($a->valid()); var_dump($a->current()); var_dump($a->getIteratorIndex()); // go to the end for ($a->rewind(); $a->valid(); $a->next()) { } $a->append(new ArrayIterator([])); $a->append(new ArrayIterator([4, 5, 6])); var_dump($a->valid()); var_dump($a->current()); var_dump($a->getIteratorIndex());
public function next() { $this->current = NULL; if (count($this->currentFileClasses) > 0) { $this->current = array_shift($this->currentFileClasses); return; } do { $file = $this->fileIterator->current(); if ($this->fileIterator->valid()) { $this->fileIterator->next(); } } while ($file && (!$file->isFile() || isset($this->inspectedFiles[$file->getRealPath()]) || !$this->filter->accept($file))); if ($file === NULL) { return; } $this->inspectedFiles[$file->getRealPath()] = TRUE; // We add a new line to the code so that the tokeniser will give us a // last token item for classes that end on the last line of a file // without any trailing white space. $tokens = token_get_all(@file_get_contents($file->getRealPath()) . PHP_EOL); $depth = -1; $className = NULL; $startLine = NULL; $endLine = NULL; $isInterface = FALSE; $dependancys = array(); $getDep = FALSE; reset($tokens); do { $token = current($tokens); switch ($depth) { case -1: if (!is_string($token)) { list($token, $text, $line) = $token; switch ($token) { case T_INTERFACE: $isInterface = TRUE; case T_CLASS: $depth = 0; $startLine = $line; $endLine = NULL; break; } } break; case 0: list($token, $text) = $token; switch ($token) { case T_STRING: $className = $text; $depth = 1; break; } break; case 1: if (is_string($token)) { if ($token == '{') { $depth = 3; } } else { list($token, $text) = $token; switch ($token) { case T_EXTENDS: $getDep = TRUE; break; case T_IMPLEMENTS: $getDep = TRUE; break; case T_STRING: if ($getDep) { $dependancys[] = $text; } break; case T_WHITESPACE: break; default: $getDep = FALSE; break; } } break; default: if (is_string($token)) { switch ($token) { case '{': $depth++; break; case '}': $depth--; break; } } else { list($token, $text, $endLine) = $token; switch ($token) { case T_CURLY_OPEN: case T_DOLLAR_OPEN_CURLY_BRACES: $depth++; break; } if ($depth == 2) { $depth = -1; prev($tokens); $class = new cfhCompile_Class_Manual($className, $file->getRealPath(), $startLine, $endLine, $isInterface, new ArrayIterator($dependancys)); array_push($this->currentFileClasses, $class); $className = NULL; $startLine = NULL; $endLine = NULL; $isInterface = FALSE; $dependancys = array(); $getDep = FALSE; } } break; } } while (next($tokens)); $this->next(); }
public function valid() { return $this->list->valid(); }
/** * Support for readdir(). * * @return string|bool the next filename, or false if there are no more * files in the directory * @see http://www.php.net/manual/en/function.readdir.php */ public function dir_readdir() { while ($this->_directoryIterator->valid()) { $key = $this->_directoryIterator->key(); $current = $this->_directoryIterator->current(); $iterator = $this->_directoryIterator->getInnerIterator(); try { $this->_directoryIterator->next(); } catch (Services_Amazon_S3_Exception $e) { return false; } if (is_string($current)) { // Return "." or ".." return $key; } if ($iterator instanceof Services_Amazon_S3_ObjectIterator) { // Strip prefix and any trailing slash $key = rtrim(substr($key, strlen($iterator->prefix)), '/'); } else { // When iterating over buckets, $current is a bucket instance $key = $current->name; } // Subdirectories may be represented in two different ways - make // sure not to report duplicates $subdirectory = false; if (substr($key, -9) == '_$folder$') { $subdirectory = $key = substr($key, 0, -9); } elseif ($current instanceof Services_Amazon_S3_Prefix) { $subdirectory = $key; } if ($subdirectory) { if (!in_array($key, $this->_subdirectories)) { $this->_subdirectories[] = $key; return $key; } } else { return $key; } } return false; }
/** * Returns whether the current iterator value is valid * * @return boolean */ public function valid() { return $this->inputs->valid(); }
[expect php] [file] <?php $pizzas = new ArrayIterator(array('Margarita', 'Siciliana', 'Hawaii')); $toppings = new ArrayIterator(array('Cheese', 'Anchovies', 'Olives', 'Pineapple', 'Ham')); $appendIterator = new AppendIterator(); $appendIterator->append($pizzas); $appendIterator->append($toppings); foreach ($appendIterator as $key => $item) { echo "{$key} => {$item}", PHP_EOL; } $appendIterator->append($toppings); while ($appendIterator->valid()) { echo $appendIterator->key() . " => " . $appendIterator->current() . "\n"; $appendIterator->next(); }
/** * @see http://php.net/manual/en/class.iterator.php#96691 * @return bool */ public function valid() { return $this->_appendIterator->valid(); }
public function testResultsetAppendIterator() { if (!$this->_prepareTestMysql()) { $this->markTestSkipped("Skipped"); return; } // see http://php.net/manual/en/appenditerator.construct.php $iterator = new \AppendIterator(); $robots_first = Robots::find(array('limit' => 2)); $robots_second = Robots::find(array('limit' => 1, 'offset' => 2)); $robots_first_0 = $robots_first[0]; $robots_first_1 = $robots_first[1]; $robots_second_0 = $robots_second[0]; $iterator->append($robots_first); $iterator->append($robots_second); $iterator->rewind(); $this->assertTrue($iterator->valid()); $this->assertEquals($iterator->key(), 0); $this->assertEquals($iterator->getIteratorIndex(), 0); $this->assertEquals(get_class($iterator->current()), 'Robots'); $this->assertEquals($robots_first_0->name, $iterator->current()->name); $iterator->next(); $this->assertTrue($iterator->valid()); $this->assertEquals($iterator->key(), 1); $this->assertEquals($iterator->getIteratorIndex(), 0); $this->assertEquals(get_class($iterator->current()), 'Robots'); $this->assertEquals($robots_first_1->name, $iterator->current()->name); $iterator->next(); $this->assertTrue($iterator->valid()); $this->assertEquals($iterator->key(), 0); $this->assertEquals($iterator->getIteratorIndex(), 1); $this->assertEquals(get_class($iterator->current()), 'Robots'); $this->assertEquals($robots_second_0->name, $iterator->current()->name); $iterator->next(); $this->assertFalse($iterator->valid()); }