core/systems/ShareSys.h
author David Anderson <dvander@alliedmods.net>
Fri Feb 16 03:47:10 2007 +0000 (2007-02-16)
changeset 501 e209a7296936
parent 370 d3a484f98f6d
child 653 ef60870067ff
permissions -rw-r--r--
removed this potential feature, not useful enough
dvander@370
     1
/**
dvander@370
     2
 * ===============================================================
dvander@370
     3
 * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
dvander@370
     4
 * ===============================================================
dvander@370
     5
 *
dvander@370
     6
 * This file is not open source and may not be copied without explicit
dvander@370
     7
 * written permission of AlliedModders LLC.  This file may not be redistributed 
dvander@370
     8
 * in whole or significant part.
dvander@370
     9
 * For information, see LICENSE.txt or http://www.sourcemod.net/license.php
dvander@370
    10
 *
dvander@370
    11
 * Version: $Id$
dvander@370
    12
 */
dvander@370
    13
dvander@229
    14
#ifndef _INCLUDE_SOURCEMOD_SHARESYSTEM_H_
dvander@229
    15
#define _INCLUDE_SOURCEMOD_SHARESYSTEM_H_
dvander@229
    16
dvander@229
    17
#include <IShareSys.h>
dvander@229
    18
#include <IHandleSys.h>
dvander@229
    19
#include <sh_list.h>
dvander@229
    20
#include "sm_globals.h"
dvander@229
    21
#include "sourcemod.h"
dvander@229
    22
dvander@229
    23
using namespace SourceHook;
dvander@229
    24
dvander@229
    25
namespace SourceMod
dvander@229
    26
{
dvander@229
    27
	struct IdentityToken_t
dvander@229
    28
	{
dvander@229
    29
		Handle_t ident;
dvander@229
    30
	};
dvander@229
    31
};
dvander@229
    32
dvander@229
    33
struct IfaceInfo
dvander@229
    34
{
dvander@229
    35
	SMInterface *iface;
dvander@304
    36
	IExtension *owner;
dvander@229
    37
};
dvander@229
    38
dvander@229
    39
class ShareSystem : 
dvander@229
    40
	public IShareSys,
dvander@229
    41
	public SMGlobalClass,
dvander@229
    42
	public IHandleTypeDispatch
dvander@229
    43
{
dvander@229
    44
public:
dvander@229
    45
	ShareSystem();
dvander@229
    46
public: //IShareSys
dvander@304
    47
	bool AddInterface(IExtension *myself, SMInterface *pIface);
dvander@229
    48
	bool RequestInterface(const char *iface_name, 
dvander@229
    49
		unsigned int iface_vers,
dvander@304
    50
		IExtension *mysql,
dvander@229
    51
		SMInterface **pIface);
dvander@312
    52
	void AddNatives(IExtension *myself, const sp_nativeinfo_t *natives);
dvander@229
    53
	IdentityType_t CreateIdentType(const char *name);
dvander@229
    54
	IdentityType_t FindIdentType(const char *name);
dvander@229
    55
	IdentityToken_t *CreateIdentity(IdentityType_t type);
dvander@229
    56
	void DestroyIdentType(IdentityType_t type);
dvander@229
    57
	void DestroyIdentity(IdentityToken_t *identity);
dvander@324
    58
	void AddDependency(IExtension *myself, const char *filename, bool require, bool autoload);
dvander@229
    59
public: //SMGlobalClass
dvander@229
    60
	/* Pre-empt in case anything tries to register idents early */
dvander@229
    61
	void OnSourceModStartup(bool late);
dvander@229
    62
	void OnSourceModShutdown();
dvander@229
    63
public: //IHandleTypeDispatch
dvander@229
    64
	void OnHandleDestroy(HandleType_t type, void *object);
dvander@229
    65
public:
dvander@229
    66
	IdentityToken_t *CreateCoreIdentity();
dvander@304
    67
	void RemoveInterfaces(IExtension *pExtension);
dvander@229
    68
public:
dvander@229
    69
	inline IdentityToken_t *GetIdentRoot()
dvander@229
    70
	{
dvander@229
    71
		return &m_IdentRoot;
dvander@229
    72
	}
dvander@229
    73
private:
dvander@229
    74
	List<IfaceInfo> m_Interfaces;
dvander@229
    75
	HandleType_t m_TypeRoot;
dvander@229
    76
	IdentityToken_t m_IdentRoot;
dvander@229
    77
	HandleType_t m_IfaceType;
dvander@229
    78
	IdentityType_t m_CoreType;
dvander@229
    79
};
dvander@229
    80
dvander@229
    81
extern ShareSystem g_ShareSys;
dvander@229
    82
dvander@229
    83
#endif //_INCLUDE_SOURCEMOD_SHARESYSTEM_H_