core/AdminCache.h
author David Anderson <dvander@alliedmods.net>
Wed Jan 24 21:51:49 2007 +0000 (2007-01-24)
changeset 335 02cc96355b09
child 336 3f4073018d76
permissions -rw-r--r--
Initial import of admin system (groups and overrides done)
Added a "clear" function for Tries
dvander@335
     1
#ifndef _INCLUDE_SOURCEMOD_ADMINCACHE_H_
dvander@335
     2
#define _INCLUDE_SOURCEMOD_ADMINCACHE_H_
dvander@335
     3
dvander@335
     4
#include "sm_memtable.h"
dvander@335
     5
#include <sm_trie.h>
dvander@335
     6
#include <IAdminSystem.h>
dvander@335
     7
#include "sm_globals.h"
dvander@335
     8
dvander@335
     9
#define GRP_MAGIC_SET		0xDEADFADE
dvander@335
    10
#define GRP_MAGIC_UNSET		0xFACEFACE
dvander@335
    11
dvander@335
    12
struct AdminGroup
dvander@335
    13
{
dvander@335
    14
	uint32_t magic;					/* Magic flag, for memory validation (ugh) */
dvander@335
    15
	bool immune_global;				/* Global immunity? */
dvander@335
    16
	bool immune_default;			/* Default immunity? */
dvander@335
    17
	/* Immune from target table (-1 = nonexistant)
dvander@335
    18
	 * [0] = number of entries
dvander@335
    19
	 * [1...N] = immune targets
dvander@335
    20
	 */
dvander@335
    21
	int immune_table;			
dvander@335
    22
	Trie *pCmdTable;				/* Command override table (can be NULL) */
dvander@335
    23
	Trie *pCmdGrpTable;				/* Command group override table (can be NULL) */
dvander@335
    24
	int next_grp;					/* Next group in the chain */
dvander@335
    25
	int prev_grp;					/* Previous group in the chain */
dvander@335
    26
	int nameidx;					/* Name */
dvander@335
    27
	bool addflags[AdminFlags_TOTAL];	/* Additive flags */
dvander@335
    28
};
dvander@335
    29
dvander@335
    30
class AdminCache : 
dvander@335
    31
	public IAdminSystem,
dvander@335
    32
	public SMGlobalClass
dvander@335
    33
{
dvander@335
    34
public:
dvander@335
    35
	AdminCache();
dvander@335
    36
	~AdminCache();
dvander@335
    37
public: //SMGlobalClass
dvander@335
    38
	void OnSourceModAllInitialized();
dvander@335
    39
public: //IAdminSystem
dvander@335
    40
	/** Command cache stuff */
dvander@335
    41
	void AddCommandOverride(const char *cmd, OverrideType type, AdminFlag flag);
dvander@335
    42
	bool GetCommandOverride(const char *cmd, OverrideType type, AdminFlag *pFlag);
dvander@335
    43
	void UnsetCommandOverride(const char *cmd, OverrideType type);
dvander@335
    44
	void DumpCommandOverrideCache(OverrideType type);
dvander@335
    45
	/** Group cache stuff */
dvander@335
    46
	GroupId AddGroup(const char *group_name);
dvander@335
    47
	GroupId FindGroupByName(const char *group_name);
dvander@335
    48
	void SetGroupAddFlag(GroupId id, AdminFlag flag, bool enabled);
dvander@335
    49
	bool GetGroupAddFlag(GroupId id, AdminFlag flag);
dvander@335
    50
	unsigned int GetGroupAddFlags(GroupId Id, AdminFlag flags[], unsigned int total);
dvander@335
    51
	void SetGroupGenericImmunity(GroupId id, ImmunityType type, bool enabled);
dvander@335
    52
	bool GetGroupGenericImmunity(GroupId id, ImmunityType type);
dvander@335
    53
	void InvalidateGroup(GroupId id);
dvander@335
    54
	void InvalidateGroupCache();
dvander@335
    55
	void AddGroupImmunity(GroupId id, GroupId other_id);
dvander@335
    56
	unsigned int GetGroupImmunityCount(GroupId id);
dvander@335
    57
	GroupId GetGroupImmunity(GroupId id, unsigned int number);
dvander@335
    58
	void AddGroupCommandOverride(GroupId id, const char *name, OverrideType type, OverrideRule rule);
dvander@335
    59
	bool GetGroupCommandOverride(GroupId id, const char *name, OverrideType type, OverrideRule *pRule);
dvander@335
    60
private:
dvander@335
    61
	void _AddCommandOverride(const char *cmd, AdminFlag flag);
dvander@335
    62
	void _AddCommandGroupOverride(const char *group, AdminFlag flag);
dvander@335
    63
	bool _GetCommandOverride(const char *cmd, AdminFlag *pFlag);
dvander@335
    64
	bool _GetCommandGroupOverride(const char *group, AdminFlag *pFlag);
dvander@335
    65
	void _UnsetCommandOverride(const char *cmd);
dvander@335
    66
	void _UnsetCommandGroupOverride(const char *group);
dvander@335
    67
public:
dvander@335
    68
	BaseStringTable *m_pStrings;
dvander@335
    69
	BaseMemTable *m_pMemory;
dvander@335
    70
	Trie *m_pCmdOverrides;
dvander@335
    71
	Trie *m_pCmdGrpOverrides;
dvander@335
    72
	int m_FirstGroup;
dvander@335
    73
	int m_LastGroup;
dvander@335
    74
	int m_FreeGroupList;
dvander@335
    75
	Trie *m_pGroups;
dvander@335
    76
};
dvander@335
    77
dvander@335
    78
extern AdminCache g_Admins;
dvander@335
    79
dvander@335
    80
#endif //_INCLUDE_SOURCEMOD_ADMINCACHE_H_