core/interfaces/IShareSys.h
author Borja Ferrer <faluco@alliedmods.net>
Fri Jan 05 00:42:22 2007 +0000 (2007-01-05)
changeset 268 d6fed4f05e07
parent 229 7819a42069e4
child 304 fa485d2f25ed
permissions -rw-r--r--
Fixed CPlayer init, it was called too early.
nothing important on the logger
dvander@140
     1
#ifndef _INCLUDE_SOURCEMOD_IFACE_SHARE_SYS_H_
dvander@140
     2
#define _INCLUDE_SOURCEMOD_IFACE_SHARE_SYS_H_
dvander@140
     3
dvander@211
     4
#include <sp_vm_types.h>
dvander@211
     5
dvander@229
     6
#define	NO_IDENTITY		0
dvander@215
     7
dvander@140
     8
namespace SourceMod
dvander@140
     9
{
dvander@229
    10
	struct IdentityToken_t;
dvander@229
    11
	typedef unsigned int		HandleType_t;
dvander@229
    12
	typedef HandleType_t		IdentityType_t;
dvander@140
    13
	/**
dvander@140
    14
	 * @brief Defines the base functionality required by a shared interface.
dvander@140
    15
	 */
dvander@140
    16
	class SMInterface
dvander@140
    17
	{
dvander@140
    18
	public:
dvander@140
    19
		/**
dvander@140
    20
		 * @brief Must return an integer defining the interface's version.
dvander@140
    21
		 */
dvander@140
    22
		virtual unsigned int GetInterfaceVersion() =0;
dvander@140
    23
dvander@140
    24
		/**
dvander@140
    25
		 * @brief Must return a string defining the interface's unique name.
dvander@140
    26
		 */
dvander@140
    27
		virtual const char *GetInterfaceName() =0;
dvander@140
    28
dvander@140
    29
		/**
dvander@140
    30
		 * @brief Must return whether the requested version number is backwards comaptible.
dvander@140
    31
		 * Note: This can be overridden for breaking changes or custom versioning.
dvander@140
    32
		 * 
dvander@140
    33
		 * @param version		Version number to compare against.
dvander@140
    34
		 * @return				True if compatible, false otherwise.
dvander@140
    35
		 */
dvander@140
    36
		virtual bool IsVersionCompatible(unsigned int version)
dvander@140
    37
		{
dvander@140
    38
			if (version > GetInterfaceVersion())
dvander@140
    39
			{
dvander@140
    40
				return false;
dvander@140
    41
			}
dvander@140
    42
dvander@140
    43
			return true;
dvander@140
    44
		}
dvander@140
    45
	};
dvander@140
    46
dvander@140
    47
	/**
dvander@140
    48
	 * @brief Tracks dependencies and fires dependency listeners.
dvander@140
    49
	 */
dvander@140
    50
	class IShareSys
dvander@140
    51
	{
dvander@140
    52
	public:
dvander@140
    53
		/**
dvander@229
    54
		 * @brief Adds an interface to the global interface system.
dvander@140
    55
		 *
dvander@140
    56
		 * @param iface			Interface pointer (must be unique).
dvander@211
    57
		 * @param token			Parent token of the module/interface.
dvander@229
    58
		 * @return				True on success, false otherwise.
dvander@140
    59
		 */
dvander@229
    60
		virtual bool AddInterface(SMInterface *iface, IdentityToken_t *token) =0;
dvander@140
    61
dvander@140
    62
		/**
dvander@140
    63
		 * @brief Requests an interface from the global interface system.
dvander@140
    64
		 * If found, the interface's internal reference count will be increased.
dvander@140
    65
		 *
dvander@140
    66
		 * @param iface_name	Interface name.
dvander@140
    67
		 * @param iface_vers	Interface version to attempt to match.
dvander@211
    68
		 * @param token			Object requesting this interface, in order to track dependencies.
dvander@140
    69
		 * @param pIface		Pointer to store the return value in.
dvander@140
    70
		 */
dvander@140
    71
		virtual bool RequestInterface(const char *iface_name, 
dvander@211
    72
										unsigned int iface_vers,
dvander@229
    73
										IdentityToken_t *token,
dvander@229
    74
										SMInterface **pIface) =0;
dvander@140
    75
dvander@140
    76
		/**
dvander@211
    77
		 * @brief Adds a list of natives to the global native pool.
dvander@211
    78
		 * 
dvander@211
    79
		 * @param token			Identity token of parent object.
dvander@211
    80
		 * @param natives		Array of natives to add, NULL terminated.
dvander@140
    81
		 */
dvander@229
    82
		virtual void AddNatives(IdentityToken_t *token, const sp_nativeinfo_t *natives[]) =0;
dvander@229
    83
dvander@229
    84
		/**
dvander@229
    85
		 * @brief Creates a new identity type.
dvander@229
    86
		 * NOTE: Module authors should never need to use this.  Due to the current implementation,
dvander@229
    87
		 * there is a hardcoded limit of 15 types.  Core uses up a few, so think carefully!
dvander@229
    88
		 *
dvander@229
    89
		 * @param name			String containing type name.  Must not be empty or NULL.
dvander@229
    90
		 * @return				A new HandleType_t identifier, or 0 on failure.
dvander@229
    91
		 */
dvander@229
    92
		virtual IdentityType_t CreateIdentType(const char *name) =0;
dvander@229
    93
dvander@229
    94
		/**
dvander@229
    95
		 * @brief Finds an identity type by name.
dvander@229
    96
		 * DEFAULT IDENTITY TYPES:
dvander@229
    97
		 *  "PLUGIN"	- An IPlugin object.
dvander@229
    98
		 *  "MODULE"	- An IModule object.
dvander@229
    99
		 *  "CORE"		- An SMGlobalClass or other singleton.
dvander@229
   100
		 * 
dvander@229
   101
		 * @param name			String containing type name to search for.
dvander@229
   102
		 * @return				A HandleType_t identifier if found, 0 otherwise.
dvander@229
   103
		 */
dvander@229
   104
		virtual IdentityType_t FindIdentType(const char *name) =0;
dvander@229
   105
dvander@229
   106
		/**
dvander@229
   107
		 * @brief Creates a new identity token.  This token is guaranteed to be unique
dvander@229
   108
		 * amongst all other open identities.
dvander@229
   109
		 *
dvander@229
   110
		 * @param type			Identity type.
dvander@229
   111
		 * @return				A new IdentityToken_t identifier.
dvander@229
   112
		 */
dvander@229
   113
		virtual IdentityToken_t *CreateIdentity(IdentityType_t type) =0;
dvander@229
   114
dvander@229
   115
		/** 
dvander@229
   116
		 * @brief Destroys an identity type.  Note that this will delete any identities
dvander@229
   117
		 * that are under this type.  
dvander@229
   118
		 *
dvander@229
   119
		 * @param type			Identity type.
dvander@229
   120
		 */
dvander@229
   121
		virtual void DestroyIdentType(IdentityType_t type) =0;
dvander@229
   122
dvander@229
   123
		/**
dvander@229
   124
		 * @brief Destroys an identity token.  Any handles being owned by this token, or
dvander@229
   125
		 * any handles being 
dvander@229
   126
		 *
dvander@229
   127
		 * @param identity		Identity to remove.
dvander@229
   128
		 */
dvander@229
   129
		virtual void DestroyIdentity(IdentityToken_t *identity) =0;
dvander@140
   130
	};
dvander@140
   131
};
dvander@140
   132
dvander@140
   133
#endif //_INCLUDE_SOURCEMOD_IFACE_SHARE_SYS_H_