Re: Is it possible to extend nsIDOMNode and alike?

"[email protected]" <[email protected]>
Newsgroups gmane.comp.mozilla.devel.dom
Organization http://groups.google.com
Message-ID <a5663862-1420-471b-a23a-feff9b3d0f36@m73g2000hsh.googlegroups.com>
On Apr 11, 6:22 pm, Jonas Sicking <[email protected]> wrote:
> [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

Thanks Jonas. I think the QueryInterface route you suggested would
satisfy what I need. Just want to confirm that you meant nsIDOM3Node
which has that propety API. As I understand, this means one hashtable
per node. Is it correct? If so then there should be no performance
issue because I won't have that many properties per node. What I was
concerned previously was that I would have a hashtable with each of
the node as the key, so as the number of the node increased this
hashtable might have performance problems.

Feng
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.