diff -r ea5c1f855ce0 -r 02cc96355b09 core/AdminCache.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/AdminCache.h Wed Jan 24 21:51:49 2007 +0000 @@ -0,0 +1,80 @@ +#ifndef _INCLUDE_SOURCEMOD_ADMINCACHE_H_ +#define _INCLUDE_SOURCEMOD_ADMINCACHE_H_ + +#include "sm_memtable.h" +#include +#include +#include "sm_globals.h" + +#define GRP_MAGIC_SET 0xDEADFADE +#define GRP_MAGIC_UNSET 0xFACEFACE + +struct AdminGroup +{ + uint32_t magic; /* Magic flag, for memory validation (ugh) */ + bool immune_global; /* Global immunity? */ + bool immune_default; /* Default immunity? */ + /* Immune from target table (-1 = nonexistant) + * [0] = number of entries + * [1...N] = immune targets + */ + int immune_table; + Trie *pCmdTable; /* Command override table (can be NULL) */ + Trie *pCmdGrpTable; /* Command group override table (can be NULL) */ + int next_grp; /* Next group in the chain */ + int prev_grp; /* Previous group in the chain */ + int nameidx; /* Name */ + bool addflags[AdminFlags_TOTAL]; /* Additive flags */ +}; + +class AdminCache : + public IAdminSystem, + public SMGlobalClass +{ +public: + AdminCache(); + ~AdminCache(); +public: //SMGlobalClass + void OnSourceModAllInitialized(); +public: //IAdminSystem + /** Command cache stuff */ + void AddCommandOverride(const char *cmd, OverrideType type, AdminFlag flag); + bool GetCommandOverride(const char *cmd, OverrideType type, AdminFlag *pFlag); + void UnsetCommandOverride(const char *cmd, OverrideType type); + void DumpCommandOverrideCache(OverrideType type); + /** Group cache stuff */ + GroupId AddGroup(const char *group_name); + GroupId FindGroupByName(const char *group_name); + void SetGroupAddFlag(GroupId id, AdminFlag flag, bool enabled); + bool GetGroupAddFlag(GroupId id, AdminFlag flag); + unsigned int GetGroupAddFlags(GroupId Id, AdminFlag flags[], unsigned int total); + void SetGroupGenericImmunity(GroupId id, ImmunityType type, bool enabled); + bool GetGroupGenericImmunity(GroupId id, ImmunityType type); + void InvalidateGroup(GroupId id); + void InvalidateGroupCache(); + void AddGroupImmunity(GroupId id, GroupId other_id); + unsigned int GetGroupImmunityCount(GroupId id); + GroupId GetGroupImmunity(GroupId id, unsigned int number); + void AddGroupCommandOverride(GroupId id, const char *name, OverrideType type, OverrideRule rule); + bool GetGroupCommandOverride(GroupId id, const char *name, OverrideType type, OverrideRule *pRule); +private: + void _AddCommandOverride(const char *cmd, AdminFlag flag); + void _AddCommandGroupOverride(const char *group, AdminFlag flag); + bool _GetCommandOverride(const char *cmd, AdminFlag *pFlag); + bool _GetCommandGroupOverride(const char *group, AdminFlag *pFlag); + void _UnsetCommandOverride(const char *cmd); + void _UnsetCommandGroupOverride(const char *group); +public: + BaseStringTable *m_pStrings; + BaseMemTable *m_pMemory; + Trie *m_pCmdOverrides; + Trie *m_pCmdGrpOverrides; + int m_FirstGroup; + int m_LastGroup; + int m_FreeGroupList; + Trie *m_pGroups; +}; + +extern AdminCache g_Admins; + +#endif //_INCLUDE_SOURCEMOD_ADMINCACHE_H_