From 6bceb4ea5ddd4907fbfba14112ce22c74516c3e1 Mon Sep 17 00:00:00 2001 From: Julien Lamy Date: Thu, 22 Dec 2016 12:20:51 +0100 Subject: [PATCH] Fix hashing Tags (close #44) --- tests/wrappers/test_tag.py | 11 +++++++++++ wrappers/Tag.cpp | 6 ++++++ 2 files changed, 17 insertions(+) diff --git a/tests/wrappers/test_tag.py b/tests/wrappers/test_tag.py index cf21990c..4f580e87 100644 --- a/tests/wrappers/test_tag.py +++ b/tests/wrappers/test_tag.py @@ -83,5 +83,16 @@ def test_str(self): tag = odil.Tag(0x1234, 0x5678) self.assertEqual(str(tag), "12345678") + def test_hash(self): + tag = odil.Tag( + odil.registry.PatientName.group, odil.registry.PatientName.element) + d = {tag: True} + + self.assertTrue(tag in d) + self.assertTrue(odil.registry.PatientName in d) + + other = odil.Tag( + odil.registry.PatientID.group, odil.registry.PatientID.element) + if __name__ == "__main__": unittest.main() diff --git a/wrappers/Tag.cpp b/wrappers/Tag.cpp index e2014199..26bf3537 100644 --- a/wrappers/Tag.cpp +++ b/wrappers/Tag.cpp @@ -10,6 +10,11 @@ #include "odil/Tag.h" +uint32_t hash(odil::Tag const & tag) +{ + return ((tag.group<<16)+tag.element); +} + void wrap_Tag() { using namespace boost::python; @@ -29,6 +34,7 @@ void wrap_Tag() .def(self <= self) .def(self >= self) .def("__str__", &Tag::operator std::string) + .def("__hash__", &hash) ; implicitly_convertible(); }