1package Heap::Elem::RefRev; 2 3use strict; 4use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); 5 6require Exporter; 7require AutoLoader; 8 9@ISA = qw(Exporter AutoLoader Heap::Elem); 10 11# No names exported. 12@EXPORT = ( ); 13 14# Available for export: RefRElem (to allocate a new Heap::Elem::RefRev value) 15@EXPORT_OK = qw( RefRElem ); 16 17$VERSION = '0.71'; 18 19 20# Preloaded methods go here. 21 22sub new { 23 my $class = shift; 24 $class = ref($class) || $class; 25 26 # two slot array, 0 for the reference value, 1 for use by Heap 27 my $self = [ shift, undef ]; 28 29 return bless $self, $class; 30} 31 32sub RefRElem { # exportable synonym for new 33 Heap::Elem::RefRev->new(@_); 34} 35 36# get or set value slot 37sub val { 38 my $self = shift; 39 @_ ? ($self->[0] = shift) : $self->[0]; 40} 41 42# get or set heap slot 43sub heap { 44 my $self = shift; 45 @_ ? ($self->[1] = shift) : $self->[1]; 46} 47 48# compare two RefRev elems - the objects must have a compatible cmp method 49sub cmp { 50 my $self = shift; 51 my $other = shift; 52 return $other->[0]->cmp( $self->[0] ); 53} 54 55# Autoload methods go after =cut, and are processed by the autosplit program. 56 571; 58__END__ 59 60=head1 NAME 61 62Heap::Elem::RefRev - Perl extension for reversed Object Reverence Heap Elements 63 64=head1 SYNOPSIS 65 66 use Heap::Elem::RefRev( RefRElem ); 67 use Heap::Fibonacci; 68 69 my $heap = Heap::Fibonacci->new; 70 my $elem; 71 72 foreach $i ( 1..100 ) { 73 $obj = myObject->new( $i ); 74 $elem = RefRElem( $obj ); 75 $heap->add( $elem ); 76 } 77 78 while( defined( $elem = $heap->extract_top ) ) { 79 # assume that myObject object have a method I<printable> 80 print "Largest is ", $elem->val->printable, "\n"; 81 } 82 83=head1 DESCRIPTION 84 85Heap::Elem::RefRev is used to wrap object reference values into an 86element that can be managed on a heap. Each referenced object must 87have a method I<cmp> which can compare itself with any of the other 88objects that have references on the same heap. These comparisons 89must be consistant with normal arithmetic. The top of the heap will 90have the largest (according to I<cmp>) element still remaining. 91(See L<Heap::Elem::Ref> if you want the heap to always return the 92smallest element.) 93 94The details of the Elem interface are described in L<Heap::Elem>. 95 96The details of using a Heap interface are described in L<Heap>. 97 98=head1 AUTHOR 99 100John Macdonald, jmm@perlwolf.com 101 102=head1 COPYRIGHT 103 104Copyright 1998-2003, O'Reilly & Associates. 105 106This code is distributed under the same copyright terms as perl itself. 107 108=head1 SEE ALSO 109 110Heap(3), Heap::Elem(3), Heap::Elem::Ref(3). 111 112=cut 113