3 * ================================================================
5 * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
6 * ================================================================
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License,
10 * version 3.0, as published by the Free Software Foundation.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 * As a special exception, AlliedModders LLC gives you permission to
21 * link the code of this program (as well as its derivative works) to
22 * "Half-Life 2," the "Source Engine," the "SourcePawn JIT," and any
23 * Game MODs that run on software by the Valve Corporation. You must
24 * obey the GNU General Public License in all respects for all other
25 * code used. Additionally, AlliedModders LLC grants this exception
26 * to all derivative works. AlliedModders LLC defines further
27 * exceptions, found in LICENSE.txt (as of this writing, version
28 * JULY-31-2007), or <http://www.sourcemod.net/license.php>.
33 #ifndef _INCLUDE_SOURCEMOD_SHARESYSTEM_H_
34 #define _INCLUDE_SOURCEMOD_SHARESYSTEM_H_
36 #include <IShareSys.h>
37 #include <IHandleSys.h>
39 #include "sm_globals.h"
40 #include "sourcemod.h"
42 using namespace SourceHook;
46 struct IdentityToken_t
63 public IHandleTypeDispatch
68 bool AddInterface(IExtension *myself, SMInterface *pIface);
69 bool RequestInterface(const char *iface_name,
70 unsigned int iface_vers,
72 SMInterface **pIface);
73 void AddNatives(IExtension *myself, const sp_nativeinfo_t *natives);
74 IdentityType_t CreateIdentType(const char *name);
75 IdentityType_t FindIdentType(const char *name);
76 IdentityToken_t *CreateIdentity(IdentityType_t type, void *ptr);
77 void DestroyIdentType(IdentityType_t type);
78 void DestroyIdentity(IdentityToken_t *identity);
79 void AddDependency(IExtension *myself, const char *filename, bool require, bool autoload);
80 public: //SMGlobalClass
81 /* Pre-empt in case anything tries to register idents early */
82 void OnSourceModStartup(bool late);
83 void OnSourceModShutdown();
84 public: //IHandleTypeDispatch
85 void OnHandleDestroy(HandleType_t type, void *object);
87 IdentityToken_t *CreateCoreIdentity();
88 void RemoveInterfaces(IExtension *pExtension);
90 inline IdentityToken_t *GetIdentRoot()
95 List<IfaceInfo> m_Interfaces;
96 HandleType_t m_TypeRoot;
97 IdentityToken_t m_IdentRoot;
98 HandleType_t m_IfaceType;
99 IdentityType_t m_CoreType;
102 extern ShareSystem g_ShareSys;
104 #endif //_INCLUDE_SOURCEMOD_SHARESYSTEM_H_