core/GameConfigs.h
author David Anderson <dvander@alliedmods.net>
Sat Jun 16 08:35:26 2007 +0000 (2007-06-16)
changeset 949 4cc7fd7adb8a
parent 947 04dcaa8312e7
child 971 d3a94f3f1529
permissions -rw-r--r--
added handle reading to GameConfigManager
dvander@592
     1
/**
dvander@592
     2
 * vim: set ts=4 :
dvander@592
     3
 * ===============================================================
dvander@592
     4
 * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
dvander@592
     5
 * ===============================================================
dvander@592
     6
 *
dvander@592
     7
 * This file is not open source and may not be copied without explicit
dvander@592
     8
 * written permission of AlliedModders LLC.  This file may not be redistributed 
dvander@592
     9
 * in whole or significant part.
dvander@592
    10
 * For information, see LICENSE.txt or http://www.sourcemod.net/license.php
dvander@592
    11
 *
dvander@592
    12
 * Version: $Id$
dvander@592
    13
 */
dvander@592
    14
dvander@592
    15
#ifndef _INCLUDE_SOURCEMOD_CGAMECONFIGS_H_
dvander@592
    16
#define _INCLUDE_SOURCEMOD_CGAMECONFIGS_H_
dvander@592
    17
dvander@592
    18
#include <IGameConfigs.h>
dvander@592
    19
#include <ITextParsers.h>
dvander@592
    20
#include <sh_list.h>
dvander@592
    21
#include "sm_trie.h"
dvander@592
    22
#include "sm_globals.h"
dvander@592
    23
#include "sm_memtable.h"
dvander@592
    24
dvander@592
    25
using namespace SourceMod;
dvander@592
    26
using namespace SourceHook;
dvander@592
    27
dvander@592
    28
class SendProp;
dvander@592
    29
dvander@592
    30
class CGameConfig : 
dvander@592
    31
	public ITextListener_SMC,
dvander@592
    32
	public IGameConfig
dvander@592
    33
{
dvander@592
    34
public:
dvander@592
    35
	CGameConfig(const char *file);
dvander@592
    36
	~CGameConfig();
dvander@592
    37
public:
dvander@592
    38
	bool Reparse(char *error, size_t maxlength);
dvander@592
    39
public: //ITextListener_SMC
dvander@592
    40
	SMCParseResult ReadSMC_NewSection(const char *name, bool opt_quotes);
dvander@592
    41
	SMCParseResult ReadSMC_KeyValue(const char *key, const char *value, bool key_quotes, bool value_quotes);
dvander@592
    42
	SMCParseResult ReadSMC_LeavingSection();
dvander@592
    43
public: //IGameConfig
dvander@592
    44
	const char *GetKeyValue(const char *key);
dvander@592
    45
	bool GetOffset(const char *key, int *value);
dvander@592
    46
	SendProp *GetSendProp(const char *key);
dvander@947
    47
	bool GetMemSig(const char *key, void **addr);
dvander@592
    48
public:
dvander@592
    49
	void IncRefCount();
dvander@592
    50
	unsigned int DecRefCount();
dvander@592
    51
private:
dvander@592
    52
	BaseStringTable *m_pStrings;
dvander@592
    53
	char *m_pFile;
dvander@592
    54
	Trie *m_pOffsets;
dvander@592
    55
	Trie *m_pProps;
dvander@592
    56
	Trie *m_pKeys;
dvander@947
    57
	Trie *m_pSigs;
dvander@592
    58
	unsigned int m_RefCount;
dvander@592
    59
	/* Parse states */
dvander@592
    60
	int m_ParseState;
dvander@592
    61
	unsigned int m_IgnoreLevel;
dvander@592
    62
	char m_class[64];
dvander@592
    63
	char m_prop[64];
dvander@592
    64
	char m_offset[64];
dvander@592
    65
	char m_mod[255];
dvander@947
    66
	bool bShouldBeReadingDefault;
dvander@592
    67
};
dvander@592
    68
dvander@616
    69
class GameConfigManager : 
dvander@592
    70
	public IGameConfigManager,
dvander@592
    71
	public SMGlobalClass
dvander@592
    72
{
dvander@592
    73
public:
dvander@616
    74
	GameConfigManager();
dvander@616
    75
	~GameConfigManager();
dvander@592
    76
public: //IGameConfigManager
dvander@592
    77
	bool LoadGameConfigFile(const char *file, IGameConfig **pConfig, char *error, size_t maxlength);
dvander@592
    78
	void CloseGameConfigFile(IGameConfig *cfg);
dvander@949
    79
	IGameConfig *ReadHandle(Handle_t hndl,
dvander@949
    80
		IdentityToken_t *ident,
dvander@949
    81
		HandleError *err);
dvander@592
    82
public: //SMGlobalClass
dvander@592
    83
	void OnSourceModStartup(bool late);
dvander@592
    84
	void OnSourceModAllInitialized();
dvander@592
    85
	void OnSourceModAllShutdown();
dvander@592
    86
private:
dvander@592
    87
	List<CGameConfig *> m_cfgs;
dvander@592
    88
	Trie *m_pLookup;
dvander@592
    89
};
dvander@592
    90
dvander@616
    91
extern GameConfigManager g_GameConfigs;
dvander@592
    92
extern IGameConfig *g_pGameConf;
dvander@592
    93
dvander@592
    94
#endif //_INCLUDE_SOURCEMOD_CGAMECONFIGS_H_