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