00001 /*************************************************************************** 00002 * * 00003 * (c) Art Tevs, MPI Informatik Saarbruecken * 00004 * mailto: <tevs@mpi-sb.mpg.de> * 00005 * * 00006 * This program is free software; you can redistribute it and/or modify * 00007 * it under the terms of the GNU General Public License as published by * 00008 * the Free Software Foundation; either version 2 of the License, or * 00009 * (at your option) any later version. * 00010 * * 00011 ***************************************************************************/ 00012 00013 #ifndef __PACKAGE_PLUGIN_H_ 00014 #define __PACKAGE_PLUGIN_H_ 00015 00016 //---------------------------------------------------------------------------------- 00017 // Includes 00018 //---------------------------------------------------------------------------------- 00019 #include "Prerequisities.h" 00020 00021 //---------------------------------------------------------------------------------- 00022 // Redefine Export/Import Macros for win32 systems 00023 //---------------------------------------------------------------------------------- 00024 #define _NRPackageExport 00025 00026 #if NR_PLATFORM == NR_PLATFORM_WIN32 00027 00028 // first we define our own export/import macro 00029 #if defined (BUILD_PLUGIN) 00030 # undef _NRPackageExport 00031 # define _NRPackageExport __declspec( dllexport ) 00032 #endif 00033 #if defined (BUILD_PACKAGE) 00034 # undef _NRPackageExport 00035 # define _NRPackageExport 00036 #endif 00037 00038 00039 // if we built a binding, so we should import from engine's main dll 00040 #if defined (BUILD_PACKAGE) || defined (BUILD_PLUGIN) 00041 # undef _NRExport 00042 # define _NRExport __declspec( dllimport ) 00043 #endif 00044 00045 #endif 00046 00047 00048 //---------------------------------------------------------------------------------- 00049 // Namespaces and classes 00050 //---------------------------------------------------------------------------------- 00051 namespace nrEngine { 00052 00053 //! Package abstract classes for the engine 00054 /** 00055 * Packages are loadtime plugins provide to the engine 00056 * new functionality. They do not linked within the engine library 00057 * but with application written for the engine. 00058 * 00059 * This is an abstract class providing some default methods 00060 * which has to be overwritten by the package. Later on we could 00061 * create a package manager, so it could initialize the packages 00062 * by user wish. 00063 * 00064 * \ingroup plugin 00065 **/ 00066 class _NRPackageExport Package{ 00067 public: 00068 00069 //! Initialize the binding and its subsystems 00070 Package() {} 00071 00072 //! Release used memory and close binded subsystem 00073 virtual ~Package() {} 00074 00075 //! Get the name of the binding 00076 virtual const std::string& getName() = 0; 00077 00078 //! Get a full name including authors, version,... strings of the bindings 00079 virtual const std::string& getFullName() = 0; 00080 00081 }; 00082 00083 }; 00084 00085 #endif 00086