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

This commit is contained in:
Ivan Smirnov 2016-08-13 19:38:50 +01:00
parent 1e1217817b
commit 89ec7f3e79
2 changed files with 10 additions and 6 deletions

View File

@ -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;

View File

@ -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;