- From: Ray Whitmer <rayw@netscape.com>
- Date: Tue, 06 Aug 2002 17:22:15 -0700
- To: Vivek.Pandey@Sun.COM
- CC: www-dom@w3.org
Vivek Pandey wrote:
>
>
> Ray Whitmer wrote:
>
>> It means that the evaluate method may reuse the result parameter as
>> the result object.
>
> Thats what i understood from the spec. But i am not finding info on:
>
> * How does result object passed as parameter be reused by the evaluate
> function? I mean can it be used by the application for iterative
> evaluation?
> * Is the *reuse *of result object is implementation dependant?
> * In *Issue XPath-30*, the Resolution says for some use case it may be
> required. Is there anywhere i can find more info?
* The purpose of reuse of XPathResult is that, for efficiency, your
implementation may be able to reuse a previously-created object instead
of creating a new one. A number of implementers thought this was
important. Others thought it was not important.
It is implementation-dependent whether the evaluate method reuses and
returns the passed-in XPathResult (if any) or creates a new one.
In the official last-call issues list for DOM Level 3 XPath, there is no
Issue-30.
The use case for which people want to use it is the one described above,
that I marked with *. For example:
var result = null;
var i = 0;
for (i = 0; i < e.length; i++) {
result = e.evaluate(expression[i], mynode, 0, resolver, result);
[...]
}
In this type of a loop, an implementation that can easily reuse a result
object would only create a single result instead of creating one every
time evaluate was called.
An implementation is free, however to reuse all, some, or none of the
results passed to it. In some implementation, therefore, result would
be a different object each time the loop was executed. Or an
implementation may choose to only reuse the result when the resultType
was the same, etc.
If we are not going to rely on normal deallocation / allocation every
time, the application is the only one to know when the result might be
reused, which is why the application has to pass it in as a parameter
for reuse for implementations to reuse it if they so choose.
I hope that this is helpful.
Ray Whitmer
rayw@netscape.com
Received on Tuesday, 6 August 2002 20:22:47 UTC