@@ -46,7 +46,7 @@ abstract class LocatorEvaluate
4646 *
4747 * @var Cursor|null
4848 */
49- protected $ dataCursor ;
49+ protected $ cursor ;
5050
5151 /**
5252 * Evaluation result.
@@ -56,7 +56,7 @@ abstract class LocatorEvaluate
5656 protected $ result ;
5757
5858 /**
59- * @var ReferenceEvaluate |null
59+ * @var ReferenceAdvanceable |null
6060 */
6161 protected $ referenceEvaluate ;
6262
@@ -184,6 +184,30 @@ public function &getResult()
184184 }
185185
186186
187+ protected function setCursor (Cursor $ cursor )
188+ {
189+ $ this ->cursor = $ cursor ;
190+ return $ this ;
191+ }
192+
193+
194+ protected function getCursor ()
195+ {
196+ if (null === $ this ->cursor ) {
197+ throw new LogicException ("Cursor is not set in reference evaluator " );
198+ }
199+ return $ this ->cursor ;
200+ }
201+
202+
203+ protected function resetCursor ()
204+ {
205+ $ cursor = Cursor::factory ()
206+ ->setData ($ this ->getData ());
207+ return $ this ->setCursor ($ cursor );
208+ }
209+
210+
187211 public function allowNonNumericIndices ()
188212 {
189213 $ this ->nonNumericIndices = true ;
@@ -206,15 +230,13 @@ public function forbidNonNumericIndices()
206230 */
207231 public function perform ()
208232 {
209- //$this->dataCursor = &$this->getData();
210- $ this ->dataCursor = Cursor::factory ()
211- ->setData ($ this ->getData ());
212- $ this ->resetResult ();
213- foreach ($ this ->getLocator ()->getReferenceList () as $ reference ) {
214- $ this
215- ->dataCursor
216- ->setReference ($ reference );
217- $ this ->processReference ();
233+ $ referenceList = $ this
234+ ->resetCursor ()
235+ ->resetResult ()
236+ ->getLocator ()
237+ ->getReferenceList ();
238+ foreach ($ referenceList as $ reference ) {
239+ $ this ->processReference ($ reference );
218240 if ($ this ->isResultSet ) {
219241 break ;
220242 }
@@ -229,23 +251,21 @@ public function perform()
229251 }
230252
231253
232- protected function setEvaluateForReference ()
254+ protected function setupReferenceEvaluate ()
233255 {
234- $ reference = $ this
235- ->dataCursor
236- ->getReference ();
237256 $ this ->referenceEvaluate = $ this
238257 ->createReferenceEvaluate ()
239- ->setAdvancer ($ this ->createAdvancerForReference ())
240- ->setReference ($ reference )
241- ->setDataCursor ($ this ->dataCursor ->getData ());
258+ ->setAdvancer ($ this ->createAdvancerForCursor ())
259+ //->setReference($this->getCursor()->getReference())
260+ //->setDataCursor($this->getCursor()->getData())
261+ ;
242262 return $ this ;
243263 }
244264
245265
246- protected function createAdvancerForReference ()
266+ protected function createAdvancerForCursor ()
247267 {
248- $ advancer = Advancer::byCursorFactory ($ this ->dataCursor );
268+ $ advancer = Advancer::byCursorFactory ($ this ->getCursor () );
249269 if ($ advancer instanceof AdvancerNonNumericIndex && $ this ->nonNumericIndices ) {
250270 $ advancer ->allow ();
251271 }
@@ -260,7 +280,7 @@ abstract protected function createReferenceEvaluate();
260280
261281
262282 /**
263- * @return ReferenceEvaluate
283+ * @return ReferenceAdvanceable
264284 * @throws LogicException
265285 */
266286 protected function getReferenceEvaluate ()
@@ -273,17 +293,18 @@ protected function getReferenceEvaluate()
273293
274294
275295 /**
296+ * @param Reference $reference
276297 * @return $this
277298 * @throws EvaluateException
278299 */
279- protected function processReference ()
300+ protected function processReference (Reference $ reference )
280301 {
281302 try {
303+ $ this
304+ ->getCursor ()
305+ ->setReference ($ reference );
282306 $ this ->processReferenceEvaluate ();
283307 } catch (EvaluateException $ e ) {
284- $ reference = $ this
285- ->dataCursor
286- ->getReference ();
287308 throw new EvaluateException (
288309 "Error evaluating data for path ' {$ reference ->getPath ()}': {$ e ->getMessage ()}" ,
289310 null ,
@@ -297,15 +318,9 @@ protected function processReference()
297318 protected function processReferenceEvaluate ()
298319 {
299320 $ this
300- ->setEvaluateForReference ()
321+ ->setupReferenceEvaluate ()
301322 ->getReferenceEvaluate ()
302323 ->perform ();
303- $ data = &$ this
304- ->getReferenceEvaluate ()
305- ->getDataCursor ();
306- $ this
307- ->dataCursor
308- ->setData ($ data );
309324 $ isReferenceResultSet = $ this
310325 ->getReferenceEvaluate ()
311326 ->isResultSet ();
0 commit comments