Revision: 28419
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28419
Author:   campbellbarton
Date:     2010-04-25 23:13:42 +0200 (Sun, 25 Apr 2010)

Log Message:
-----------
hash function for property-rna. eg. hash(bpy.context.object.modifiers)

Modified Paths:
--------------
    trunk/blender/source/blender/python/intern/bpy_rna.c

Modified: trunk/blender/source/blender/python/intern/bpy_rna.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_rna.c        2010-04-25 
19:56:43 UTC (rev 28418)
+++ trunk/blender/source/blender/python/intern/bpy_rna.c        2010-04-25 
21:13:42 UTC (rev 28419)
@@ -431,9 +431,29 @@
 
 static long pyrna_struct_hash( BPy_StructRNA *self )
 {
-       return (long)self->ptr.data;
+       return _Py_HashPointer(self->ptr.data);
 }
 
+/* from python's meth_hash v3.1.2 */
+static long pyrna_prop_hash(BPy_PropertyRNA *self)
+{      
+       long x,y;
+       if (self->ptr.data == NULL)
+               x = 0;
+       else {
+               x = _Py_HashPointer(self->ptr.data);
+               if (x == -1)
+                       return -1;
+       }
+       y = _Py_HashPointer((void*)(self->prop));
+       if (y == -1)
+               return -1;
+       x ^= y;
+       if (x == -1)
+               x = -2;
+       return x;
+}
+
 /* use our own dealloc so we can free a property if we use one */
 static void pyrna_struct_dealloc( BPy_StructRNA *self )
 {
@@ -3490,7 +3510,7 @@
 
        /* More standard operations (here for binary compatibility) */
 
-       NULL,                                           /* hashfunc tp_hash; */
+       ( hashfunc ) pyrna_prop_hash,   /* hashfunc tp_hash; */
        NULL,                       /* ternaryfunc tp_call; */
        NULL,                       /* reprfunc tp_str; */
 


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to