/**
 * @file
 * $Id$
 * $Revision$
 * $Author$
 * $Date$
 *
 * This file is part of The iWear Framework.
 * In particular this file is part of the Framework Core Library
 *
 * The iWear Framework 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 as in version 2 of the License.

 * 
 * The iWear Framework 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
 * The iWear Framework; if not, write to the Free Software Foundation, Inc., 59
 * Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

#ifndef __IWEAR_SERVICE_H
#include <iwear/service.h>
#endif

/**
 * This function creates a service object. This functions may return NULL in
 * case of an error. 
 * @todo Check if it is C++98 save to throw exception over library boundaries.
 * (Note to myself: Usually this should be the case, since the extern "C" only
 * specifies the linkage. Nevertheless it might be possible that anything in
 * between compiled with gcc (and not g++) may get crazy about this. Perhaps we
 * should check for __cplusplus__ defined and issue an error if not?)
 */
extern "C" iwear::Service* create_service( void );

/**
 * Every Service must be passed to this function upon destruction. Never,
 * really never delete this object yourself as this will mess up your memory
 * space.
 */
extern "C" void destroy_service( iwear::Service* );

/**
 * Gets the iwear version identifier. The plugin will not be loaded if it
 * differs from the currently running system
 */
extern "C" uint32_t get_iwear_version( void );

/**
 * Before loading a Service, the loader can here look for the service name
 */
extern "C" const char * get_service_name( void );

/**
 * In case there are different revisions of the same service plugin, a version
 * should be displayed here. If the author of such a service plugin agrees over
 * a certain standard, he can also parse this as a version identifier for
 * communcating.
 */
extern "C" const char * get_service_version( void );

extern "C" service_type get_service_type( void );

