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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章