Hoa central
Sampler.php
Go to the documentation of this file.
1 <?php
2 
37 namespace Hoa\Math\Sampler;
38 
39 use Hoa\Core;
40 use Hoa\Math;
41 
50 abstract class Sampler implements Core\Parameter\Parameterizable
51 {
57  protected $_parameters = null;
58 
59 
60 
67  public function __construct(Array $parameters = [])
68  {
69  $this->_parameters = new Core\Parameter(
70  __CLASS__,
71  [],
72  [
73  'integer.min' => -16,
74  'integer.max' => 15,
75  'float.min' => -128.0,
76  'float.max' => 127.0
77  ]
78  );
79  $this->_parameters->setParameters($parameters);
80 
81  if (null === $this->_parameters->getParameter('integer.min')) {
82  $this->_parameters->setParameter('integer.min', PHP_INT_MIN);
83  }
84 
85  if (null === $this->_parameters->getParameter('integer.max')) {
86  $this->_parameters->setParameter('integer.max', PHP_INT_MAX);
87  }
88 
89  if (null === $this->_parameters->getParameter('float.min')) {
90  $this->_parameters->setParameter('float.min', PHP_INT_MIN);
91  }
92 
93  if (null === $this->_parameters->getParameter('float.max')) {
94  $this->_parameters->setParameter('float.max', PHP_INT_MAX);
95  }
96 
97  $this->construct();
98 
99  return;
100  }
101 
107  public function construct()
108  {
109  return;
110  }
111 
117  public function getParameters()
118  {
119  return $this->_parameters;
120  }
121 
130  public function getInteger(
131  $lower = null,
132  $upper = null,
133  Array &$exclude = null
134  ) {
135  if (null === $lower) {
136  $lower = $this->_parameters->getParameter('integer.min');
137  }
138 
139  if (null === $upper) {
140  $upper = $this->_parameters->getParameter('integer.max');
141  }
142 
143  if (null === $exclude) {
144  if ($lower > $upper) {
145  throw new Math\Exception(
146  'Unexpected values, integer %d should be lower than %d',
147  0,
148  [$lower, $upper]
149  );
150  }
151 
152  return $this->_getInteger($lower, $upper);
153  }
154 
155 
156  sort($exclude);
157 
158  $upper -= count($exclude);
159 
160  if ($lower > $upper) {
161  throw new Math\Exception(
162  'Unexpected values, integer %d should be lower than %d',
163  1,
164  [$lower, $upper]
165  );
166  }
167 
168  $sampled = $this->_getInteger($lower, $upper);
169 
170  foreach ($exclude as $e) {
171  if ($sampled >= $e) {
172  ++$sampled;
173  } else {
174  break;
175  }
176  }
177 
178  return $sampled;
179  }
180 
188  abstract protected function _getInteger($lower, $upper);
189 
197  public function getFloat($lower = null, $upper = null)
198  {
199  if (null === $lower) {
200  $lower = $this->_parameters->getParameter('float.min');
201  }
202  /*
203  $lower = true === S_32\BITS
204  ? -3.4028235e38 + 1
205  : -1.7976931348623157e308 + 1;
206  */
207 
208  if (null === $upper) {
209  $upper = $this->_parameters->getParameter('float.max');
210  }
211  /*
212  $upper = true === S_32\BITS
213  ? 3.4028235e38 - 1
214  : 1.7976931348623157e308 - 1;
215  */
216 
217  if ($lower > $upper) {
218  throw new Math\Exception(
219  'Unexpected values, float %f should be lower than %f',
220  2, [$lower, $upper]);
221  }
222 
223  return $this->_getFloat($lower, $upper);
224  }
225 
233  abstract protected function _getFloat($lower, $upper);
234 
240  public function getExcludeSet()
241  {
242  return [];
243  }
244 }
245 
249 Core\Consistency::flexEntity('Hoa\Math\Sampler\Sampler');
__construct(Array $parameters=[])
Definition: Sampler.php:67
_getFloat($lower, $upper)
_getInteger($lower, $upper)
getInteger($lower=null, $upper=null, Array &$exclude=null)
Definition: Sampler.php:130
getFloat($lower=null, $upper=null)
Definition: Sampler.php:197