|
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_ |