⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 interface.h

📁 linux集群服务器软件代码包
💻 H
字号:
/* $Id: interface.h,v 1.4 2004/02/17 22:11:58 lars Exp $ *//* * Copyright (C) 2000 Alan Robertson <alanr@unix.sh> * This software licensed under the GNU LGPL. * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. *  * This library 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 * Lesser General Public License for more details. *  * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA * */#ifndef PILS_INTERFACE_H#  define PILS_INTERFACE_H#  ifndef PILS_PLUGIN_H#    include <pils/plugin.h>#  endif/***************************************************************************** * * The most basic interface type is the "IFManager" interface. * Each interface manager registers and deals with interfaces of a given type. * * Such an interface must be loaded before any plugins of it's type can * be loaded. * * In order to register any plugin of type "foo", we must load a interface of * type "Interface" named "foo".  This interface then manages the * registration of all interfaces of type foo. * * To bootstrap, we load a interface of type "Interface" named "Interface" * during the initialization of the plugin system. * * IFManagers will be autoloaded if certain conditions are met... * * If a IFManager is to be autoloaded, there must be one interface manager * per file, and the file must be named according to the type of the * interface it implements, and loaded in the directory named PI_IFMANAGER * ("Interface"). * *//* *	I'm unsure exactly which of the following structures *	are needed to write a interface, or a interface manager. *	We'll get that figured out and scope the defintions accordingly... *//* *	PILInterface (AKA struct PILInterface_s) holds the information *	we use to track a single interface manager. */struct PILInterface_s {	unsigned long		MagicNum;		PILInterfaceType*	interfacetype;	/* Parent pointer	*/	char *			interfacename;	/* malloced interface name */	PILInterface*		ifmanager;	/* plugin managing us	*/	void*			exports;	/* Exported Functions	*/						/* for this interface	*/	PILInterfaceFun		if_close;	/* Interface close operation*/	void*			ud_interface;	/* per-interface user data */	int			refcnt;		/* Ref count for plugin	*/	PILPlugin*		loadingpi;	/* Plugin that loaded us */};/* *	PILInterfaceType (AKA struct PILInterfaceType_s) holds the info *	we use to track the set of all interfaces of a single kind. */struct PILInterfaceType_s {	unsigned long		MagicNum;		char*			typename;	/* Our interface type name */	GHashTable*		interfaces;	/* The set of interfaces						 * of our type.  The						 * "values" are all						 * PILInterface * objects						 */	void*			ud_if_type;	/* per-interface-type user						   data*/	PILInterfaceUniv*	universe;	/* Pointer to parent (up) */	PILInterface*		ifmgr_ref;	/* Pointer to our interface						   manager */};/* *	PILInterfaceUniv (AKA struct PILInterfaceUniv_s) holds the information *	for all interfaces of all types.  From our point of view this is *	our universe ;-) */struct PILInterfaceUniv_s{	unsigned long		MagicNum;		GHashTable*		iftypes;	/*						 * Set of Interface Types						 * The values are all						 * PILInterfaceType objects						 */	struct PILPluginUniv_s*	piuniv;		/* parallel universe of						 * plugins						 */};#ifdef ENABLE_PLUGIN_MANAGER_PRIVATE/* * From here to the end is specific to interface managers. * This data is only needed by interface managers, and the interface * management system itself. * */typedef struct PILInterfaceOps_s		PILInterfaceOps;/* Interfaces imported by a IFManager interface */struct PILInterfaceImports_s {		/* Return current reference count */	int (*RefCount)(PILInterface * eifinfo);		/* Incr/Decr reference count */	int (*ModRefCount)(PILInterface*eifinfo, int plusminus);		/* Unregister us as a interface */	void (*ForceUnRegister)(PILInterface *eifinfo);		/* For each client */	void (*ForEachClientDel)(PILInterface* manangerif	,	gboolean(*f)(PILInterface* clientif, void * other)	,	void* other);};/* Interfaces exported by an InterfaceManager interface */struct PILInterfaceOps_s{/* *	These are the interfaces exported by an InterfaceManager to the *	interface management infrastructure.  These are not imported *	by interfaces - only the interface management infrastructure. */	/* RegisterInterface - register this interface */ 	PIL_rc (*RegisterInterface)(PILInterface* newif		,	void**	imports);	PIL_rc	(*UnRegisterInterface)(PILInterface*ifinfo); /* Unregister IF*/				/* And destroy PILInterface object */};#endif /* ENABLE_PLUGIN_MANAGER_PRIVATE */#endif /* PILS_INTERFACE_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -