⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 compoundfilewriter.pm

📁 外国人写的Perl搜索引擎程序
💻 PM
字号:
package KinoSearch::Index::CompoundFileWriter;use strict;use warnings;use KinoSearch::Util::ToolSet;use base qw( KinoSearch::Util::Class );BEGIN {    __PACKAGE__->init_instance_vars(        # constructor params / members        invindex => undef,        filename => undef,        # members        entries => undef,        merged  => 0,    );}sub init_instance {    my $self = shift;    $self->{entries} = {};}# Add a file to the list of files-to-merge.sub add_file {    my ( $self, $filename ) = @_;    croak("filename '$filename' already added")        if $self->{entries}{$filename};    $self->{entries}{$filename} = 1;}# Write a compound file.sub finish {    my $self           = shift;    my $invindex       = $self->{invindex};    my @files_to_merge = keys %{ $self->{entries} };    croak('no entries defined') unless @files_to_merge;    # ensure that the file only gets written once; open the outfile    croak('merge already performed') if $self->{merged};    $self->{merged} = 1;    my $outstream = $invindex->open_outstream( $self->{filename} );    # write number of files, plus data_offset placeholders    my @to_write = map { ( 0, $_ ) } @files_to_merge;    unshift @to_write, scalar @files_to_merge;    my $template = 'V' . ( 'QT' x scalar @files_to_merge );    $outstream->lu_write( $template, @to_write );    # copy data    my @data_offsets;    my $out_fh = $outstream;    for my $file (@files_to_merge) {        push @data_offsets, $outstream->tell;        my $instream = $invindex->open_instream($file);        $outstream->absorb($instream);    }    # rewrite number of files, plus real data offsets    $outstream->seek(0);    @to_write = map { ( shift @data_offsets, $_ ) } @files_to_merge;    unshift @to_write, scalar @files_to_merge;    $outstream->lu_write( $template, @to_write );    $outstream->close;}1;__END__=begin devdocs=head1 NAMEKinoSearch::Index::CompoundFileWriter - consolidate invindex files=head1 DESCRIPTIONCompoundFileWriter takes a list of pre-existing files and writes a new filewhich combines them into one.  It writes a header containing filenames andfilepointers, then writes a data section containing file content.  Theoriginal files are not deleted, so cleanup must be done externally.=head1 COPYRIGHTCopyright 2005-2007 Marvin Humphrey=head1 LICENSE, DISCLAIMER, BUGS, etc.See L<KinoSearch|KinoSearch> version 0.163.=end devdocs=cut

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -