[LON-CAPA-cvs] cvs: loncom /interface lonnavmaps.pm
bowersj2
lon-capa-cvs@mail.lon-capa.org
Fri, 01 Nov 2002 18:24:46 -0000
bowersj2 Fri Nov 1 13:24:46 2002 EDT
Modified files:
/loncom/interface lonnavmaps.pm
Log:
Moving towards the improved iterator.
Index: loncom/interface/lonnavmaps.pm
diff -u loncom/interface/lonnavmaps.pm:1.93 loncom/interface/lonnavmaps.pm:1.94
--- loncom/interface/lonnavmaps.pm:1.93 Tue Oct 29 15:26:03 2002
+++ loncom/interface/lonnavmaps.pm Fri Nov 1 13:24:45 2002
@@ -2,7 +2,7 @@
# The LearningOnline Network with CAPA
# Navigate Maps Handler
#
-# $Id: lonnavmaps.pm,v 1.93 2002/10/29 20:26:03 bowersj2 Exp $
+# $Id: lonnavmaps.pm,v 1.94 2002/11/01 18:24:45 bowersj2 Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1769,7 +1769,7 @@
sub getIterator {
my $self = shift;
- my $iterator = Apache::lonnavmaps::iterator->new($self, shift, shift,
+ my $iterator = Apache::lonnavmaps::DFSiterator->new($self, shift, shift,
shift, undef, shift,
$ENV{'form.direction'});
return $iterator;
@@ -2028,6 +2028,59 @@
sub FORWARD { return 1; } # go forward
sub BACKWARD { return 2; }
+sub new {
+ # magic invocation to create a class instance
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = {};
+
+ $self->{NAV_MAP} = shift;
+ return undef unless ($self->{NAV_MAP});
+
+ # Handle the parameters
+ $self->{FIRST_RESOURCE} = shift || $self->{NAV_MAP}->firstResource();
+ $self->{FINISH_RESOURCE} = shift || $self->{NAV_MAP}->finishResource();
+
+ # If the given resources are just the ID of the resource, get the
+ # objects
+ if (!ref($self->{FIRST_RESOURCE})) { $self->{FIRST_RESOURCE} =
+ $self->{NAV_MAP}->getById($self->{FIRST_RESOURCE}); }
+ if (!ref($self->{FINISH_RESOURCE})) { $self->{FINISH_RESOURCE} =
+ $self->{NAV_MAP}->getById($self->{FINISH_RESOURCE}); }
+
+ $self->{FILTER} = shift;
+
+ # A hash, used as a set, of resource already seen
+ $self->{ALREADY_SEEN} = shift;
+ if (!defined($self->{ALREADY_SEEN})) { $self->{ALREADY_SEEN} = {} };
+ $self->{CONDITION} = shift;
+
+ # Now, we need to pre-process the map, by walking forward and backward
+ # over the parts of the map we're going to look at.
+
+ # Now we're ready to start iterating.
+}
+
+1;
+
+package Apache::lonnavmaps::DFSiterator;
+
+# UNDOCUMENTED: This is a private library, it should not generally be used
+# by the outside world. What it does is walk through the nav map in a
+# depth-first fashion. This is not appropriate for most uses, but it is
+# used by the main iterator for pre-processing. It also is able to isolate
+# much of the complexity of the main iterator, so the main iterator is much
+# simpler.
+
+# Here are the tokens for the iterator, replicated from iterator for convenience:
+
+sub BEGIN_MAP { return 1; } # begining of a new map
+sub END_MAP { return 2; } # end of the map
+sub BEGIN_BRANCH { return 3; } # beginning of a branch
+sub END_BRANCH { return 4; } # end of a branch
+sub FORWARD { return 1; } # go forward
+sub BACKWARD { return 2; }
+
# Params: nav map, start resource, end resource, filter, condition,
# already seen hash ref
@@ -2236,7 +2289,7 @@
my $finishResource = $self->{HERE}->map_finish();
$self->{RECURSIVE_ITERATOR} =
- Apache::lonnavmaps::iterator->new ($self->{NAV_MAP}, $firstResource,
+ Apache::lonnavmaps::DFSiterator->new ($self->{NAV_MAP}, $firstResource,
$finishResource, $self->{FILTER}, $self->{ALREADY_SEEN},
$self->{CONDITION}, $self->{DIRECTION});
}