Commit 89ec7f3e by Ivan Smirnov

Add (const char *, size_t) ctors for str/bytes

parent 1e121781
...@@ -144,7 +144,7 @@ public: ...@@ -144,7 +144,7 @@ public:
} }
py::bytes get_bytes_from_str() { 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() { py::str get_str_from_string() {
...@@ -152,7 +152,7 @@ public: ...@@ -152,7 +152,7 @@ public:
} }
py::str get_str_from_bytes() { py::str get_str_from_bytes() {
return (py::str) py::bytes(std::string("boo")); return (py::str) py::bytes("boo", 3);
} }
static int value; static int value;
......
...@@ -345,8 +345,8 @@ class str : public object { ...@@ -345,8 +345,8 @@ class str : public object {
public: public:
PYBIND11_OBJECT_DEFAULT(str, object, detail::PyUnicode_Check_Permissive) PYBIND11_OBJECT_DEFAULT(str, object, detail::PyUnicode_Check_Permissive)
str(const std::string &s) str(const char *c, size_t n)
: object(PyUnicode_FromStringAndSize(s.c_str(), (ssize_t) s.length()), false) { : object(PyUnicode_FromStringAndSize(c, (ssize_t) n), false) {
if (!m_ptr) pybind11_fail("Could not allocate string object!"); if (!m_ptr) pybind11_fail("Could not allocate string object!");
} }
...@@ -355,6 +355,8 @@ public: ...@@ -355,6 +355,8 @@ public:
if (!m_ptr) pybind11_fail("Could not allocate string object!"); if (!m_ptr) pybind11_fail("Could not allocate string object!");
} }
str(const std::string &s) : str(s.data(), s.size()) { }
operator std::string() const { operator std::string() const {
object temp = *this; object temp = *this;
if (PyUnicode_Check(m_ptr)) { if (PyUnicode_Check(m_ptr)) {
...@@ -385,11 +387,13 @@ class bytes : public object { ...@@ -385,11 +387,13 @@ class bytes : public object {
public: public:
PYBIND11_OBJECT_DEFAULT(bytes, object, PYBIND11_BYTES_CHECK) PYBIND11_OBJECT_DEFAULT(bytes, object, PYBIND11_BYTES_CHECK)
bytes(const std::string &s) bytes(const char *c, size_t n)
: object(PYBIND11_BYTES_FROM_STRING_AND_SIZE(s.data(), (ssize_t) s.size()), false) { : object(PYBIND11_BYTES_FROM_STRING_AND_SIZE(c, (ssize_t) n), false) {
if (!m_ptr) pybind11_fail("Could not allocate bytes object!"); if (!m_ptr) pybind11_fail("Could not allocate bytes object!");
} }
bytes(const std::string &s) : bytes(s.data(), s.size()) { }
operator std::string() const { operator std::string() const {
char *buffer; char *buffer;
ssize_t length; ssize_t length;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment