2
0
mirror of https://github.com/boostorg/python.git synced 2026-01-26 06:42:27 +00:00

Convert C++ un/signed char to/from one-character Python strings.

[SVN r9033]
This commit is contained in:
Ralf W. Grosse-Kunstleve
2001-02-08 15:32:34 +00:00
parent 444bb78fa4
commit 5ed0c78527

View File

@@ -160,24 +160,43 @@ unsigned short from_python(PyObject* p, boost::python::type<unsigned short> type
return integer_from_python(p, type);
}
PyObject* to_python(unsigned char i)
PyObject* char_to_python(char c)
{
return integer_to_python(i);
return PyString_FromStringAndSize(&c, 1);
}
char char_from_python(PyObject* p)
{
if (! PyString_Check(p)) {
PyErr_SetString(PyExc_TypeError, "expected string with exactly one character");
throw boost::python::argument_error();
}
const char* s = PyString_AsString(p);
if (! s || s[0] == '\0' || s[1] != '\0') {
PyErr_SetString(PyExc_ValueError, "expected string with exactly one character");
throw boost::python::argument_error();
}
return s[0];
}
PyObject* to_python(unsigned char c)
{
return char_to_python(static_cast<char>(c));
}
unsigned char from_python(PyObject* p, boost::python::type<unsigned char> type)
{
return integer_from_python(p, type);
return static_cast<unsigned char>(char_from_python(p));
}
PyObject* to_python(signed char i)
PyObject* to_python(signed char c)
{
return integer_to_python(i);
return char_to_python(static_cast<char>(c));
}
signed char from_python(PyObject* p, boost::python::type<signed char> type)
{
return integer_from_python(p, type);
return static_cast<signed char>(char_from_python(p));
}
PyObject* to_python(unsigned long x)