100 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#ifndef _INCLUDE_CSTRIKE_HASH_H_
 | 
						|
#define _INCLUDE_CSTRIKE_HASH_H_
 | 
						|
 | 
						|
#include <amtl/am-string.h>
 | 
						|
#include <amtl/am-hashmap.h>
 | 
						|
#include <amtl/am-hashtable.h>
 | 
						|
 | 
						|
#define MAX_WEAPON_NAME_LENGTH 80
 | 
						|
class CEconItemDefinition;
 | 
						|
 | 
						|
struct HashItemDef_Node
 | 
						|
{
 | 
						|
	int key;
 | 
						|
	CEconItemDefinition *pDef;
 | 
						|
	int iunknown;
 | 
						|
};
 | 
						|
 | 
						|
class CHashItemDef
 | 
						|
{
 | 
						|
public:
 | 
						|
#ifdef PLATFORM_X86
 | 
						|
	unsigned char padding[36];
 | 
						|
#else
 | 
						|
	unsigned char padding[56];
 | 
						|
#endif
 | 
						|
	HashItemDef_Node *pMem;
 | 
						|
	int nAllocatedCount;
 | 
						|
	int nGrowSize;
 | 
						|
	int iunknown;
 | 
						|
	int currentElements;
 | 
						|
	int maxElements;
 | 
						|
};
 | 
						|
 | 
						|
struct ItemDefHashValue
 | 
						|
{
 | 
						|
	ItemDefHashValue(int iLoadoutSlot, unsigned int iPrice, SMCSWeapon iWeaponID, unsigned int iDefIdx, const char *szClassname)
 | 
						|
	{
 | 
						|
		m_iLoadoutSlot = iLoadoutSlot;
 | 
						|
		m_iPrice = iPrice;
 | 
						|
		m_iDefIdx = iDefIdx;
 | 
						|
		m_iWeaponID = iWeaponID;
 | 
						|
 | 
						|
		Q_strncpy(m_szClassname, szClassname, sizeof(m_szClassname));
 | 
						|
 | 
						|
		//Create the item name
 | 
						|
		Q_strncpy(m_szItemName, GetWeaponNameFromClassname(szClassname), sizeof(m_szItemName));
 | 
						|
	}
 | 
						|
	int m_iLoadoutSlot;
 | 
						|
	SMCSWeapon m_iWeaponID;
 | 
						|
	unsigned int m_iPrice;
 | 
						|
	unsigned int m_iDefIdx;
 | 
						|
	char m_szClassname[MAX_WEAPON_NAME_LENGTH];
 | 
						|
	char m_szItemName[MAX_WEAPON_NAME_LENGTH];
 | 
						|
};
 | 
						|
 | 
						|
struct StringPolicy
 | 
						|
{
 | 
						|
	static inline uint32_t hash(const char *key)
 | 
						|
	{
 | 
						|
		return ke::FastHashCharSequence(key, strlen(key));
 | 
						|
	}
 | 
						|
	static inline bool matches(const char *find, const ke::AString &key)
 | 
						|
	{
 | 
						|
		return key.compare(find) == 0;
 | 
						|
	}
 | 
						|
};
 | 
						|
 | 
						|
struct IntegerPolicy
 | 
						|
{
 | 
						|
	static inline uint32_t hash(const int key)
 | 
						|
	{
 | 
						|
		return ke::HashInt32(key);
 | 
						|
	}
 | 
						|
	static inline bool matches(const int find, const int &key)
 | 
						|
	{
 | 
						|
		return (key == find);
 | 
						|
	}
 | 
						|
};
 | 
						|
 | 
						|
struct WeaponIDPolicy
 | 
						|
{
 | 
						|
	static inline uint32_t hash(const SMCSWeapon key)
 | 
						|
	{
 | 
						|
		return ke::HashInt32((int)key);
 | 
						|
	}
 | 
						|
	static inline bool matches(const SMCSWeapon find, const SMCSWeapon &key)
 | 
						|
	{
 | 
						|
		return (key == find);
 | 
						|
	}
 | 
						|
};
 | 
						|
 | 
						|
typedef ke::HashMap<ke::AString, ItemDefHashValue, StringPolicy> ClassnameMap;
 | 
						|
typedef ke::HashMap<int, ItemDefHashValue, IntegerPolicy> ItemIndexMap;
 | 
						|
typedef ke::HashMap<SMCSWeapon, ItemDefHashValue, WeaponIDPolicy> WeaponIDMap;
 | 
						|
 | 
						|
extern ClassnameMap g_mapClassToDefIdx;
 | 
						|
extern ItemIndexMap g_mapDefIdxToClass;
 | 
						|
extern WeaponIDMap g_mapWeaponIDToDefIdx;
 | 
						|
#endif //_INCLUDE_CSTRIKE_HASH_H_
 |