SYNOPSIS

  # Create a source from a file
  my $Source = Algorithm::Dependency::Source->new( 'file.txt' );

  # Create a Weight algorithm object
  my $alg = Algorithm::Dependency::Weight->new( source => $Source );

  # Find the weight for a single item
  my $weight = $alg->weight('foo');
  print "The weight of 'foo' is $weight\n";

  # Or a group
  my $hash = $alg->weight_hash('foo', 'bar', 'baz');
  print "The weight of 'foo', 'bar', and 'bar' are $hash->{foo},"
      . " $hash->{bar} and $hash->{baz} respectively\n";

  # Or all of the items
  my $all = $alg->weight_all;
  print "The following is a list from heaviest to lightest:\n";
  foreach ( sort { $all->{$b} <=> $all->{$a} } keys %$all ) {
      print "$_: $all->{$_}\n";
  }

DESCRIPTION

In dependency systems, it can often be very useful to calculate an aggregate or sum for one or all items. For example, to find the \*(L"naive install weight\*(R" of a Perl distribution (where \*(L"naive\*(R" means you treat each distribution equally), you would want the distribtion (1) + all its dependencies (n) + all their dependencies (n2) recursively downwards.

If calculated using a normal Algorithm::Dependency object, the result would be (in a simple systems) equal to:

# Create your normal (non-ordered alg:dep) my $dependency = Algorithm::Dependency->new( ... );

# Find the naive weight for an item my $weight = scalar($dependency->schedule('itemname'));

\*(C`Algorithm::Dependency::Weight\*(C' provides a way of doing this with a little more sophistication, and in a way that should work reasonable well across all the Algorithm::Dependency family.

Please note that the this might be a little (or more than a little) slower than it could be for the limited case of generating weights for all of the items at once in a dependency system with no selected items and no circular dependencies. \s-1BUT\s0 you can at least rely on this class to do the job properly regardless of the particulars of the situation, which is probably more important.

\s-1METHODS\s0

The \*(C`new\*(C' constructor creates a new \*(C`Algorithm::Dependency::Weight\*(C' object. It takes a number of key/value pairs as parameters (although at the present time only one). The \*(C`source\*(C' param is mostly the same as for Algorithm::Dependency. The one addition is that as a source you can provide an Algorithm::Dependency object, and the Algorithm::Dependency::Source for that will be used.

Returns a new \*(C`Algorithm::Dependency::Weight\*(C' object, or \*(C`undef\*(C' on error.

source

The \*(C`source\*(C' accessor returns the source used for the weight calculations.

This will be either the one passed to the constructor, or the source from inside the \*(C`Algorithm::Dependency\*(C' object passed as the \*(C`source\*(C' param (not the object itself, its source). The \*(C`weight\*(C' method takes the name of a single item and calculates its weight based on the configuration of the \*(C`Algorithm::Dependency::Weight\*(C' object.

Returns the weight as a scalar (which in the naive case will be an integer, but in more complex uses may be any real number), or \*(C`undef\*(C' on error. The \*(C`weight_merged\*(C' method takes the name of a set of items and calculates an aggregated weight for the whole set.

Returns the weight as a scalar, or \*(C`undef\*(C' on error. The \*(C`weight_hash\*(C' method takes a list of item names, and calculates their weights.

Returns a reference to a \*(C`HASH\*(C' with the item names as keys and weights as values, or \*(C`undef\*(C' on error.

weight_all

The \*(C`weight_all\*(C' method provides the one-shot method for getting the weights of all items at once. Please note that this does not do anything different or special, but is slightly faster than iterating yourself.

Returns a reference to a \*(C`HASH\*(C' with the item names as keys and weights as values, or \*(C`undef\*(C' on error.

TO DO

- Add support for non-naive weights via either custom code or method name

SUPPORT

Bugs should be submitted via the \s-1CPAN\s0 bug tracker, located at

http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Algorithm-Dependency <http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Algorithm-Dependency>

For general comments, contact the author.

AUTHOR

Adam Kennedy <[email protected]>

RELATED TO Algorithm::Dependency::Weight…

Algorithm::Dependency, Algorithm::Dependency::Source

COPYRIGHT

Copyright 2003 - 2009 Adam Kennedy.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

The full text of the license can be found in the \s-1LICENSE\s0 file included with this module.