Mercurial > cpython-lru_cache-weakref
diff Objects/stringobject.c @ 5410:3b2fda31bf1b legacy-trunk
Checkin of Jack's buffer mods.
Not really checked, but didn't fail any tests either...
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Mon, 05 May 1997 22:15:02 +0000 |
| parents | d1447950fa04 |
| children | 3c67436a28e6 |
line wrap: on
line diff
--- a/Objects/stringobject.c Mon May 05 22:14:19 1997 +0000 +++ b/Objects/stringobject.c Mon May 05 22:15:02 1997 +0000 @@ -456,6 +456,40 @@ return x; } +static int +string_buffer_getreadbuf(self, index, ptr) + PyStringObject *self; + int index; + const void **ptr; +{ + if ( index != 0 ) { + PyErr_SetString(PyExc_SystemError, "Accessing non-existent string segment"); + return -1; + } + *ptr = (void *)self->ob_sval; + return self->ob_size; +} + +static int +string_buffer_getwritebuf(self, index, ptr) + PyStringObject *self; + int index; + const void **ptr; +{ + PyErr_SetString(PyExc_TypeError, "Cannot use string as modifyable buffer"); + return -1; +} + +static int +string_buffer_getsegcount(self, lenp) + PyStringObject *self; + int *lenp; +{ + if ( lenp ) + *lenp = self->ob_size; + return 1; +} + static PySequenceMethods string_as_sequence = { (inquiry)string_length, /*sq_length*/ (binaryfunc)string_concat, /*sq_concat*/ @@ -466,6 +500,12 @@ 0, /*sq_ass_slice*/ }; +static PyBufferProcs string_as_buffer = { + (getreadbufferproc)string_buffer_getreadbuf, + (getwritebufferproc)string_buffer_getwritebuf, + (getsegcountproc)string_buffer_getsegcount, +}; + PyTypeObject PyString_Type = { PyObject_HEAD_INIT(&PyType_Type) 0, @@ -486,7 +526,7 @@ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ - 0, /*tp_xxx3*/ + &string_as_buffer, /*tp_as_buffer*/ 0, /*tp_xxx4*/ 0, /*tp_doc*/ };
