Hoa central
Constarray.php
Go to the documentation of this file.
1 <?php
2 
37 namespace Hoa\Realdom;
38 
39 use Hoa\Math;
40 
49 class Constarray extends RealdomArray implements IRealdom\Constant
50 {
56  const NAME = 'constarray';
57 
63  protected $_arguments = [
64  'pairs'
65  ];
66 
67 
68 
74  protected function construct()
75  {
76  $this['length'] = new Constinteger(count($this['pairs']));
77 
78  return;
79  }
80 
86  public function reset()
87  {
88  foreach ($this['pairs'] as $pair) {
89  $pair[0]->reset();
90 
91  if (isset($pair[1])) {
92  $pair[1]->reset();
93  }
94  }
95 
96  return;
97  }
98 
105  protected function _predicate($q)
106  {
107  if (!is_array($q)) {
108  return false;
109  }
110 
111  $count = count($q);
112 
113  if (false === $this['length']->predicate($count)) {
114  return false;
115  }
116 
117  $pairs = $this['pairs'];
118 
119  foreach ($q as $_key => $_value) {
120  $out = false;
121 
122  foreach ($pairs as $pair) {
123  $key = $pair[0];
124  $value = $pair[1];
125 
126  if (false === $key->predicate($_key)) {
127  continue;
128  }
129 
130  if (false === $value->predicate($_value)) {
131  continue;
132  }
133 
134  $out = true;
135 
136  break;
137  }
138 
139  if (false === $out) {
140  return false;
141  }
142  }
143 
144  return $out;
145  }
146 
153  protected function _sample(Math\Sampler $sampler)
154  {
155  $out = [];
156 
157  foreach ($this['pairs'] as $pair) {
158  if (!isset($pair[1])) {
159  $out[] = $pair[0]->sample($sampler);
160 
161  continue;
162  }
163 
164  $key = $pair[0]->sample($sampler);
165  $value = $pair[1]->sample($sampler);
166  $out[$key] = $value;
167  }
168 
169  return $out;
170  }
171 
177  public function getConstantValue()
178  {
179  return $this['pairs'];
180  }
181 
187  public function getConstantRepresentation()
188  {
189  $handle = [];
190 
191  foreach ($this['pairs'] as $pair) {
192  $_handle = null;
193 
194  foreach ($pair as $_pair) {
195  if (null === $_handle) {
196  $_handle = isset($pair[1]) ? 'from ' : 'to ';
197  } else {
198  $_handle .= ' to ';
199  }
200 
201  if (null !== $holder = $_pair->getHolder()) {
202  $_handle .= $holder->getName();
203  } else {
204  $_handle .= $this->getPraspelVisitor()->visit($_pair);
205  }
206  }
207 
208  $handle[] = $_handle;
209  }
210 
211  return '[' . implode(', ', $handle) . ']';
212  }
213 }
_sample(Math\Sampler $sampler)
Definition: Constarray.php:153