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

このセクションは Python 1.6 で導入された古いバッファプロトコルについて
解説します。このプロトコルは、 Python 2.x 系ではサポートされていますが
廃止予定扱いです。 Python 3 から、このプロトコルの弱点や欠点を克服した
新しいバッファプロトコルが導入され、 Python 2.6 へと逆移植されました。
詳細は buffer オブジェクトと memoryview オブジェクト を参照してくださ
い。

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

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

   バージョン 1.6 で追加.

   バージョン 2.5 で変更: この関数は以前は *buffer_len* の型に "int *"
   を利用していました。この変更により、 64bit システムを正しくサポート
   するには修正が必要になります。

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

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

   バージョン 1.6 で追加.

   バージョン 2.5 で変更: この関数は以前は *buffer_len* の型に "int *"
   を利用していました。この変更により、 64bit システムを正しくサポート
   するには修正が必要になります。

int PyObject_CheckReadBuffer(PyObject *o)

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

   バージョン 2.2 で追加.

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

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

   バージョン 1.6 で追加.

   バージョン 2.5 で変更: この関数は以前は *buffer_len* の型に "int *"
   を利用していました。この変更により、 64bit システムを正しくサポート
   するには修正が必要になります。
