Data::Grove::Parent - provide parent properties to Data::Grove objects
use Data::Grove::Parent;
$root = $object->root; $rootpath = $object->rootpath; $tied = $object->add_magic([ $parent ]);
$node = Data::Grove::Parent->new($hash [, $parent]); $node_list = Data::Grove::ParentList->new($array [, $parent]);
Data::Grove::Parent is an extension to Data::Grove that adds `Parent
' and `Raw
' properties to Data::Grove objects and methods for returning the root node
of a grove, a list of nodes between and including the root node and the
current node, and a method that creates parented nodes.
Data::Grove::Parent works by creating a Perl ``tied'' object that contains
a parent reference (`Parent
') and a reference to the original Data::Grove object (`Raw
'). Tying-magic is used so that every time you reference the
Data::Grove::Parent object it actually references the underlying raw
object.
When you retrieve a list or a property of the Raw object, Data::Grove::Parent automatically adds magic to the returned list or node. This means you only call `add_magic()' once to create the first Data::Grove::Parent object and then use the grove objects like you normally would.
The most obvious use of this is so you don't have to call a `delete
' method when you want to release a grove or part of a grove; since
Data::Grove and Data::Grove::Parent objects have no cyclic references, Perl
can garbage collect them normally.
A secondary use is to allow you to reuse grove or property set fragments in multiple trees. WARNING: Data::Grove currently does not protect you from creating your own cyclic references! This could lead to infinite loops if you don't take care to avoid them.
`root()
' returns the root node if `$object
' is a `Data::Grove::Parent
' object. `rootpath()
' returns an array of all the nodes between and including the root node and
`$object
'.
`add_magic()
' returns a Data::Grove::Parent
object with `$object
' as it's `Raw
' object. If `$parent
' is given, that becomes the tied object's parent object.
Ken MacLeod, ken@bitsko.slc.ut.us
perl(1),
Data::Grove(3)