📄 idhash.cpp
字号:
#ifndef __IDHASH_CPP__
#define __IDHASH_CPP__
#include <string>
#include <memory>
#include "common.cpp"
using namespace std;
const int IDHash_LimitHash = 99997;
struct IDHash_IDStruct {
string str;
int next;
};
IDHash_IDStruct IDHash_Data[Limit_ID];
int IDHash[IDHash_LimitHash];
int IDCount = 0;
struct IDHash_Init {
IDHash_Init() { memset(IDHash, 0xff, sizeof(IDHash)); }
} IDHash_Init;
int IDHash_ID2int(char* str, int create_new);
int IDHash_ID2int(const string& str, int create_new);
string IDHash_int2ID(int id);
int IDHash_ID2int(char* str, int create_new = 1)
{
int hashnum = 0;
for (int i = 0; str[i]; i++)
{
hashnum = (hashnum * 100 + (str[i] - ' ')) % IDHash_LimitHash;
}
for (int i = IDHash[hashnum]; i != -1; i = IDHash_Data[i].next)
{
if (IDHash_Data[i].str == str)
{
return i;
}
}
if (!create_new) return -1;
IDHash_Data[IDCount].str = str;
IDHash_Data[IDCount].next = IDHash[hashnum];
IDHash[hashnum] = IDCount;
return IDCount ++;
}
int IDHash_ID2int(const string& str, int create_new = 1)
{
int hashnum = 0;
for (unsigned int i = 0; i < str.length(); i++)
{
hashnum = (hashnum * 100 + (str[i] - ' ')) % IDHash_LimitHash;
}
for (int i = IDHash[hashnum]; i != -1; i = IDHash_Data[i].next)
{
if (IDHash_Data[i].str == str)
{
return i;
}
}
if (!create_new) return -1;
IDHash_Data[IDCount].str = str;
IDHash_Data[IDCount].next = IDHash[hashnum];
IDHash[hashnum] = IDCount;
return IDCount ++;
}
string IDHash_int2ID(int id)
{
return IDHash_Data[id].str;
}
#endif // __IDHASH_CPP__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -