annotate vendor/symfony/var-dumper/Caster/SplCaster.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 /*
Chris@0 4 * This file is part of the Symfony package.
Chris@0 5 *
Chris@0 6 * (c) Fabien Potencier <fabien@symfony.com>
Chris@0 7 *
Chris@0 8 * For the full copyright and license information, please view the LICENSE
Chris@0 9 * file that was distributed with this source code.
Chris@0 10 */
Chris@0 11
Chris@0 12 namespace Symfony\Component\VarDumper\Caster;
Chris@0 13
Chris@0 14 use Symfony\Component\VarDumper\Cloner\Stub;
Chris@0 15
Chris@0 16 /**
Chris@0 17 * Casts SPL related classes to array representation.
Chris@0 18 *
Chris@0 19 * @author Nicolas Grekas <p@tchwork.com>
Chris@0 20 */
Chris@0 21 class SplCaster
Chris@0 22 {
Chris@17 23 private static $splFileObjectFlags = [
Chris@0 24 \SplFileObject::DROP_NEW_LINE => 'DROP_NEW_LINE',
Chris@0 25 \SplFileObject::READ_AHEAD => 'READ_AHEAD',
Chris@0 26 \SplFileObject::SKIP_EMPTY => 'SKIP_EMPTY',
Chris@0 27 \SplFileObject::READ_CSV => 'READ_CSV',
Chris@17 28 ];
Chris@0 29
Chris@0 30 public static function castArrayObject(\ArrayObject $c, array $a, Stub $stub, $isNested)
Chris@0 31 {
Chris@16 32 return self::castSplArray($c, $a, $stub, $isNested);
Chris@16 33 }
Chris@0 34
Chris@16 35 public static function castArrayIterator(\ArrayIterator $c, array $a, Stub $stub, $isNested)
Chris@16 36 {
Chris@16 37 return self::castSplArray($c, $a, $stub, $isNested);
Chris@0 38 }
Chris@0 39
Chris@0 40 public static function castHeap(\Iterator $c, array $a, Stub $stub, $isNested)
Chris@0 41 {
Chris@17 42 $a += [
Chris@0 43 Caster::PREFIX_VIRTUAL.'heap' => iterator_to_array(clone $c),
Chris@17 44 ];
Chris@0 45
Chris@0 46 return $a;
Chris@0 47 }
Chris@0 48
Chris@0 49 public static function castDoublyLinkedList(\SplDoublyLinkedList $c, array $a, Stub $stub, $isNested)
Chris@0 50 {
Chris@0 51 $prefix = Caster::PREFIX_VIRTUAL;
Chris@0 52 $mode = $c->getIteratorMode();
Chris@0 53 $c->setIteratorMode(\SplDoublyLinkedList::IT_MODE_KEEP | $mode & ~\SplDoublyLinkedList::IT_MODE_DELETE);
Chris@0 54
Chris@17 55 $a += [
Chris@0 56 $prefix.'mode' => new ConstStub((($mode & \SplDoublyLinkedList::IT_MODE_LIFO) ? 'IT_MODE_LIFO' : 'IT_MODE_FIFO').' | '.(($mode & \SplDoublyLinkedList::IT_MODE_DELETE) ? 'IT_MODE_DELETE' : 'IT_MODE_KEEP'), $mode),
Chris@0 57 $prefix.'dllist' => iterator_to_array($c),
Chris@17 58 ];
Chris@0 59 $c->setIteratorMode($mode);
Chris@0 60
Chris@0 61 return $a;
Chris@0 62 }
Chris@0 63
Chris@0 64 public static function castFileInfo(\SplFileInfo $c, array $a, Stub $stub, $isNested)
Chris@0 65 {
Chris@17 66 static $map = [
Chris@0 67 'path' => 'getPath',
Chris@0 68 'filename' => 'getFilename',
Chris@0 69 'basename' => 'getBasename',
Chris@0 70 'pathname' => 'getPathname',
Chris@0 71 'extension' => 'getExtension',
Chris@0 72 'realPath' => 'getRealPath',
Chris@0 73 'aTime' => 'getATime',
Chris@0 74 'mTime' => 'getMTime',
Chris@0 75 'cTime' => 'getCTime',
Chris@0 76 'inode' => 'getInode',
Chris@0 77 'size' => 'getSize',
Chris@0 78 'perms' => 'getPerms',
Chris@0 79 'owner' => 'getOwner',
Chris@0 80 'group' => 'getGroup',
Chris@0 81 'type' => 'getType',
Chris@0 82 'writable' => 'isWritable',
Chris@0 83 'readable' => 'isReadable',
Chris@0 84 'executable' => 'isExecutable',
Chris@0 85 'file' => 'isFile',
Chris@0 86 'dir' => 'isDir',
Chris@0 87 'link' => 'isLink',
Chris@0 88 'linkTarget' => 'getLinkTarget',
Chris@17 89 ];
Chris@0 90
Chris@0 91 $prefix = Caster::PREFIX_VIRTUAL;
Chris@0 92
Chris@0 93 foreach ($map as $key => $accessor) {
Chris@0 94 try {
Chris@0 95 $a[$prefix.$key] = $c->$accessor();
Chris@0 96 } catch (\Exception $e) {
Chris@0 97 }
Chris@0 98 }
Chris@0 99
Chris@0 100 if (isset($a[$prefix.'realPath'])) {
Chris@0 101 $a[$prefix.'realPath'] = new LinkStub($a[$prefix.'realPath']);
Chris@0 102 }
Chris@0 103
Chris@0 104 if (isset($a[$prefix.'perms'])) {
Chris@0 105 $a[$prefix.'perms'] = new ConstStub(sprintf('0%o', $a[$prefix.'perms']), $a[$prefix.'perms']);
Chris@0 106 }
Chris@0 107
Chris@17 108 static $mapDate = ['aTime', 'mTime', 'cTime'];
Chris@0 109 foreach ($mapDate as $key) {
Chris@0 110 if (isset($a[$prefix.$key])) {
Chris@0 111 $a[$prefix.$key] = new ConstStub(date('Y-m-d H:i:s', $a[$prefix.$key]), $a[$prefix.$key]);
Chris@0 112 }
Chris@0 113 }
Chris@0 114
Chris@0 115 return $a;
Chris@0 116 }
Chris@0 117
Chris@0 118 public static function castFileObject(\SplFileObject $c, array $a, Stub $stub, $isNested)
Chris@0 119 {
Chris@17 120 static $map = [
Chris@0 121 'csvControl' => 'getCsvControl',
Chris@0 122 'flags' => 'getFlags',
Chris@0 123 'maxLineLen' => 'getMaxLineLen',
Chris@0 124 'fstat' => 'fstat',
Chris@0 125 'eof' => 'eof',
Chris@0 126 'key' => 'key',
Chris@17 127 ];
Chris@0 128
Chris@0 129 $prefix = Caster::PREFIX_VIRTUAL;
Chris@0 130
Chris@0 131 foreach ($map as $key => $accessor) {
Chris@0 132 try {
Chris@0 133 $a[$prefix.$key] = $c->$accessor();
Chris@0 134 } catch (\Exception $e) {
Chris@0 135 }
Chris@0 136 }
Chris@0 137
Chris@0 138 if (isset($a[$prefix.'flags'])) {
Chris@17 139 $flagsArray = [];
Chris@0 140 foreach (self::$splFileObjectFlags as $value => $name) {
Chris@0 141 if ($a[$prefix.'flags'] & $value) {
Chris@0 142 $flagsArray[] = $name;
Chris@0 143 }
Chris@0 144 }
Chris@0 145 $a[$prefix.'flags'] = new ConstStub(implode('|', $flagsArray), $a[$prefix.'flags']);
Chris@0 146 }
Chris@0 147
Chris@0 148 if (isset($a[$prefix.'fstat'])) {
Chris@17 149 $a[$prefix.'fstat'] = new CutArrayStub($a[$prefix.'fstat'], ['dev', 'ino', 'nlink', 'rdev', 'blksize', 'blocks']);
Chris@0 150 }
Chris@0 151
Chris@0 152 return $a;
Chris@0 153 }
Chris@0 154
Chris@0 155 public static function castFixedArray(\SplFixedArray $c, array $a, Stub $stub, $isNested)
Chris@0 156 {
Chris@17 157 $a += [
Chris@0 158 Caster::PREFIX_VIRTUAL.'storage' => $c->toArray(),
Chris@17 159 ];
Chris@0 160
Chris@0 161 return $a;
Chris@0 162 }
Chris@0 163
Chris@0 164 public static function castObjectStorage(\SplObjectStorage $c, array $a, Stub $stub, $isNested)
Chris@0 165 {
Chris@17 166 $storage = [];
Chris@0 167 unset($a[Caster::PREFIX_DYNAMIC."\0gcdata"]); // Don't hit https://bugs.php.net/65967
Chris@0 168
Chris@16 169 $clone = clone $c;
Chris@16 170 foreach ($clone as $obj) {
Chris@17 171 $storage[] = [
Chris@0 172 'object' => $obj,
Chris@16 173 'info' => $clone->getInfo(),
Chris@17 174 ];
Chris@0 175 }
Chris@0 176
Chris@17 177 $a += [
Chris@0 178 Caster::PREFIX_VIRTUAL.'storage' => $storage,
Chris@17 179 ];
Chris@0 180
Chris@0 181 return $a;
Chris@0 182 }
Chris@0 183
Chris@0 184 public static function castOuterIterator(\OuterIterator $c, array $a, Stub $stub, $isNested)
Chris@0 185 {
Chris@0 186 $a[Caster::PREFIX_VIRTUAL.'innerIterator'] = $c->getInnerIterator();
Chris@0 187
Chris@0 188 return $a;
Chris@0 189 }
Chris@16 190
Chris@16 191 private static function castSplArray($c, array $a, Stub $stub, $isNested)
Chris@16 192 {
Chris@16 193 $prefix = Caster::PREFIX_VIRTUAL;
Chris@16 194 $class = $stub->class;
Chris@16 195 $flags = $c->getFlags();
Chris@16 196
Chris@16 197 if (!($flags & \ArrayObject::STD_PROP_LIST)) {
Chris@16 198 $c->setFlags(\ArrayObject::STD_PROP_LIST);
Chris@16 199 $a = Caster::castObject($c, $class);
Chris@16 200 $c->setFlags($flags);
Chris@16 201 }
Chris@17 202 $a += [
Chris@16 203 $prefix.'flag::STD_PROP_LIST' => (bool) ($flags & \ArrayObject::STD_PROP_LIST),
Chris@16 204 $prefix.'flag::ARRAY_AS_PROPS' => (bool) ($flags & \ArrayObject::ARRAY_AS_PROPS),
Chris@17 205 ];
Chris@16 206 if ($c instanceof \ArrayObject) {
Chris@16 207 $a[$prefix.'iteratorClass'] = new ClassStub($c->getIteratorClass());
Chris@16 208 }
Chris@16 209 $a[$prefix.'storage'] = $c->getArrayCopy();
Chris@16 210
Chris@16 211 return $a;
Chris@16 212 }
Chris@0 213 }