core/CMsgIdPool.h
author Scott Ehlert <ds@alliedmods.net>
Sat Feb 17 05:33:31 2007 +0000 (2007-02-17)
changeset 511 c29f8796bcf4
parent 505 9fb8a1ccd4ec
permissions -rw-r--r--
Initial fixes to ensure static strings passed to new convars
Also fixed minor warning in smn_bitbuffer.cpp
faluco@505
     1
/**
faluco@505
     2
* vim: set ts=4 :
faluco@505
     3
* ===============================================================
faluco@505
     4
* SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
faluco@505
     5
* ===============================================================
faluco@505
     6
*
faluco@505
     7
* This file is not open source and may not be copied without explicit
faluco@505
     8
* written permission of AlliedModders LLC.  This file may not be redistributed 
faluco@505
     9
* in whole or significant part.
faluco@505
    10
* For information, see LICENSE.txt or http://www.sourcemod.net/license.php
faluco@505
    11
*
faluco@505
    12
* Version: $Id$
faluco@505
    13
*/
faluco@505
    14
faluco@505
    15
#ifndef _INCLUDE_SOURCEMOD_CMSGIDPOOL_H_
faluco@505
    16
#define _INCLUDE_SOURCEMOD_CMSGIDPOOL_H_
faluco@505
    17
faluco@505
    18
#include "sm_trie.h"
faluco@505
    19
#include "sourcemm_api.h"
faluco@505
    20
faluco@505
    21
#define INVALID_MESSAGE_ID -1
faluco@505
    22
faluco@505
    23
class CMessageIdPool
faluco@505
    24
{
faluco@505
    25
public:
faluco@505
    26
	CMessageIdPool()
faluco@505
    27
	{
faluco@505
    28
		m_Names = sm_trie_create();
faluco@505
    29
	}
faluco@505
    30
	~CMessageIdPool()
faluco@505
    31
	{
faluco@505
    32
		sm_trie_destroy(m_Names);
faluco@505
    33
	}
faluco@505
    34
public:
faluco@505
    35
	int GetMessageId(const char *name)
faluco@505
    36
	{
faluco@505
    37
		int msgid;
faluco@505
    38
		if (!sm_trie_retrieve(m_Names, name, reinterpret_cast<void **>(&msgid)))
faluco@505
    39
		{
faluco@505
    40
			char buf[255];
faluco@505
    41
			int dummy;
faluco@505
    42
			msgid = 0;
faluco@505
    43
faluco@505
    44
			while (gamedll->GetUserMessageInfo(msgid, buf, sizeof(buf), dummy))
faluco@505
    45
			{
faluco@505
    46
				if (strcmp(name, buf) == 0)
faluco@505
    47
				{
faluco@505
    48
					sm_trie_insert(m_Names, name, reinterpret_cast<void *>(msgid));
faluco@505
    49
					return msgid;
faluco@505
    50
				}
faluco@505
    51
				msgid++;
faluco@505
    52
			}
faluco@505
    53
faluco@505
    54
			return INVALID_MESSAGE_ID;
faluco@505
    55
		}
faluco@505
    56
faluco@505
    57
		return msgid;
faluco@505
    58
	}
faluco@505
    59
private:
faluco@505
    60
	Trie *m_Names;
faluco@505
    61
};
faluco@505
    62
faluco@505
    63
#endif //_INCLUDE_SOURCEMOD_CMSGIDPOOL_H_