From 1222848bd48c7aeb7756ecb47a92943311a4283b Mon Sep 17 00:00:00 2001
From: Gabriel Studer <gabriel.studer@unibas.ch>
Date: Tue, 21 Feb 2023 11:34:42 +0100
Subject: [PATCH] define __hash__ for ResNum makes it usable as key in a dict

---
 modules/mol/base/pymod/export_residue.cc | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/modules/mol/base/pymod/export_residue.cc b/modules/mol/base/pymod/export_residue.cc
index 9016f9d02..7a0883e7f 100644
--- a/modules/mol/base/pymod/export_residue.cc
+++ b/modules/mol/base/pymod/export_residue.cc
@@ -71,6 +71,19 @@ namespace {
     }
     b->SetChemClass(ChemClass(st[0]));
   }
+
+  struct H {
+    std::size_t operator()(const ost::mol::ResNum& n) const {
+        std::size_t h1 = std::hash<int>{}(n.GetNum());
+        std::size_t h2 = std::hash<char>{}(n.GetInsCode());
+        return h1 ^ (h2 << 1);
+    }
+  };
+
+  int ResNumHash(const ost::mol::ResNum& n) {
+    return H{}(n);
+  }
+
 }
 
 void export_Residue()
@@ -118,6 +131,7 @@ void export_Residue()
     .add_property("ins_code", &ResNum::GetInsCode)
     .def("__str__", &ResNum::AsString)
     .def("__repr__", &ResNum::AsString)
+    .def("__hash__", &ResNumHash)
     .def(self<self)
     .def(self>self)
     .def(self>=self)
-- 
GitLab