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 "sm_globals.h"
40 #include "sourcemod.h"
42 using namespace SourceHook;
46 struct IdentityToken_t
56 bool operator ==(const IfaceInfo &info)
58 return (info.iface == iface && info.owner == owner);
71 SPVM_NATIVE_FUNC func;
78 IPluginFunction *call;
84 SPVM_NATIVE_FUNC func;
86 ReplaceNative replacement;
93 public IHandleTypeDispatch
95 friend class CNativeOwner;
99 bool AddInterface(IExtension *myself, SMInterface *pIface);
100 bool RequestInterface(const char *iface_name,
101 unsigned int iface_vers,
103 SMInterface **pIface);
104 void AddNatives(IExtension *myself, const sp_nativeinfo_t *natives);
105 IdentityType_t CreateIdentType(const char *name);
106 IdentityType_t FindIdentType(const char *name);
107 IdentityToken_t *CreateIdentity(IdentityType_t type, void *ptr);
108 void DestroyIdentType(IdentityType_t type);
109 void DestroyIdentity(IdentityToken_t *identity);
110 void AddDependency(IExtension *myself, const char *filename, bool require, bool autoload);
111 void RegisterLibrary(IExtension *myself, const char *name);
112 void OverrideNatives(IExtension *myself, const sp_nativeinfo_t *natives);
113 public: //SMGlobalClass
114 /* Pre-empt in case anything tries to register idents early */
116 void OnSourceModShutdown();
117 public: //IHandleTypeDispatch
118 void OnHandleDestroy(HandleType_t type, void *object);
120 IdentityToken_t *CreateCoreIdentity();
121 void RemoveInterfaces(IExtension *pExtension);
123 inline IdentityToken_t *GetIdentRoot()
128 void BindNativesToPlugin(CPlugin *pPlugin, bool bCoreOnly);
129 void BindNativeToPlugin(CPlugin *pPlugin, NativeEntry *pEntry);
130 NativeEntry *AddFakeNative(IPluginFunction *pFunc, const char *name, SPVM_FAKENATIVE_FUNC func);
131 NativeEntry *FindNative(const char *name);
133 NativeEntry *AddNativeToCache(CNativeOwner *pOwner, const sp_nativeinfo_t *ntv);
134 void ClearNativeFromCache(CNativeOwner *pOwner, const char *name);
135 void BindNativeToPlugin(CPlugin *pPlugin,
138 NativeEntry *pEntry);
140 List<IfaceInfo> m_Interfaces;
141 HandleType_t m_TypeRoot;
142 IdentityToken_t m_IdentRoot;
143 HandleType_t m_IfaceType;
144 IdentityType_t m_CoreType;
145 KTrie<NativeEntry *> m_NtvCache;
148 extern ShareSystem g_ShareSys;
150 #endif //_INCLUDE_SOURCEMOD_SHARESYSTEM_H_