core/systems/PluginInfoDatabase.h
author Borja Ferrer <faluco@alliedmods.net>
Sun Jan 07 01:30:28 2007 +0000 (2007-01-07)
changeset 274 959c85596341
parent 203 c7f86f9e6f60
child 351 7c219cde57e7
permissions -rw-r--r--
Added a bunch of new file natives.
Fixed possible corruption in snprintf when input buffer was bigger than output buffer and relaying on its retval.
Fixed all cases when the above situation happened.
Fixed _PrintToHL2Log not taking va_list in.
dvander@203
     1
#ifndef _INCLUDE_SOURCEMOD_CORE_SYSTEM_PLUGININFODATABASE_H_
dvander@203
     2
#define _INCLUDE_SOURCEMOD_CORE_SYSTEM_PLUGININFODATABASE_H_
dvander@203
     3
dvander@203
     4
/**
dvander@203
     5
 * This file parses plugin_settings.cfg and stores the information in cached memory.
dvander@203
     6
 * It provides simplistic abstraction to retrieving the info.
dvander@203
     7
 * :TODO: currently untested
dvander@203
     8
 */
dvander@203
     9
dvander@203
    10
#include "sm_memtable.h"
dvander@203
    11
#include "ITextParsers.h"
dvander@203
    12
#include "IPluginSys.h"
dvander@203
    13
#include "sm_globals.h"
dvander@203
    14
dvander@203
    15
struct PluginOpts
dvander@203
    16
{
dvander@203
    17
	int key;
dvander@203
    18
	int val;
dvander@203
    19
};
dvander@203
    20
dvander@203
    21
struct PluginSettings
dvander@203
    22
{
dvander@203
    23
	void Init();
dvander@203
    24
	int name;
dvander@203
    25
	bool pause_val;
dvander@203
    26
	PluginType type_val;
dvander@203
    27
	int optarray;
dvander@203
    28
	size_t opts_num;
dvander@203
    29
	size_t opts_size;
dvander@203
    30
};
dvander@203
    31
dvander@203
    32
class CPluginInfoDatabase : public ITextListener_SMC
dvander@203
    33
{
dvander@203
    34
public:
dvander@203
    35
	CPluginInfoDatabase();
dvander@203
    36
	~CPluginInfoDatabase();
dvander@203
    37
public: //ITextListener_SMC
dvander@203
    38
	void ReadSMC_ParseStart();
dvander@203
    39
	SMCParseResult ReadSMC_NewSection(const char *name, bool opt_quotes);
dvander@203
    40
	SMCParseResult ReadSMC_KeyValue(const char *key, const char *value, bool key_quotes, bool value_quotes);
dvander@203
    41
	SMCParseResult ReadSMC_LeavingSection();
dvander@203
    42
public:
dvander@203
    43
	/**
dvander@203
    44
	 * Returns the number of plugin settings available.
dvander@203
    45
	 */
dvander@203
    46
	unsigned int GetSettingsNum();
dvander@203
    47
dvander@203
    48
	/** 
dvander@203
    49
	 * Given an index, returns the plugin settings block if the filename matches.
dvander@203
    50
	 * Otherwise, returns NULL.
dvander@203
    51
	 */
dvander@203
    52
	PluginSettings *GetSettingsIfMatch(unsigned int index, const char *filename);
dvander@203
    53
dvander@203
    54
	/** 
dvander@203
    55
	 *  Given a plugin settings struct and an index,
dvander@203
    56
	 * returns the given JIT key/value option pair at that index.
dvander@203
    57
	 * If the input is invalid, key and val will be set to NULL.
dvander@203
    58
	 */
dvander@203
    59
	void GetOptionsForPlugin(PluginSettings *settings, unsigned int opt_num, const char **key, const char **val);
dvander@203
    60
private:
dvander@203
    61
	SMCParseResult MakeError(const char *fmt, ...);
dvander@203
    62
private:
dvander@203
    63
	BaseStringTable *m_strtab;
dvander@203
    64
	int m_errmsg;
dvander@203
    65
	bool in_plugins;
dvander@203
    66
	bool in_options;
dvander@203
    67
	unsigned int m_infodb;
dvander@203
    68
	size_t m_infodb_count;
dvander@203
    69
	size_t m_infodb_size;
dvander@203
    70
	int cur_plugin;
dvander@203
    71
};
dvander@203
    72
dvander@203
    73
dvander@203
    74
#endif //_INCLUDE_SOURCEMOD_CORE_SYSTEM_PLUGININFODATABASE_H_