enum comparison and conversion operations (closes #80)
diff --git a/example/example4.cpp b/example/example4.cpp
index 9865931..e673c4a 100644
--- a/example/example4.cpp
+++ b/example/example4.cpp
@@ -21,8 +21,9 @@
ESecondMode
};
- static void test_function(EMode mode) {
+ static EMode test_function(EMode mode) {
std::cout << "Example4::test_function(enum=" << mode << ")" << std::endl;
+ return mode;
}
};
@@ -42,7 +43,7 @@
py::bytes return_bytes() {
const char *data = "\x01\x00\x02\x00";
- return py::bytes(std::string(data, 4));
+ return std::string(data, 4);
}
void print_bytes(py::bytes bytes) {
diff --git a/example/example4.py b/example/example4.py
index 74f860d..37d952f 100755
--- a/example/example4.py
+++ b/example/example4.py
@@ -20,10 +20,39 @@
print(test_function(7))
print(test_function(EMyEnumeration.EFirstEntry))
print(test_function(EMyEnumeration.ESecondEntry))
+print("enum->integer = %i" % int(EMyEnumeration.ESecondEntry))
+print("integer->enum = %s" % str(EMyEnumeration(2)))
+
+print("A constant = " + str(some_constant))
print(Example4.EMode)
print(Example4.EMode.EFirstMode)
print(Example4.EFirstMode)
Example4.test_function(Example4.EFirstMode)
+print("Equality test 1: " + str(
+ Example4.test_function(Example4.EFirstMode) ==
+ Example4.test_function(Example4.EFirstMode)))
+
+print("Inequality test 1: " + str(
+ Example4.test_function(Example4.EFirstMode) !=
+ Example4.test_function(Example4.EFirstMode)))
+
+print("Equality test 2: " + str(
+ Example4.test_function(Example4.EFirstMode) ==
+ Example4.test_function(Example4.ESecondMode)))
+
+print("Inequality test 2: " + str(
+ Example4.test_function(Example4.EFirstMode) !=
+ Example4.test_function(Example4.ESecondMode)))
+
+x = {
+ Example4.test_function(Example4.EFirstMode): 1,
+ Example4.test_function(Example4.ESecondMode): 2
+}
+
+x[Example4.test_function(Example4.EFirstMode)] = 3
+x[Example4.test_function(Example4.ESecondMode)] = 4
+print("Hashing test = " + str(x))
+
print_bytes(return_bytes())
diff --git a/example/example4.ref b/example/example4.ref
index 040d55b..a21f62c 100644
--- a/example/example4.ref
+++ b/example/example4.ref
@@ -10,10 +10,30 @@
None
test_function(enum=2)
None
+enum->integer = 2
+integer->enum = EMyEnumeration.ESecondEntry
+A constant = 14
<class 'example.EMode'>
EMode.EFirstMode
EMode.EFirstMode
Example4::test_function(enum=1)
+Example4::test_function(enum=1)
+Example4::test_function(enum=1)
+Equality test 1: True
+Example4::test_function(enum=1)
+Example4::test_function(enum=1)
+Inequality test 1: False
+Example4::test_function(enum=1)
+Example4::test_function(enum=2)
+Equality test 2: False
+Example4::test_function(enum=1)
+Example4::test_function(enum=2)
+Inequality test 2: True
+Example4::test_function(enum=1)
+Example4::test_function(enum=2)
+Example4::test_function(enum=1)
+Example4::test_function(enum=2)
+Hashing test = {EMode.EFirstMode: 3, EMode.ESecondMode: 4}
bytes[0]=1
bytes[1]=0
bytes[2]=2
diff --git a/include/pybind11/pybind11.h b/include/pybind11/pybind11.h
index bbcda47..166966a 100644
--- a/include/pybind11/pybind11.h
+++ b/include/pybind11/pybind11.h
@@ -907,7 +907,11 @@
((it == entries->end()) ? std::string("???")
: std::string(it->second));
});
+ this->def("__init__", [](Type& value, int i) { value = (Type) i; });
this->def("__int__", [](Type value) { return (int) value; });
+ this->def("__eq__", [](const Type &value, Type value2) { return value == value2; });
+ this->def("__ne__", [](const Type &value, Type value2) { return value != value2; });
+ this->def("__hash__", [](const Type &value) { return (int) value; });
m_entries = entries;
}