From 89ec7f3e794512edcbd1df9442c721168546d163 Mon Sep 17 00:00:00 2001 From: Ivan Smirnov Date: Sat, 13 Aug 2016 19:38:50 +0100 Subject: [PATCH] Add (const char *, size_t) ctors for str/bytes --- example/example-python-types.cpp | 4 ++-- include/pybind11/pytypes.h | 12 ++++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/example/example-python-types.cpp b/example/example-python-types.cpp index 52780cae..00567931 100644 --- a/example/example-python-types.cpp +++ b/example/example-python-types.cpp @@ -144,7 +144,7 @@ public: } py::bytes get_bytes_from_str() { - return (py::bytes) py::str(std::string("bar")); + return (py::bytes) py::str("bar", 3); } py::str get_str_from_string() { @@ -152,7 +152,7 @@ public: } py::str get_str_from_bytes() { - return (py::str) py::bytes(std::string("boo")); + return (py::str) py::bytes("boo", 3); } static int value; diff --git a/include/pybind11/pytypes.h b/include/pybind11/pytypes.h index 72c1573d..5f9e39ef 100644 --- a/include/pybind11/pytypes.h +++ b/include/pybind11/pytypes.h @@ -345,8 +345,8 @@ class str : public object { public: PYBIND11_OBJECT_DEFAULT(str, object, detail::PyUnicode_Check_Permissive) - str(const std::string &s) - : object(PyUnicode_FromStringAndSize(s.c_str(), (ssize_t) s.length()), false) { + str(const char *c, size_t n) + : object(PyUnicode_FromStringAndSize(c, (ssize_t) n), false) { if (!m_ptr) pybind11_fail("Could not allocate string object!"); } @@ -355,6 +355,8 @@ public: if (!m_ptr) pybind11_fail("Could not allocate string object!"); } + str(const std::string &s) : str(s.data(), s.size()) { } + operator std::string() const { object temp = *this; if (PyUnicode_Check(m_ptr)) { @@ -385,11 +387,13 @@ class bytes : public object { public: PYBIND11_OBJECT_DEFAULT(bytes, object, PYBIND11_BYTES_CHECK) - bytes(const std::string &s) - : object(PYBIND11_BYTES_FROM_STRING_AND_SIZE(s.data(), (ssize_t) s.size()), false) { + bytes(const char *c, size_t n) + : object(PYBIND11_BYTES_FROM_STRING_AND_SIZE(c, (ssize_t) n), false) { if (!m_ptr) pybind11_fail("Could not allocate bytes object!"); } + bytes(const std::string &s) : bytes(s.data(), s.size()) { } + operator std::string() const { char *buffer; ssize_t length;