public/IShareSys.h
author Scott Ehlert <ds@alliedmods.net>
Mon Feb 05 08:58:03 2007 +0000 (2007-02-05)
changeset 432 77112e9620fa
parent 379 b3c99c22ba80
child 700 2b715374ce25
permissions -rw-r--r--
Worst commit ever, but I have removed some unnecessary things
dvander@372
     1
/**
dvander@375
     2
 * vim: set ts=4 :
dvander@372
     3
 * ===============================================================
dvander@376
     4
 * SourceMod, Copyright (C) 2004-2007 AlliedModders LLC. 
dvander@376
     5
 * All rights reserved.
dvander@372
     6
 * ===============================================================
dvander@372
     7
 *
dvander@379
     8
 *  This file is part of the SourceMod/SourcePawn SDK.  This file may only be 
dvander@379
     9
 * used or modified under the Terms and Conditions of its License Agreement, 
dvander@379
    10
 * which is found in public/licenses/LICENSE.txt.  As of this notice, derivative 
dvander@379
    11
 * works must be licensed under the GNU General Public License (version 2 or 
dvander@379
    12
 * greater).  A copy of the GPL is included under public/licenses/GPL.txt.
dvander@379
    13
 * 
dvander@379
    14
 * To view the latest information, see: http://www.sourcemod.net/license.php
dvander@372
    15
 *
dvander@372
    16
 * Version: $Id$
dvander@372
    17
 */
dvander@372
    18
dvander@324
    19
#ifndef _INCLUDE_SOURCEMOD_IFACE_SHARE_SYS_H_
dvander@324
    20
#define _INCLUDE_SOURCEMOD_IFACE_SHARE_SYS_H_
dvander@324
    21
dvander@372
    22
/**
dvander@372
    23
 * @file IShareSys.h
dvander@372
    24
 * @brief Defines the Share System, responsible for shared resources and dependencies.
dvander@372
    25
 *
dvander@372
    26
 *  The Share System also manages the Identity_t data type, although this is internally
dvander@372
    27
 * implemented with the Handle System.
dvander@372
    28
 */
dvander@372
    29
dvander@324
    30
#include <sp_vm_types.h>
dvander@324
    31
dvander@324
    32
dvander@324
    33
