96 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.1 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:
 | |
| 	unsigned char padding[36];
 | |
| 	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_
 |