NAME
    Pipeline - Generic pipeline interface

SYNOPSIS
      use Pipeline;
      my $pipeline = Pipeline->new();
      $pipeline->add_segment( @segments );
      $pipeline->dispatch();

DESCRIPTION
    "Pipelines" are a mechanism to process data. They are designed to be
    plugged together to make fairly complex operations act in a fairly
    straightforward manner, cleanly, and simply.

USING THE PIPELINE MODULE
    The usage of the generic pipeline module is fairly simple. You
    instantiate a Pipeline object by using the *new()* constructor.

    Segments can be added to the pipeline with the add_segment method.

    The store that the Pipeline will use can be set by calling the *store()*
    method later on. If a store is not set by the time a pipeline is
    executing then it will use a store of the type "Pipeline::Store::Simple"

    To start the pipeline running call the *dispatch()* method on your
    Pipeline object.

    To see what is being dispatched within a pipeline dispatch set the
    pipeline's debug value to true.

WRITING A PIPELINE
  INHERITANCE
    Pipelines are designed to be inherited from. The inheritance tree is
    somewhat warped and should look a little like this:

         MySegment --> Pipeline::Segment <--- Pipeline

    In other words, everything is a pipeline segment.

  METHODS
    The Pipeline class inherits from the "Pipeline::Segment" class and
    therefore also has any additional methods that its superclass may have.

    init()
        Things to do at construction time. If you do override this, its will
        often be fairly important that you call $self->SUPER::init(@_) to
        make sure that the setup is done correctly.

    add_segment( LIST )
        Adds a segment or segments to the pipeline.

    get_segment( INTEGER )
        Returns the segment located at the index specified by INTEGER

    del_segment( INTEGER )
        Deletes the segment located at the index specified by INTEGER

    dispatch()
        Starts the pipeline execution, returns the production or undef

    dispatch_loop( Pipeline, [ ARRAYREF ] )
        The "dispatch_loop" method performs the processing for the pipeline

    dispatch_segment( Pipeline::Segment )
        The "dispatch_segment" method handles the execution of an individual
        segment object.

    cleanups()
        Returns the cleanup pipeline. This is a pipeline in and of itself,
        and all the methods you can call on a pipeline can also be called on
        this.

    cleanup()
        Starts the cleanup pipeline going

    segments( [ value ] )
        "segments" gets and sets the value of the pipeline list. At
        initialization this is set to an array reference.

SEE ALSO
    "Pipeline::Segment", "Pipeline::Store", "Pipeline::Store::Simple"
    "Pipeline::Production"

AUTHORS
      James A. Duncan <jduncan@fotango.com>
      Leon Brocard <acme@astray.com>

COPYRIGHT
    Copyright 2003 Fotango Ltd. Licensed under the same terms as Perl
    itself.