namespace SourceMod
dvander@324
    34
{
dvander@324
    35
	class IExtension;
dvander@324
    36
	struct IdentityToken_t;
dvander@372
    37
dvander@372
    38
	/** Forward declaration from IHandleSys.h */
dvander@324
    39
	typedef unsigned int		HandleType_t;
dvander@372
    40
dvander@372
    41
	/** Forward declaration from IHandleSys.h */
dvander@324
    42
	typedef HandleType_t		IdentityType_t;
dvander@372
    43
dvander@324
    44
	/**
dvander@324
    45
	 * @brief Defines the base functionality required by a shared interface.
dvander@324
    46
	 */
dvander@324
    47
	class SMInterface
dvander@324
    48
	{
dvander@324
    49
	public:
dvander@324
    50
		/**
dvander@324
    51
		 * @brief Must return an integer defining the interface's version.
dvander@324
    52
		 */
dvander@324
    53
		virtual unsigned int GetInterfaceVersion() =0;
dvander@324
    54
dvander@324
    55
		/**
dvander@324
    56
		 * @brief Must return a string defining the interface's unique name.
dvander@324
    57
		 */
dvander@324
    58
		virtual const char *GetInterfaceName() =0;
dvander@324
    59
dvander@324
    60
		/**
dvander@324
    61
		 * @brief Must return whether the requested version number is backwards comaptible.
dvander@324
    62
		 * Note: This can be overridden for breaking changes or custom versioning.
dvander@324
    63
		 * 
dvander@324
    64
		 * @param version		Version number to compare against.
dvander@324
    65
		 * @return				True if compatible, false otherwise.
dvander@324
    66
		 */
dvander@324
    67
		virtual bool IsVersionCompatible(unsigned int version)
dvander@324
    68
		{
dvander@324
    69
			if (version > GetInterfaceVersion())
dvander@324
    70
			{
dvander@324
    71
				return false;
dvander@324
    72
			}
dvander@324
    73
dvander@324
    74
			return true;
dvander@324
    75
		}
dvander@324
    76
	};
dvander@324
    77
dvander@324
    78
	/**
dvander@324
    79
	 * @brief Tracks dependencies and fires dependency listeners.
dvander@324
    80
	 */
dvander@324
    81
	class IShareSys
dvander@324
    82
	{
dvander@324
    83
	public:
dvander@324
    84
		/**
dvander@324
    85
		 * @brief Adds an interface to the global interface system.
dvander@324
    86
		 *
dvander@324
    87
		 * @param myself		Object adding this interface, in order to track dependencies.
dvander@324
    88
		 * @param iface			Interface pointer (must be unique).
dvander@324
    89
		 * @return				True on success, false otherwise.
dvander@324
    90
		 */
dvander@324
    91
		virtual bool AddInterface(IExtension *myself, SMInterface *iface) =0;
dvander@324
    92
dvander@324
    93
		/**
dvander@324
    94
		 * @brief Requests an interface from the global interface system.
dvander@324
    95
		 * If found, the interface's internal reference count will be increased.
dvander@324
    96
		 *
dvander@324
    97
		 * @param iface_name	Interface name.
dvander@324
    98
		 * @param iface_vers	Interface version to attempt to match.
dvander@324
    99
		 * @param myself		Object requesting this interface, in order to track dependencies.
dvander@324
   100
		 * @param pIface		Pointer to store the return value in.
dvander@324
   101
		 */
dvander@324
   102
		virtual bool RequestInterface(const char *iface_name, 
dvander@324
   103
										unsigned int iface_vers,
dvander@324
   104
										IExtension *myself,
dvander@324
   105
										SMInterface **pIface) =0;
dvander@324
   106
dvander@324
   107
		/**
dvander@324
   108
		 * @brief Adds a list of natives to the global native pool, to be bound on plugin load.
dvander@324
   109
		 * NOTE: Adding natives currently does not bind them to any loaded plugins.
dvander@324
   110
		 * You must manually bind late natives.
dvander@324
   111
		 * 
dvander@372
   112
		 * @param myself		Identity token of parent object.
dvander@324
   113
		 * @param natives		Array of natives to add.  The last entry must have NULL members.
dvander@324
   114
		 */
dvander@324
   115
		virtual void AddNatives(IExtension *myself, const sp_nativeinfo_t *natives) =0;
dvander@324
   116
dvander@324
   117
		/**
dvander@324
   118
		 * @brief Creates a new identity type.
dvander@324
   119
		 * NOTE: Module authors should never need to use this.  Due to the current implementation,
dvander@324
   120
		 * there is a hardcoded limit of 15 types.  Core uses up a few, so think carefully!
dvander@324
   121
		 *
dvander@324
   122
		 * @param name			String containing type name.  Must not be empty or NULL.
dvander@324
   123
		 * @return				A new HandleType_t identifier, or 0 on failure.
dvander@324
   124
		 */
dvander@324
   125
		virtual IdentityType_t CreateIdentType(const char *name) =0;
dvander@324
   126
dvander@324
   127
		/**
dvander@324
   128
		 * @brief Finds an identity type by name.
dvander@324
   129
		 * DEFAULT IDENTITY TYPES:
dvander@324
   130
		 *  "PLUGIN"	- An IPlugin object.
dvander@324
   131
		 *  "MODULE"	- An IModule object.
dvander@324
   132
		 *  "CORE"		- An SMGlobalClass or other singleton.
dvander@324
   133
		 * 
dvander@324
   134
		 * @param name			String containing type name to search for.
dvander@324
   135
		 * @return				A HandleType_t identifier if found, 0 otherwise.
dvander@324
   136
		 */
dvander@324
   137
		virtual IdentityType_t FindIdentType(const char *name) =0;
dvander@324
   138
dvander@324
   139
		/**
dvander@324
   140
		 * @brief Creates a new identity token.  This token is guaranteed to be unique
dvander@324
   141
		 * amongst all other open identities.
dvander@324
   142
		 *
dvander@324
   143
		 * @param type			Identity type.
dvander@324
   144
		 * @return				A new IdentityToken_t identifier.
dvander@324
   145
		 */
dvander@324
   146
		virtual IdentityToken_t *CreateIdentity(IdentityType_t type) =0;
dvander@324
   147
dvander@324
   148
		/** 
dvander@324
   149
		 * @brief Destroys an identity type.  Note that this will delete any identities
dvander@324
   150
		 * that are under this type.  
dvander@324
   151
		 *
dvander@324
   152
		 * @param type			Identity type.
dvander@324
   153
		 */
dvander@324
   154
		virtual void DestroyIdentType(IdentityType_t type) =0;
dvander@324
   155
dvander@324
   156
		/**
dvander@324
   157
		 * @brief Destroys an identity token.  Any handles being owned by this token, or
dvander@324
   158
		 * any handles being 
dvander@324
   159
		 *
dvander@324
   160
		 * @param identity		Identity to remove.
dvander@324
   161
		 */
dvander@324
   162
		virtual void DestroyIdentity(IdentityToken_t *identity) =0;
dvander@324
   163
dvander@324
   164
dvander@324
   165
		/**
dvander@324
   166
		 * @brief Requires an extension.  This tells SourceMod that without this extension,
dvander@324
   167
		 * your extension should not be loaded.  The name should not include the ".dll" or
dvander@324
   168
		 * the ".so" part of the file name.
dvander@324
   169
		 *
dvander@324
   170
		 * @param myself		IExtension pointer to yourself.
dvander@324
   171
		 * @param filename		File of extension to require.
dvander@324
   172
		 * @param require		Whether or not this extension is a required dependency.
dvander@324
   173
		 * @param autoload		Whether or not to autoload this extension.
dvander@324
   174
		 */
dvander@324
   175
		virtual void AddDependency(IExtension *myself, const char *filename, bool require, bool autoload) =0;
dvander@324
   176
	};
ds@432
   177
}
dvander@324
   178
dvander@324
   179
#endif //_INCLUDE_SOURCEMOD_IFACE_SHARE_SYS_H_