This file is indexed.

/usr/share/perl5/Tree/Simple/VisitorFactory.pm is in libtree-simple-visitorfactory-perl 0.12-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
package Tree::Simple::VisitorFactory;

use strict;
use warnings;

our $VERSION = '0.12';

sub new {
    my ($class) = @_;
    return bless \$class;
}

sub get {
    my ($class, $visitor) = @_;
    (defined($visitor)) || die "Insufficient Arguments : You must specify a Visitor to load";
    $visitor = "Tree::Simple::Visitor::$visitor";
    eval "require $visitor";
    die "Illegal Operation : Could not load Visitor ($visitor) because $@" if $@;
    return $visitor->new();
}

*getVisitor = \&get;

1;

__END__

=head1 NAME

Tree::Simple::VisitorFactory - A factory object for dispensing Visitor objects

=head1 SYNOPSIS

  use Tree::Simple::VisitorFactory;

  my $tf = Tree::Simple::VisitorFactory->new();

  my $visitor = $tf->get("PathToRoot");

  # or call it as a class method
  my $visitor = Tree::Simple::VisitorFactory->getVisitor("PathToRoot");

=head1 DESCRIPTION

This object is really just a factory for dispensing Tree::Simple::Visitor::* objects. It is not required to use this package in order to use all the Visitors, it is just a somewhat convenient way to avoid having to type their long class names.

I considered making this a Singleton, but I did not because I thought that some people might not want that. I know that I am very picky about using Singletons, especially in multiprocess environments like mod_perl, so I implemented the smallest instance I knew how to, and made sure all other methods could be called as class methods too.

=head1 METHODS

=over 4

=item B<new>

Returns an minimal instance of this object, basically just a reference back to the package (literally, see the source if you care).

=item B<get ($visitor_type)>

Attempts to load the C<$visitor_type> and returns an instance of it if successful. If no C<$visitor_type> is specified an exception is thrown, if C<$visitor_type> fails to load, and exception is thrown.

=item B<getVisitor ($visitor_type)>

This is an alias of C<get>.

=back

=head1 AVAILABLE VISITORS

This distribution provides a number of Visitor objects which can be loaded just by giving their name. Below is a description of the available Visitors and a sort description of what they do. I have attempted to classify the Visitors into groups which are related to their use.

This factory will load any module contained inside the B<Tree::Simple::Visitor::*> namespace. Given a name, it will attempt to C<require> the module B<Tree::Simple::Visitor::E<lt>I<Name>E<gt>.pm>. This allows others to create Visitors which can be accessed with this factory, without needed to include them in this distribution.

=head2 Search/Path Related Visitors

=over 4

=item B<PathToRoot>

Given a Tree::Simple object, this Visitor will find the path back to the tree's root node.

=item B<FindByPath>

Given a path and Tree::Simple hierarchy, this Visitor will attempt to find the node specified by the path.

=item B<FindByUID>

Given a UID and Tree::Simple hierarchy, this Visitor will attempt to find the node with the same UID.

=item B<FindByNodeValue>

Given a node value and Tree::Simple hierarchy, this Visitor will attempt to find the node with the same node value.

=back

=head2 Traversal Visitors

=over 4

=item B<BreadthFirstTraversal>

This implements a breadth-first traversal of a Tree::Simple hierarchy.

=item B<PostOrderTraversal>

Post-order traversal is a variation of the depth-first traversal in which the sub-tree's are processed I<before> the parent.

=item B<PreOrderTraversal>

Pre-order traversal is a depth-first traversal method in which the sub-tree's are processed I<after> the parent.

=back

=head2 FileSystem Visitors

=over 4

=item B<LoadDirectoryTree>

This visitor can be used to load a directory tree into a Tree::Simple hierarchy.

=item B<CreateDirectoryTree>

This visitor can be used to create a set of directories and files from a Tree::Simple object hierarchy.

=back

=head2 Conversion Visitors

=over 4

=item B<FromNestedArray>

Given a tree constructed from nested arrays, this Visitor will create the equivalent Tree::Simple hierarchy.

=item B<ToNestedArray>

Given a Tree::Simple hierarchy, this Visitor will create the equivalent tree constructed from nested arrays.

=item B<FromNestedHash>

Given a tree constructed from nested hashs, this Visitor will create the equivalent Tree::Simple hierarchy.

=item B<ToNestedHash>

