# 古いバッファプロトコル

バージョン 3.0 で非推奨.

これらの関数は、 Python 2 の「古いバッファプロトコル」 API の一部です。 Python 3 では、もうこのプロトコルは存在しませんが、 2.x のコードを移植しやすいように関数は公開されています。 新しいバッファプロトコル と互換性のあるラッパー関数のように振る舞いますが、バッファがエクスポートされるときに取得されるリソースの生存期間を管理することはできません。

従って、あるオブジェクトのバッファビューを取得するために、 `PyObject_GetBuffer()` (もしくは `y*` および `w*` フォーマットコード で `PyArg_ParseTuple()` やその仲間) を呼び出し、バッファビューを解放するときには `PyBuffer_Release()` を呼び出します。

int `PyObject_AsCharBuffer`(PyObject *obj, const char **buffer, Py_ssize_t *buffer_len)

  文字ベースの入力として使える読み出し専用メモリ上の位置へのポインタを返します。 obj 引数は単一セグメントからなる文字バッファインタフェースをサポートしていなければなりません。成功すると `0` を返し、 buffer をメモリの位置に、 buffer_len をバッファの長さに設定します。エラーの際には `-1` を返し、 `TypeError` をセットします。

int `PyObject_AsReadBuffer`(PyObject *obj, const void **buffer, Py_ssize_t *buffer_len)

  任意のデータを収めた読み出し専用のメモリ上の位置へのポインタを返します。 obj 引数は単一セグメントからなる読み出し可能バッファインタフェースをサポートしていなければなりません。成功すると `0` を返し、 buffer をメモリの位置に、 buffer_len をバッファの長さに設定します。エラーの際には `-1` を返し、 `TypeError` をセットします。

int `PyObject_CheckReadBuffer`(PyObject *o)

  o が単一セグメントからなる読み出し可能バッファインタフェースをサポートしている場合に `1` を返します。それ以外の場合には `0` を返します。 この関数は常に成功します。

  この関数は試しにバッファの取得と解放を行い、それぞれ対応する関数の呼び出し中に起こる例外は抑制されることに注意してください。 エラーを報告させるには、 `PyObject_GetBuffer()` を代わりに使ってください。

int `PyObject_AsWriteBuffer`(PyObject *obj, void **buffer, Py_ssize_t *buffer_len)

  書き込み可能なメモリ上の位置へのポインタを返します。 obj 引数は単一セグメントからなる文字バッファインタフェースをサポートしていなければなりません。成功すると `0` を返し、 buffer をメモリの位置に、 buffer_len をバッファの長さに設定します。エラーの際には `-1` を返し、 `TypeError` をセットします。