// src/backend/plugin.hh - Copyright 2005, 2006, University
//               of Padova, dept. of Pure and Applied
//               Mathematics
//
// This file is part of SGPEMv2.
//
// This is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// SGPEMv2 is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with SGPEMv2; if not, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

#ifndef SGPEMV2__PLUGIN_HH
#define SGPEMV2__PLUGIN_HH 1

#include "config.h"

#ifdef __cplusplus
extern "C"
{
#endif

  /** \file plugin.hh
   * All loadable modules that want to act as plugins
   * for SGPEMv2 should implement this interface. 
   * Only the header file containing this interface 
   * should be provided by the backend library. Every plugin 
   * will then implement its set of static functions. 
   * Thus every plugin will export these very symbols 
   * outside its DSO.
   */

  /** \brief Called when a plugin is loaded and enabled
   *
   * Sets up the plugin's initial state and 
   * performs needed actions before its usage can start.
   */
  SG_DLLEXPORT void           sgpem__Plugin__on_init();

  SG_DLLEXPORT void           sgpem__Plugin__on_exit();
  SG_DLLEXPORT const char*   sgpem__Plugin__describe();
  SG_DLLEXPORT const char*   sgpem__Plugin__get_name();
  SG_DLLEXPORT const char*    sgpem__Plugin__get_author();
  SG_DLLEXPORT float        sgpem__Plugin__get_version();

  // To know why SG_DLLEXPORT must go *before* the return
  // value, see http://gcc.gnu.org/ml/gcc-help/2005-04/msg00340.html

#ifdef  __cplusplus
}
#endif

#endif
