Protocolo de Buffer Antigo
**************************

Descontinuado desde a versão 3.0.

Essas funções faziam parte da API do "protocolo de buffer antigo" no
Python 2. No Python 3, esse protocolo não existe mais, mas as funções
ainda estão expostas para facilitar a portabilidade do código 2.x.
Eles atuam como um wrapper de compatibilidade em torno do novo
protocolo de buffer, mas não oferecem controle sobre a vida útil dos
recursos adquiridos quando um buffer é exportado.

Portanto, é recomendável que você chame "PyObject_GetBuffer()" (ou os
códigos de formatação "y*" ou "w*" com o família de funções de
"PyArg_ParseTuple()") para obter uma visão de buffer sobre um objeto e
"PyBuffer_Release()" quando a visão de buffer puder ser liberada.

int PyObject_AsCharBuffer(PyObject *obj, const char **buffer, Py_ssize_t *buffer_len)
    * Parte da ABI Estável.*

   Retorna um ponteiro para um local de memória somente leitura
   utilizável como entrada baseada em caracteres. O argumento *obj*
   deve ter suporte a interface do buffer de caracteres de segmento
   único. Em caso de sucesso, retorna "0", define *buffer* com o local
   da memória e *buffer_len* com o comprimento do buffer. Retorna "-1"
   e define a "TypeError" em caso de erro.

int PyObject_AsReadBuffer(PyObject *obj, const void **buffer, Py_ssize_t *buffer_len)
    * Parte da ABI Estável.*

   Retorna um ponteiro para um local de memória somente leitura que
   contém dados arbitrários. O argumento *obj* deve ter suporte a
   interface de buffer legível de segmento único. Em caso de sucesso,
   retorna "0", define *buffer* com o local da memória e *buffer_len*
   com o comprimento do buffer. Retorna "-1" e define a "TypeError" em
   caso de erro.

int PyObject_CheckReadBuffer(PyObject *o)
    * Parte da ABI Estável.*

   Retorna "1" se *o* tiver suporte a interface de buffer legível de
   segmento único. Caso contrário, retorna "0". Esta função sempre tem
   sucesso.

   Observe que esta função tenta obter e liberar um buffer, e as
   exceções que ocorrem ao chamar as funções correspondentes serão
   suprimidas. Para obter o relatório de erros, use
   "PyObject_GetBuffer()" em vez disso.

int PyObject_AsWriteBuffer(PyObject *obj, void **buffer, Py_ssize_t *buffer_len)
    * Parte da ABI Estável.*

   Retorna um ponteiro para um local de memória gravável. O argumento
   *obj* deve ter suporte a interface de buffer de caracteres de
   segmento único. Em caso de sucesso, retorna "0", define *buffer*
   com o local da memória e *buffer_len* com o comprimento do buffer.
   Retorna "-1" e define a "TypeError" em caso de erro.
