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 std::string &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<std::string, 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_
|