[Python-3000] PyObject_AsString()

Christian Heimes lists at cheimes.de
Thu Nov 22 07:49:42 CET 2007


A lot of functions in Python 3.x have blocks like

	if (PyString_Check(sub_obj)) {
		sub = PyString_AS_STRING(sub_obj);
		sub_len = PyString_GET_SIZE(sub_obj);
	}
	else if (PyObject_AsCharBuffer(sub_obj, &sub, &sub_len))
		return NULL;

The functions check for PyString first to gain a little speed up. I like
to add a new function to the abstract object protocol
(Objects/abstract.c) to make code more readable while keeping the speed up.

int inline
PyObject_AsString(PyObject *obj,
		  const char **buffer,
		  Py_ssize_t *buffer_len)
{
	if (PyString_Check(obj)) {
		*buffer = PyString_AS_STRING(obj);
		*buffer_len = PyString_GET_SIZE(obj);
		return 1;
	}
	return (PyObject_AsCharBuffer(obj, buffer, buffer_len));
}

Maybe somebody can come up with a clever macro instead of this short
inline function?

Christian



More information about the Python-3000 mailing list