/*
  Copyright (c) 2009-2010 Gordon Gremme <gordon@gremme.org>

  Permission to use, copy, modify, and distribute this software for any
  purpose with or without fee is hereby granted, provided that the above
  copyright notice and this permission notice appear in all copies.

  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/

#ifndef PLUGINS_H
#define PLUGINS_H

#include "gth/align_dna.h"
#include "gth/align_protein.h"
#include "gth/input.h"
#include "gth/jump_table.h"
#include "gth/matcher.h"
#include "gth/seq_con.h"

typedef struct {
  GthInputFilePreprocessor file_preprocessor;         /* required */
  GthSeqConConstructor seq_con_new;                   /* required */
  GthMatcherArgumentsNew matcher_arguments_new;       /* required */
  GthMatcherArgumentsDelete matcher_arguments_delete; /* required */
  GthMatcherRunner matcher_runner;                    /* required */
  const char *gth_version;                            /* required */
  GtShowVersionFunc gth_version_func;                 /* required */

  /* the optional jump table methods */
  GthJumpTableNew jump_table_new;
  GthJumpTableNewReverse jump_table_new_reverse;
  GthJumpTableDelete jump_table_delete;
  GthDNACompletePathMatrixJT dna_complete_path_matrix_jt;
  GthProteinCompletePathMatrixJT protein_complete_path_matrix_jt;
} GthPlugins;

#endif
