MD5_new(PyObject *self, PyObject *args) 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

MD5_new(PyObject *self, PyObject *args)

Поиск

0,

/*tp_print*/

(getattrfunc)md5_getattr, /*tp_getattr*/

0,

/*tp_setattr*/

0,

/*tp_compare*/

0,

/*tp_repr*/

0,

/*tp_as_number*/

0,

/*tp_as_sequence*/

0,

/*tp_as_mapping*/

0,

/*tp_hash*/

0,

/*tp_call*/

0,

/*tp_str*/

0,

/*tp_getattro*/

0,

/*tp_setattro*/

0,

/*tp_as_buffer*/

0,

/*tp_xxx4*/

md5type_doc,

/*tp_doc*/

};

 

 

// Функции модуля md5:

// Функция new() для получения нового объекта типа md5type static PyObject *

MD5_new(PyObject *self, PyObject *args)

{

md5object *md5p; unsigned char *cp = NULL; int len = 0;

// Разбор параметров. Здесь вертикальная черта

// в строке формата означает окончание

// списка обязательных параметров.

// Остальное - как и выше: s# - строка, после : - имя if (!PyArg_ParseTuple(args, "|s#:new", &cp, &len))

return NULL;

 

if ((md5p = newmd5object()) == NULL) return NULL;

 

// Если был задан параметр cp: if (cp)

MD5Update(&md5p->md5, cp, len);


 


return (PyObject *)md5p;

 

}

 

// Строка документации для new() PyDoc_STRVAR(new_doc, "new([arg]) -> md5 object ...");

// Список функций, которые данный модуль экспортирует static PyMethodDef md5_functions[] = {

{"new",

(PyCFunction)MD5_new, METH_VARARGS,

 

new_doc},

(PyCFunction)MD5_new, METH_VARARGS,

 

{"md5",

 

new_doc},

NULL} /* Sentinel */

 

{NULL,

 

};

 

// Следует заметить, что md5 - то же самое, что new. Эта функция оставлена для

 

// обратной совместимости со старым модулем md5

// Инициализация модуля

 

PyMODINIT_FUNC initmd5(void)

{

PyObject *m, *d;

 

MD5type.ob_type = &PyType_Type; // Инициализируется модуль

m = Py_InitModule3("md5", md5_functions, module_doc);

 

// Получается словарь с именами модуля d = PyModule_GetDict(m);

// Добавляется атрибут MD5Type (тип md5-объекта) к словарю

PyDict_SetItemString(d, "MD5Type", (PyObject *)&MD5type);

// Добавляется целая константа digest_size к модулю

PyModule_AddIntConstant(m, "digest_size", 16);

 

}

 

На основе этого примера можно строить собственные модули расширения,ознакомившись с документацией поC/APIи документом"Extending and Embedding" ("Расширение и встраивание")из стандартной поставкиPython.Перед тем,как приступать к созданию своего модуля,следует убедиться,что это целесообразно:подходящего модуля еще не создано и реализация в виде чистогоPythonнеэффективна.Если создан действительно полезный модуль,его можно предложить для включения в поставкуPython.Для этого нужно просто связаться с кем-нибудь из разработчиков по электронной почте или предложить модуль в виде"патча"черезhttp://sourceforge.net.

 



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 77; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.007 с.)