# ***********************************************
# 
# !!!! DO NOT EDIT !!!!
# 
# This file was auto-generated by Build.PL.
# 
# ***********************************************
# 
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
# 
#     http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

=encoding utf8

=head1 NAME

Lucy::Plan::Architecture - Configure major components of an index.

=head1 SYNOPSIS

    package MyArchitecture;
    use base qw( Lucy::Plan::Architecture );

    use LucyX::Index::ZlibDocWriter;
    use LucyX::Index::ZlibDocReader;

    sub register_doc_writer {
        my ( $self, $seg_writer ) = @_; 
        my $doc_writer = LucyX::Index::ZlibDocWriter->new(
            snapshot   => $seg_writer->get_snapshot,
            segment    => $seg_writer->get_segment,
            polyreader => $seg_writer->get_polyreader,
        );  
        $seg_writer->register(
            api       => "Lucy::Index::DocReader",
            component => $doc_writer,
        );  
        $seg_writer->add_writer($doc_writer);
    }

    sub register_doc_reader {
        my ( $self, $seg_reader ) = @_; 
        my $doc_reader = LucyX::Index::ZlibDocReader->new(
            schema   => $seg_reader->get_schema,
            folder   => $seg_reader->get_folder,
            segments => $seg_reader->get_segments,
            seg_tick => $seg_reader->get_seg_tick,
            snapshot => $seg_reader->get_snapshot,
        );  
        $seg_reader->register(
            api       => 'Lucy::Index::DocReader',
            component => $doc_reader,
        );  
    }
 
    package MySchema;
    use base qw( Lucy::Plan::Schema );
    
    sub architecture { 
        shift;
        return MyArchitecture->new(@_); 
    }

=head1 DESCRIPTION

By default, a Lucy index consists of several main parts: lexicon,
postings, stored documents, deletions, and highlight data.  The readers and
writers for that data are spawned by Architecture.  Each component operates
at the segment level; Architecture’s factory methods are used to build up
L<SegWriter|Lucy::Index::SegWriter> and
L<SegReader|Lucy::Index::SegReader>.

=head1 CONSTRUCTORS

=head2 new

    my $arch = Lucy::Plan::Architecture->new;

Constructor.  Takes no arguments.

=head1 METHODS

=head2 register_doc_writer

    $architecture->register_doc_writer($writer);

Spawn a DataWriter and L<register()|Lucy::Index::SegWriter/register> it with the supplied SegWriter,
adding it to the SegWriter’s writer stack.

=over

=item *

B<writer> - A SegWriter.

=back

=head2 register_doc_reader

    $architecture->register_doc_reader($reader);

Spawn a DocReader and register it with the supplied SegReader.

=over

=item *

B<reader> - A SegReader.

=back

=head1 INHERITANCE

Lucy::Plan::Architecture isa Clownfish::Obj.

=cut

