ex

Fork of mbed-os-example-mbed5-blinky by mbed-os-examples

Committer:
TMBOY
Date:
Tue Jul 18 16:27:22 2017 +0800
Revision:
44:c1d8923072ba
?

Who changed what in which revision?

UserRevisionLine numberNew contents of line
TMBOY 44:c1d8923072ba 1 <?php
TMBOY 44:c1d8923072ba 2
TMBOY 44:c1d8923072ba 3 /*
TMBOY 44:c1d8923072ba 4 * This file is part of the JsonSchema package.
TMBOY 44:c1d8923072ba 5 *
TMBOY 44:c1d8923072ba 6 * For the full copyright and license information, please view the LICENSE
TMBOY 44:c1d8923072ba 7 * file that was distributed with this source code.
TMBOY 44:c1d8923072ba 8 */
TMBOY 44:c1d8923072ba 9
TMBOY 44:c1d8923072ba 10 namespace JsonSchema\Iterator;
TMBOY 44:c1d8923072ba 11
TMBOY 44:c1d8923072ba 12 /**
TMBOY 44:c1d8923072ba 13 * @package JsonSchema\Iterator
TMBOY 44:c1d8923072ba 14 * @author Joost Nijhuis <jnijhuis81@gmail.com>
TMBOY 44:c1d8923072ba 15 */
TMBOY 44:c1d8923072ba 16 class ObjectIterator implements \Iterator, \Countable
TMBOY 44:c1d8923072ba 17 {
TMBOY 44:c1d8923072ba 18 /** @var object */
TMBOY 44:c1d8923072ba 19 private $object;
TMBOY 44:c1d8923072ba 20
TMBOY 44:c1d8923072ba 21 /** @var int */
TMBOY 44:c1d8923072ba 22 private $position = 0;
TMBOY 44:c1d8923072ba 23
TMBOY 44:c1d8923072ba 24 /** @var array */
TMBOY 44:c1d8923072ba 25 private $data = array();
TMBOY 44:c1d8923072ba 26
TMBOY 44:c1d8923072ba 27 /** @var bool */
TMBOY 44:c1d8923072ba 28 private $initialized = false;
TMBOY 44:c1d8923072ba 29
TMBOY 44:c1d8923072ba 30 /**
TMBOY 44:c1d8923072ba 31 * @param object $object
TMBOY 44:c1d8923072ba 32 */
TMBOY 44:c1d8923072ba 33 public function __construct($object)
TMBOY 44:c1d8923072ba 34 {
TMBOY 44:c1d8923072ba 35 $this->object = $object;
TMBOY 44:c1d8923072ba 36 }
TMBOY 44:c1d8923072ba 37
TMBOY 44:c1d8923072ba 38 /**
TMBOY 44:c1d8923072ba 39 * {@inheritdoc}
TMBOY 44:c1d8923072ba 40 */
TMBOY 44:c1d8923072ba 41 public function current()
TMBOY 44:c1d8923072ba 42 {
TMBOY 44:c1d8923072ba 43 $this->initialize();
TMBOY 44:c1d8923072ba 44
TMBOY 44:c1d8923072ba 45 return $this->data[$this->position];
TMBOY 44:c1d8923072ba 46 }
TMBOY 44:c1d8923072ba 47
TMBOY 44:c1d8923072ba 48 /**
TMBOY 44:c1d8923072ba 49 * {@inheritdoc}
TMBOY 44:c1d8923072ba 50 */
TMBOY 44:c1d8923072ba 51 public function next()
TMBOY 44:c1d8923072ba 52 {
TMBOY 44:c1d8923072ba 53 $this->initialize();
TMBOY 44:c1d8923072ba 54 $this->position++;
TMBOY 44:c1d8923072ba 55 }
TMBOY 44:c1d8923072ba 56
TMBOY 44:c1d8923072ba 57 /**
TMBOY 44:c1d8923072ba 58 * {@inheritdoc}
TMBOY 44:c1d8923072ba 59 */
TMBOY 44:c1d8923072ba 60 public function key()
TMBOY 44:c1d8923072ba 61 {
TMBOY 44:c1d8923072ba 62 $this->initialize();
TMBOY 44:c1d8923072ba 63
TMBOY 44:c1d8923072ba 64 return $this->position;
TMBOY 44:c1d8923072ba 65 }
TMBOY 44:c1d8923072ba 66
TMBOY 44:c1d8923072ba 67 /**
TMBOY 44:c1d8923072ba 68 * {@inheritdoc}
TMBOY 44:c1d8923072ba 69 */
TMBOY 44:c1d8923072ba 70 public function valid()
TMBOY 44:c1d8923072ba 71 {
TMBOY 44:c1d8923072ba 72 $this->initialize();
TMBOY 44:c1d8923072ba 73
TMBOY 44:c1d8923072ba 74 return isset($this->data[$this->position]);
TMBOY 44:c1d8923072ba 75 }
TMBOY 44:c1d8923072ba 76
TMBOY 44:c1d8923072ba 77 /**
TMBOY 44:c1d8923072ba 78 * {@inheritdoc}
TMBOY 44:c1d8923072ba 79 */
TMBOY 44:c1d8923072ba 80 public function rewind()
TMBOY 44:c1d8923072ba 81 {
TMBOY 44:c1d8923072ba 82 $this->initialize();
TMBOY 44:c1d8923072ba 83 $this->position = 0;
TMBOY 44:c1d8923072ba 84 }
TMBOY 44:c1d8923072ba 85
TMBOY 44:c1d8923072ba 86 /**
TMBOY 44:c1d8923072ba 87 * {@inheritdoc}
TMBOY 44:c1d8923072ba 88 */
TMBOY 44:c1d8923072ba 89 public function count()
TMBOY 44:c1d8923072ba 90 {
TMBOY 44:c1d8923072ba 91 $this->initialize();
TMBOY 44:c1d8923072ba 92
TMBOY 44:c1d8923072ba 93 return count($this->data);
TMBOY 44:c1d8923072ba 94 }
TMBOY 44:c1d8923072ba 95
TMBOY 44:c1d8923072ba 96 /**
TMBOY 44:c1d8923072ba 97 * Initializer
TMBOY 44:c1d8923072ba 98 */
TMBOY 44:c1d8923072ba 99 private function initialize()
TMBOY 44:c1d8923072ba 100 {
TMBOY 44:c1d8923072ba 101 if (!$this->initialized) {
TMBOY 44:c1d8923072ba 102 $this->data = $this->buildDataFromObject($this->object);
TMBOY 44:c1d8923072ba 103 $this->initialized = true;
TMBOY 44:c1d8923072ba 104 }
TMBOY 44:c1d8923072ba 105 }
TMBOY 44:c1d8923072ba 106
TMBOY 44:c1d8923072ba 107 /**
TMBOY 44:c1d8923072ba 108 * @param object $object
TMBOY 44:c1d8923072ba 109 * @return array
TMBOY 44:c1d8923072ba 110 */
TMBOY 44:c1d8923072ba 111 private function buildDataFromObject($object)
TMBOY 44:c1d8923072ba 112 {
TMBOY 44:c1d8923072ba 113 $result = array();
TMBOY 44:c1d8923072ba 114
TMBOY 44:c1d8923072ba 115 $stack = new \SplStack();
TMBOY 44:c1d8923072ba 116 $stack->push($object);
TMBOY 44:c1d8923072ba 117
TMBOY 44:c1d8923072ba 118 while (!$stack->isEmpty()) {
TMBOY 44:c1d8923072ba 119
TMBOY 44:c1d8923072ba 120 $current = $stack->pop();
TMBOY 44:c1d8923072ba 121 if (is_object($current)) {
TMBOY 44:c1d8923072ba 122 array_push($result, $current);
TMBOY 44:c1d8923072ba 123 }
TMBOY 44:c1d8923072ba 124
TMBOY 44:c1d8923072ba 125 foreach ($this->getDataFromItem($current) as $propertyName => $propertyValue) {
TMBOY 44:c1d8923072ba 126 if (is_object($propertyValue) || is_array($propertyValue)) {
TMBOY 44:c1d8923072ba 127 $stack->push($propertyValue);
TMBOY 44:c1d8923072ba 128 }
TMBOY 44:c1d8923072ba 129 }
TMBOY 44:c1d8923072ba 130 }
TMBOY 44:c1d8923072ba 131
TMBOY 44:c1d8923072ba 132 return $result;
TMBOY 44:c1d8923072ba 133 }
TMBOY 44:c1d8923072ba 134
TMBOY 44:c1d8923072ba 135 /**
TMBOY 44:c1d8923072ba 136 * @param object|array $item
TMBOY 44:c1d8923072ba 137 * @return array
TMBOY 44:c1d8923072ba 138 */
TMBOY 44:c1d8923072ba 139 private function getDataFromItem($item)
TMBOY 44:c1d8923072ba 140 {
TMBOY 44:c1d8923072ba 141 if (!is_object($item) && !is_array($item)) {
TMBOY 44:c1d8923072ba 142 return array();
TMBOY 44:c1d8923072ba 143 }
TMBOY 44:c1d8923072ba 144
TMBOY 44:c1d8923072ba 145 return is_object($item) ? get_object_vars($item) : $item;
TMBOY 44:c1d8923072ba 146 }
TMBOY 44:c1d8923072ba 147 }