Given a Tree::Simple hierarchy, this Visitor will create the equivalent tree constructed from nested hashes.

=back

=head2 Reflective Visitors

=over 4

=item B<LoadClassHierarchy>

Given a class name or instance, this Visitor will create a Tree::Simple hierarchy which models the classes inheritance hierarchy.

=back

=head2 Misc. Visitors

=over 4

=item B<GetAllDescendents>

Given a Tree::Simple instance this Visitor will return all the descendents recursively on down the hierarchy.

=item B<Sort>

This implements a multi-level sort of a Tree::Simple hierarchy.

=item B<VariableDepthClone>

A Visitor for cloning parts of Tree::Simple hierarchy

=back

=head1 BUGS

None that I am aware of. Of course, if you find a bug, let me know, and I will be sure to fix it.

=head1 CODE COVERAGE

I use B<Devel::Cover> to test the code coverage of my tests, below is the B<Devel::Cover> report on this module test suite.

 -------------------------------------------- ------ ------ ------ ------ ------ ------ ------
 File                                           stmt branch   cond    sub    pod   time  total
 -------------------------------------------- ------ ------ ------ ------ ------ ------ ------
 Tree/Simple/VisitorFactory.pm                 100.0  100.0    n/a  100.0  100.0    0.4  100.0
 Tree/Simple/Visitor/BreadthFirstTraversal.pm  100.0  100.0   66.7  100.0  100.0    2.5   96.3
 Tree/Simple/Visitor/PostOrderTraversal.pm     100.0  100.0   77.8  100.0  100.0    1.7   96.3
 Tree/Simple/Visitor/PreOrderTraversal.pm      100.0    n/a   33.3  100.0  100.0    0.7   90.5
 Tree/Simple/Visitor/CreateDirectoryTree.pm    100.0   85.7   86.7  100.0  100.0    3.4   95.8
 Tree/Simple/Visitor/LoadClassHierarchy.pm     100.0   73.1   33.3  100.0  100.0    4.9   89.2
 Tree/Simple/Visitor/LoadDirectoryTree.pm      100.0   89.3   85.2  100.0  100.0   26.1   94.7
 Tree/Simple/Visitor/FindByNodeValue.pm        100.0  100.0   86.7  100.0  100.0    3.1   98.3
 Tree/Simple/Visitor/FindByPath.pm             100.0  100.0   66.7  100.0  100.0    1.2   97.9
 Tree/Simple/Visitor/FindByUID.pm              100.0  100.0   86.7  100.0  100.0    2.9   98.3
 Tree/Simple/Visitor/GetAllDescendents.pm      100.0  100.0   77.8  100.0  100.0    2.3   97.1
 Tree/Simple/Visitor/PathToRoot.pm             100.0   87.5   75.0  100.0  100.0    0.8   95.1
 Tree/Simple/Visitor/Sort.pm                   100.0  100.0   77.8  100.0  100.0    8.8   98.1
 Tree/Simple/Visitor/ToNestedArray.pm          100.0  100.0   66.7  100.0  100.0    1.5   96.5
 Tree/Simple/Visitor/ToNestedHash.pm           100.0  100.0   66.7  100.0  100.0    1.4   96.5
 Tree/Simple/Visitor/FromNestedArray.pm        100.0   94.4   81.8  100.0  100.0    8.1   96.6
 Tree/Simple/Visitor/FromNestedHash.pm         100.0   91.7   77.8  100.0  100.0    4.8   95.9
 Tree/Simple/Visitor/VariableDepthClone.pm     100.0  100.0   66.7  100.0  100.0   25.5   97.3
 -------------------------------------------- ------ ------ ------ ------ ------ ------ ------
 Total                                         100.0   93.8   76.3  100.0  100.0  100.0   96.1
 -------------------------------------------- ------ ------ ------ ------ ------ ------ ------

=head1 SEE ALSO

These Visitor classes are meant to work with L<Tree::Simple> hierarchies, you should refer to that module for more information.

=head1 AUTHOR

stevan little, E<lt>stevan@iinteractive.comE<gt>

Ron Savage E<lt>ron@savage.net.auE<gt> has taken over maintenance as of V 0.11.

=head1 COPYRIGHT AND LICENSE

Copyright 2004, 2005 by Infinity Interactive, Inc.

L<http://www.iinteractive.com>

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

=cut