@@ -17,34 +17,78 @@ protected function processCursor()
1717
1818 protected function processNextArrayIndex (Reference $ reference )
1919 {
20- $ result = false ;
21- return $ this ->setResult ($ result );
20+ throw new LogicException ("Deprecated method " );
2221 }
2322
2423
2524 protected function processNonExistingObjectProperty (Reference $ reference )
2625 {
27- $ result = false ;
28- return $ this ->setResult ($ result );
26+ throw new LogicException ("Deprecated method " );
2927 }
3028
3129
3230 protected function processNonExistingArrayIndex (Reference $ reference )
3331 {
34- $ result = false ;
35- return $ this ->setResult ($ result );
32+ throw new LogicException ("Deprecated method " );
3633 }
3734
3835
3936 protected function processNotAllowedNonNumericArrayIndex (Reference $ reference )
4037 {
41- $ result = false ;
42- return $ this ->setResult ($ result );
38+ throw new LogicException ("Deprecated method " );
4339 }
44-
45-
40+
41+
42+ /**
43+ * @param Reference $reference
44+ * @return ReferenceEvaluate
45+ */
4646 protected function createReferenceEvaluate (Reference $ reference )
4747 {
48-
48+ if (is_object ($ this ->cursor )) {
49+ return ReferenceTestProperty::factory ();
50+ }
51+ if (is_array ($ this ->cursor )) {
52+ switch ($ reference ->getType ()) {
53+ case $ reference ::TYPE_NEXT_INDEX :
54+ return ReferenceTestNextIndex::factory ();
55+
56+ case $ reference ::TYPE_INDEX :
57+ return ReferenceTestNumericIndex::factory ();
58+
59+ case $ reference ::TYPE_PROPERTY :
60+ return $ this ->nonNumericIndices
61+ ? ReferenceTestAllowedNonNumericIndex::factory ()
62+ : ReferenceTestNotAllowedNonNumericIndex::factory ();
63+
64+ default :
65+ throw new DomainException (
66+ "Failed to create test evaluator for reference of type {$ reference ->getType ()}"
67+ );
68+ }
69+ }
70+ throw new EvaluateException ("Cannot test non-structured data by reference " );
71+ }
72+
73+
74+ protected function processReferenceEvaluate (Reference $ reference )
75+ {
76+ $ this
77+ ->setupReferenceEvaluate ($ reference )
78+ ->getReferenceEvaluate ()
79+ ->perform ();
80+ $ this ->cursor = &$ this
81+ ->getReferenceEvaluate ()
82+ ->getData ();
83+ $ isReferenceResultSet = $ this
84+ ->getReferenceEvaluate ()
85+ ->isResultSet ();
86+ if ($ isReferenceResultSet ) {
87+ $ referenceResult = &$ this
88+ ->getReferenceEvaluate ()
89+ ->getResult ();
90+ $ this ->setResult ($ referenceResult );
91+ }
92+ return $ this ;
4993 }
5094}
0 commit comments