On Sun, Jan 17, 2010 at 5:44 PM, Aristotle Pagaltzis <pagalt...@gmx.de>wrote:

> * Emmanuel Rodriguez <emmanuel.rodrig...@gmail.com> [2010-01-14 08:35]:
> > I see that there's not way to avoid the cache. It's a bit of
> > a pity that I can't detect when an iter is no longer needed as
> > eventually all nodes will be duplicated into the cache.
> >
> > I'm guessing that with a normal (pure Perl) tree model this
> > will not be the case as nodes will be already in the model.
> > Using XML::LibXML nodes is a bit peculiar as the memory
> > management is a bit different. If I'm not mistaken XML::LibXML
> > assumes that nodes are attached to the underlying C model and
> > that the SVs wrapping them can be easily discarded at anytime
> > as long as the original C structure lives.
> >
> > I could rewrite this tree model with a pure Perl tree model
> > (HTML::Tree) and add it to the Gtk2-Perl examples.
>
> It sounds to me like what you want is to store some kind of
> pointer in the iter (eg. an XPath) whereby the same node can be
> re-requested from XML::LibXML in the event that it has to.
>
I did implement this stragey too but the XPath string was being lost once
inserted into the TreeIter. Dumping the TreeIter received and returned by
all methods shows that the incoming iters lose the value returned by the
previous method.

I'm guessing that the problem occurs because there's no other variable that
holds a reference to the values stored in TreeIter. Once the method that
builds the TreeIter returns the Perl scalars stored in the iter get
reclaimed.

This is why I tend to believe that with a pure Perl tree things will work
better as the nodes will still have a refcount of 1. Hopefully this week I
will have the time to test this.
-- 
Emmanuel Rodriguez
_______________________________________________
gtk-perl-list mailing list
gtk-perl-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-perl-list

Reply via email to