Skip to content

Commit 9f409f5

Browse files
committed
[optimise] Avoid unnecessary double iteration in fn:reverse
1 parent 3d3b72c commit 9f409f5

File tree

1 file changed

+26
-29
lines changed

1 file changed

+26
-29
lines changed

exist-core/src/main/java/org/exist/xquery/functions/fn/FunReverse.java

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,15 @@
5151
import org.exist.xquery.value.FunctionReturnSequenceType;
5252
import org.exist.xquery.value.Item;
5353
import org.exist.xquery.value.Sequence;
54-
import org.exist.xquery.value.SequenceIterator;
54+
import org.exist.xquery.value.ValueSequence;
5555
import org.exist.xquery.value.SequenceType;
5656
import org.exist.xquery.value.Type;
57-
import org.exist.xquery.value.ValueSequence;
5857

5958
/**
6059
* Implements the fn:reverse function.
6160
*
6261
* @author <a href="mailto:[email protected]">Piotr Kaminski</a>
62+
* @author <a href="mailto:[email protected]">Adam Retter</a>
6363
*/
6464
public class FunReverse extends Function {
6565

@@ -103,37 +103,34 @@ public void analyze(final AnalyzeContextInfo contextInfo) throws XPathException
103103
argumentsChecked = true;
104104
}
105105

106-
public Sequence eval(Sequence contextSequence, Item contextItem) throws XPathException {
106+
@Override
107+
public Sequence eval(final Sequence contextSequence, final Item contextItem) throws XPathException {
107108
if (context.getProfiler().isEnabled()) {
108-
context.getProfiler().start(this);
109+
context.getProfiler().start(this);
109110
context.getProfiler().message(this, Profiler.DEPENDENCIES, "DEPENDENCIES", Dependency.getDependenciesName(this.getDependencies()));
110-
if (contextSequence != null)
111-
{context.getProfiler().message(this, Profiler.START_SEQUENCES, "CONTEXT SEQUENCE", contextSequence);}
112-
if (contextItem != null)
113-
{context.getProfiler().message(this, Profiler.START_SEQUENCES, "CONTEXT ITEM", contextItem.toSequence());}
114-
}
115-
116-
Sequence result;
111+
if (contextSequence != null) {
112+
context.getProfiler().message(this, Profiler.START_SEQUENCES, "CONTEXT SEQUENCE", contextSequence);
113+
}
114+
if (contextItem != null) {
115+
context.getProfiler().message(this, Profiler.START_SEQUENCES, "CONTEXT ITEM", contextItem.toSequence());
116+
}
117+
}
118+
117119
final Sequence seq = getArguments(contextSequence, contextItem)[0];
118-
if (seq.isEmpty())
119-
{result = Sequence.EMPTY_SEQUENCE;}
120-
else {
121-
final Sequence tmp = new ValueSequence();
122-
Item item;
123-
for(final SequenceIterator i = seq.iterate(); i.hasNext(); ) {
124-
item = i.nextItem();
125-
tmp.add(item);
126-
}
127-
result = new ValueSequence();
128-
for (int i = seq.getItemCount() - 1; i >= 0; i--) {
129-
result.add(tmp.itemAt(i));
130-
}
120+
final Sequence result;
121+
if (seq.isEmpty()) {
122+
result = Sequence.EMPTY_SEQUENCE;
123+
} else {
124+
result = new ValueSequence();
125+
for (int i = seq.getItemCount() - 1; i >= 0; i--) {
126+
result.add(seq.itemAt(i));
127+
}
131128
}
132129

133-
if (context.getProfiler().isEnabled())
134-
{context.getProfiler().end(this, "", result);}
135-
136-
return result;
137-
}
130+
if (context.getProfiler().isEnabled()) {
131+
context.getProfiler().end(this, "", result);
132+
}
138133

134+
return result;
135+
}
139136
}

0 commit comments

Comments
 (0)