[Python-de] Nicht-Hashbare Elemente schnell zugreifen

Andreas Pakulat apaku at gmx.de
Mon Jun 26 16:13:04 CEST 2006


On 26.06.06 14:25:42, Andreas Pakulat wrote:
> On 26.06.06 13:11:02, Stefan Behnel wrote:
> > cdef class Element:
> >     cdef xmlNode* _c_node
> >     def __hash__(self):
> >         return python.PyLong_FromVoidPtr(self._c_node)
> 
> Hmm, funktioniert leider nicht so ganz. Fuer dasselbe Python Objekt
> liefert PyLong_FromVoidPtr(node) 2 verschiedene Werte bei
> aufeinanderfolgenden Aufrufen. Wobei node ein xmlNodePtr ist und das
> ganze im C-Layer passiert. 

Idee gut, Ausfuehrung mangelhaft...

> Das ganze sieht so aus:
> 
> ,---- libxml.c ---
> | static PyObject *
> | libxml_nodeHash(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
> |     
> |     PyObject *py_node1;
> |     xmlNodePtr node1;
> | 
> |     if (!PyArg_ParseTuple(args, (char *)"O:nodeHash", &py_node1))
> |         return NULL;
> |     
> |     node1 = PyxmlNode_Get(py_node1);
> | 
> |     return Py_BuildValue((char *)"l", PyLong_FromVoidPtr((void*)node1);
> | }
> `----
 
Hier darf ich natuerlich aus dem PyObject* nicht einen long machen
lassen, sondern muss direkt das von PyLong_FromVoidPtr gelieferte
PyObject* zurueckgeben.

Naechster Wishlist-Bug fuer libxml2...

Andreas

-- 
You're a card which will have to be dealt with.