| Class-Visitor documentation | Contained in the Class-Visitor distribution. |
Class::Iter - Iterator superclass for Class::Visitor
use Class::Visitor;
visitor_class 'CLASS', 'SUPER', { TEMPLATE };
visitor_class 'CLASS', 'SUPER', [ TEMPLATE ];
$obj = CLASS->new ();
$iter = $obj->iter;
$iter = $obj->iter ($parent, $array, $index);
$iter->parent;
$iter->is_iter;
$iter->root;
$iter->rootpath;
$iter->next;
$iter->at_end;
$iter->delegate;
$iter->is_same ($obj);
Class::Iter defines the majority of iterator methods for iterator
classes created by Class::Visitor.
parent returns the parent of this iterator, or undef if this is
the root object.
is_iter returns true indicating that this object is an iterator
(all other is_TYPE queries would be passed on to the delegate).
root returns the root parent of this iterator.
rootpath returns an array of all iterators between and including
the root and this iterator.
next returns the iterator of the object after this object in the
parent's element. If there is no next object, next returns
$self.
at_end returns true if this is the last object in the parent's
element, i.e. it returns true if next would return $self.
delegate returns the object that this iterator stands-in for.
is_same returns true if $obj is the delegate or if $obj is an
iterator pointing to the same object.
Ken MacLeod, ken@bitsko.slc.ut.us
perl(1), Class::Visitor(3).
| Class-Visitor documentation | Contained in the Class-Visitor distribution. |
# # Copyright (C) 1997 Ken MacLeod # Class::Iter is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. # # $Id: Iter.pm,v 1.1.1.1 1997/10/18 16:20:00 ken Exp $ # package Class::Iter; use strict; # # Internally, a Class::Iter is an array, # # [0] -- delegate # [1] -- parent iterator # [2] -- parent's array # [3] -- current index # # sub parent { # $self->{parent} return $_[0]->[1]; } sub is_iter { return 1; } sub root { return $_[0] if !defined $_[0]->[1]; # $self->{parent}->root; return $_[0]->[1]->root; } sub rootpath { if (defined $_[0]->[1]) { return ($_[0]->[1]->rootpath, $_[0]); } else { return ($_[0]); } } # return a new proxy for the next object sub next { my @self = @$_[0]; return $_[0] if ($self[3] == $#{$self[2]}); shift (@self); return $self[1][$self[2] + 1]->iter (@self); } sub at_end { return $_[3] == $#{$_[2]}; } # returns what I'm pretending to be sub delegate { return $_[0]->[0]; } # `is_same' returns true if the two iterators are pointing to the same # object or if our delegate *is* the object sub is_same { my $self = shift; my $obj = shift; return ($self->[0] == $obj || (ref ($self) eq ref ($obj) && $self->[0] == $obj->[0])); } package Class::Scalar::Iter; @Class::Scalar::Iter::ISA = qw{Class::Iter}; 1; __END__