From 5c26270de04465a6de8ea527a0a56a1cbc80f121 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 14 May 2018 16:40:58 +0100 Subject: [PATCH] Implement __hash__() for ResourceId --- qrenderdoc/Code/pyrenderdoc/cosmetics.i | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/qrenderdoc/Code/pyrenderdoc/cosmetics.i b/qrenderdoc/Code/pyrenderdoc/cosmetics.i index 63efa3e42..a4e4a24a2 100644 --- a/qrenderdoc/Code/pyrenderdoc/cosmetics.i +++ b/qrenderdoc/Code/pyrenderdoc/cosmetics.i @@ -3,6 +3,7 @@ %feature("python:tp_str") ResourceId "resid_str"; %feature("python:tp_repr") ResourceId "resid_str"; %feature("python:nb_int") ResourceId "resid_int"; +%feature("python:tp_hash") ResourceId "resid_hash"; %wrapper %{ static PyObject *resid_str(PyObject *resid) @@ -23,6 +24,24 @@ fail: return NULL; } +static Py_hash_t resid_hash(PyObject *resid) +{ + void *resptr = NULL; + unsigned long long *id = NULL; + int res = SWIG_ConvertPtr(resid, &resptr, SWIGTYPE_p_ResourceId, 0); + if (!SWIG_IsOK(res)) { + SWIG_exception_fail(SWIG_ArgError(res), "in method 'ResourceId.str', ResourceId is not correct type"); + } + + // cast as unsigned long long + id = (unsigned long long *)resptr; + static_assert(sizeof(unsigned long long) == sizeof(ResourceId), "Wrong size"); + + return Py_hash_t(*id); +fail: + return 0; +} + static PyObject *resid_int(PyObject *resid) { void *resptr = NULL;