This is mostly a Perl question, I suspect.
I have a Rose::Object that represents a collection of files. Call it
a "Collection". Now, one of the attributes of a Collection is an
array called "files". That array holds info about individual files as
Collection::File objects.
First, a Collection::File object needs access to the parent Collection
object. So I have this method in Collection::File to save a weakened
reference to the parent:
sub parent {
my ( $self, $parent ) = @_;
if ( $parent ) {
return Scalar::Util::weaken( $self->{parent} = $parent );
}
return $self->{parent};
}
And of course I use a bunch of methods like
my $meta_data = $file->parent->meta_data;
So, now files can be containers, too. So, I'm wondering about a
recursive structure. So a Collection::File object can have a
"collection" attribute that would hold another Collection object.
The problem is I want to share the same meta data from the original
Collection. So, one way might to to clone the parent
if ( $file->is_zip_file ) {
my $clone = $file->parent->clone;
$clone->reset_files; # it's a clone w/o any files.
$file->container( $clone ); # Save in this file
for ( $file->zip_contents ) {
$clone->add_to_files( $_ );
}
}
With the advantage that I can recursively process all the files in the
tree then (say if a zip file contains another zip file).
What's making my head hurt is I suspect that the clone will cause
circular links and prevent the destruction of the object.
Is there a better way to approach this -- or a way to weaken just the
right things when cloning?
Thanks,
--
Bill Moseley
[EMAIL PROTECTED]
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Rose-db-object mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/rose-db-object