/usr/share/perl5/TM/Index/Reified.pm is in libtm-perl 1.56-7.
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 | package TM::Index::Reified;
use strict;
use warnings;
use Data::Dumper;
use TM;
use base qw(TM::Index);
=pod
=head1 NAME
TM::Index::Reified - Topic Maps, Indexing support (reification axis)
=head1 SYNOPSIS
# somehow get a map (any subclass of TM will do)
my $tm = ...
# one option: create an eager index (immediate population)
use TM::Index::Reified;
my $idx = new TM::Index::Reified ($tm, closed => 1);
# for most operations which involve is_reified to be called
# should be much faster
=head1 DESCRIPTION
This index can be attached to a map if the method C<is_reified> is about to be called very often.
Most likely you will want to have the index to be closed, i.e. populated.
The package inherits most of its functionality from L<TM::Index>.
B<NOTE>: As for all indices, modifications of the underlying map are not reflected automatically.
=head1 INTERFACE
=head2 Constructor
The constructor/destructor is inherited from L<TM::Index>.
=head2 Methods
=over
=item B<attach>, B<detach>
This index attaches in a special way to the map.
=cut
sub attach {
my $self = shift;
my $tm = shift || $self->{map};
warn "attach";
$tm->{rindex} = [ $self ]; # there will only be one, but we will use one indirection to fool MLDBM
warn "end attach ". Dumper $tm->{rindex};
}
sub detach {
my $self = shift;
my $tm = shift || $self->{map};
warn "detach";
$tm->{rindex} = undef;
$self->{map} = undef; # regardless whether this is loose coupling or not
}
=pod
=item B<populate>
Invoking this, you will fill this index with authoritative information.
=cut
sub populate {
my $self = shift;
my $tm = shift || $self->{map};
my $cache = $self->{cache};
warn "reif populate";
my $mid2iid = $tm->{mid2iid};
map { $cache->{ $mid2iid->{$_}->[TM->ADDRESS] } = $_ } # invert the index
grep { $mid2iid->{$_}->[TM->ADDRESS] } # only those which "reify" something survive
keys %{$mid2iid}; # all toplet tids
$self->{closed} = 1;
}
=back
=head1 SEE ALSO
L<TM>, L<TM::Index>
=head1 COPYRIGHT AND LICENSE
Copyright 2010 by Robert Barta, E<lt>drrho@cpan.orgE<gt>
This library is free software; you can redistribute it and/or modify it under the same terms as Perl
itself.
=cut
our $VERSION = 0.4;
1;
__END__
|