Re: Is it possible to extend nsIDOMNode and alike?

Jonas Sicking <[email protected]>
Newsgroups gmane.comp.mozilla.devel.dom
Message-ID <[email protected]>
[email protected] wrote:
> I have Mozilla embedded in my application through Java-xpcom. I want
> to attach certain reference (to Java object) to each of the nodes in
> the DOM tree. In another word, once I get a nsIDOMNode from Mozilla, I
> would like to call methods on its attached reference. I can certainly
> build a map and store the references in it. But it won't scale well
> and constantly adding/removing from a big map is kind of expensive.
> Since nsIDOMNode is an interface, I am thinking if I can wrap
> Mozilla's implementation in my own class and somehow provide that
> class back to Mozilla DOM then I should be able to achieve what I
> need. The problem now lies in how to provide the class back to
> Mozilla. nsIDOMDOMImplementation looks like a potential entry point
> but is read-only on nsIDOMDocument. Is the route I am taking even
> possible in xpcom? Are there any other solutions that you can suggest?
> Thanks in advance for your help.

Passing back another object is unlikely going to work. The nodes in 
mozilla have to implement a large number of interfaces and you'd have to 
get them exactly right for all types of nodes for things to work properly.

What you could do instead is to QueryInterface the node to nsINode and 
use the Get/Set/Delete/UnsetProperty API to store any additional 
information about the node that you need.

Note though that behind the scene that is implemented using a hash 
table, so if you're worried about performance with that then this API 
isn't going to help you much.

That said, hash tables generally scale really well. It shouldn't be any 
slower to use a hashtable with 1000 entries, than one with 2 (not 
entirely true, but sort of).

/ Jonas
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.