email地址hash分片的python模块

为了提高hash的速度,使用扩展模块。

#include <Python.h>

#define HASH_OU_NUMS 67

unsigned long CreateHashId(const char *pcchUid,int hashNum)
{
unsigned long ulMicId = 5381;
unsigned char uiChar = 0;
char uiChar_t = 0;
const unsigned long ulMask = 0xFFFFFFFF; //ulMask = 2^32-1, unsigned long on 32bit system;
if(hashNum < 2) {
hashNum = HASH_OU_NUMS;
}
while (*pcchUid)
{
uiChar_t = *pcchUid;
/* ulMicId * 33 + uiChar */
uiChar = (u_char) uiChar_t;
ulMicId = ((ulMicId << 5) + ulMicId) + uiChar;
pcchUid++;
}

ulMicId = ulMicId & ulMask;
ulMicId = ulMicId % hashNum;
return ulMicId;
}


static PyObject * wrap_create_hash_id(PyObject *self, PyObject *args)
{
const char * email;
int hashNum = 0;
int hashId = 0;

if (!PyArg_ParseTuple(args, "s|i", &email,&hashNum))//这句是把python的变量args转换成c的变量command
return NULL;
hashId = CreateHashId(email,hashNum);//调用c的函数
return Py_BuildValue("(i)",hashId);
//把c的返回值n转换成python的对象
}

// 3 方法列表
static PyMethodDef CreateHashMethods[] = {
{"hash", wrap_create_hash_id, METH_VARARGS, "create hash id."},
{NULL, NULL, 0, NULL}
};

PyMODINIT_FUNC initmailhash(void)
{
PyObject *m = Py_InitModule("mailhash", CreateHashMethods);
if (m == NULL) return;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值