Added helper stock to check if a command exists. (
bug 5510, r=asherkin)
3 * =============================================================================
5 * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
6 * =============================================================================
8 * This program is free software; you can redistribute it and/or modify it under
9 * the terms of the GNU General Public License, version 3.0, as published by the
10 * Free Software Foundation.
12 * This program is distributed in the hope that it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
17 * You should have received a copy of the GNU General Public License along with
18 * this program. If not, see <http://www.gnu.org/licenses/>.
20 * As a special exception, AlliedModders LLC gives you permission to link the
21 * code of this program (as well as its derivative works) to "Half-Life 2," the
22 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
23 * by the Valve Corporation. You must obey the GNU General Public License in
24 * all respects for all other code used. Additionally, AlliedModders LLC grants
25 * this exception to all derivative works. AlliedModders LLC defines further
26 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
27 * or <http://www.sourcemod.net/license.php>.
32 #ifndef _INCLUDE_SOURCEMOD_SHARESYSTEM_H_
33 #define _INCLUDE_SOURCEMOD_SHARESYSTEM_H_
35 #include <IShareSys.h>
36 #include <IHandleSys.h>
38 #include <sm_trie_tpl.h>
39 #include "common_logic.h"
41 using namespace SourceHook;
45 struct IdentityToken_t
55 bool operator ==(const IfaceInfo &info)
57 return (info.iface == iface && info.owner == owner);
70 SPVM_NATIVE_FUNC func;
77 IPluginFunction *call;
83 SPVM_NATIVE_FUNC func;
85 ReplaceNative replacement;
92 IFeatureProvider *provider;
98 public IHandleTypeDispatch
100 friend class CNativeOwner;
104 bool AddInterface(IExtension *myself, SMInterface *pIface);
105 bool RequestInterface(const char *iface_name,
106 unsigned int iface_vers,
108 SMInterface **pIface);
109 void AddNatives(IExtension *myself, const sp_nativeinfo_t *natives);
110 IdentityType_t CreateIdentType(const char *name);
111 IdentityType_t FindIdentType(const char *name);
112 IdentityToken_t *CreateIdentity(IdentityType_t type, void *ptr);
113 void DestroyIdentType(IdentityType_t type);
114 void DestroyIdentity(IdentityToken_t *identity);
115 void AddDependency(IExtension *myself, const char *filename, bool require, bool autoload);
116 void RegisterLibrary(IExtension *myself, const char *name);
117 void OverrideNatives(IExtension *myself, const sp_nativeinfo_t *natives);
118 void AddCapabilityProvider(IExtension *myself, IFeatureProvider *provider,
120 void DropCapabilityProvider(IExtension *myself, IFeatureProvider *provider,
122 public: //SMGlobalClass
123 /* Pre-empt in case anything tries to register idents early */
125 void OnSourceModShutdown();
126 public: //IHandleTypeDispatch
127 void OnHandleDestroy(HandleType_t type, void *object);
129 IdentityToken_t *CreateCoreIdentity();
130 void RemoveInterfaces(IExtension *pExtension);
131 FeatureStatus TestFeature(IPluginRuntime *pRuntime, FeatureType feature, const char *name);
132 FeatureStatus TestNative(IPluginRuntime *pRuntime, const char *name);
133 FeatureStatus TestCap(const char *name);
135 inline IdentityToken_t *GetIdentRoot()
140 void BindNativesToPlugin(CPlugin *pPlugin, bool bCoreOnly);
141 void BindNativeToPlugin(CPlugin *pPlugin, NativeEntry *pEntry);
142 NativeEntry *AddFakeNative(IPluginFunction *pFunc, const char *name, SPVM_FAKENATIVE_FUNC func);
143 NativeEntry *FindNative(const char *name);
145 NativeEntry *AddNativeToCache(CNativeOwner *pOwner, const sp_nativeinfo_t *ntv);
146 void ClearNativeFromCache(CNativeOwner *pOwner, const char *name);
147 void BindNativeToPlugin(CPlugin *pPlugin,
150 NativeEntry *pEntry);
152 List<IfaceInfo> m_Interfaces;
153 HandleType_t m_TypeRoot;
154 IdentityToken_t m_IdentRoot;
155 HandleType_t m_IfaceType;
156 IdentityType_t m_CoreType;
157 KTrie<NativeEntry *> m_NtvCache;
158 KTrie<Capability> m_caps;
161 extern ShareSystem g_ShareSys;
163 #endif //_INCLUDE_SOURCEMOD_SHARESYSTEM_H_