// src/backend/module.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 MODULE_HH
#define MODULE_HH 1

#include "config.h"

#include <sgpemv2/invalid_plugin_exception.hh>

#include <glibmm/module.h>
#include <glibmm/ustring.h>

namespace sgpem
{
  class Module;

  class SG_DLLEXPORT Module : public Glib::Module
  {
  public:
    Module(const Glib::ustring& identifier) throw(InvalidPluginException);

    void set_enabled(bool enabled = true);

    Glib::ustring get_name() const;

    Glib::ustring get_author() const;

    Glib::ustring describe() const;

    float get_version() const;

    bool get_enabled() const;

  private:
    typedef void (*f_void)(void);
    typedef const char* (*f_ustring)(void);
    typedef float (*f_float)(void);

    bool _enabled;
    Glib::ustring _id;

    f_void    on_init_ptr;
    f_void    on_exit_ptr;
    f_ustring describe_ptr;
    f_ustring get_name_ptr;
    f_ustring get_author_ptr;
    f_float   get_version_ptr;

  }
  ; //~ class Module

} //~ namespace sgpem

#endif

