3 * =============================================================================
5 * Copyright (C) 2004-2007 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_globals.h"
39 #include "sourcemod.h"
41 using namespace SourceHook;
45 struct IdentityToken_t
55 bool operator ==(const IfaceInfo &info)
57 return (info.iface == iface && info.owner == owner);
66 public IHandleTypeDispatch
71 bool AddInterface(IExtension *myself, SMInterface *pIface);
72 bool RequestInterface(const char *iface_name,
73 unsigned int iface_vers,
75 SMInterface **pIface);
76 void AddNatives(IExtension *myself, const sp_nativeinfo_t *natives);
77 IdentityType_t CreateIdentType(const char *name);
78 IdentityType_t FindIdentType(const char *name);
79 IdentityToken_t *CreateIdentity(IdentityType_t type, void *ptr);
80 void DestroyIdentType(IdentityType_t type);
81 void DestroyIdentity(IdentityToken_t *identity);
82 void AddDependency(IExtension *myself, const char *filename, bool require, bool autoload);
83 public: //SMGlobalClass
84 /* Pre-empt in case anything tries to register idents early */
85 void OnSourceModStartup(bool late);
86 void OnSourceModShutdown();
87 public: //IHandleTypeDispatch
88 void OnHandleDestroy(HandleType_t type, void *object);
90 IdentityToken_t *CreateCoreIdentity();
91 void RemoveInterfaces(IExtension *pExtension);
93 inline IdentityToken_t *GetIdentRoot()
98 List<IfaceInfo> m_Interfaces;
99 HandleType_t m_TypeRoot;
100 IdentityToken_t m_IdentRoot;
101 HandleType_t m_IfaceType;
102 IdentityType_t m_CoreType;
105 extern ShareSystem g_ShareSys;
107 #endif //_INCLUDE_SOURCEMOD_SHARESYSTEM_H_