pytho****@googl*****
pytho****@googl*****
2011年 11月 10日 (木) 10:53:18 JST
Revision: b3852ab144de Author: Naoki INADA <inada****@klab*****> Date: Wed Nov 9 17:52:41 2011 Log: Update 2.7.2: c-api/buffer http://code.google.com/p/python-doc-ja/source/detail?r=b3852ab144de Modified: /c-api/buffer.rst ======================================= --- /c-api/buffer.rst Wed May 18 08:28:21 2011 +++ /c-api/buffer.rst Wed Nov 9 17:52:41 2011 @@ -2,10 +2,11 @@ .. _bufferobjects: -バッファーオブジェクト ----------------------- +buffer オブジェクトと memoryview オブジェクト +---------------------------------------------- .. sectionauthor:: Greg Stein <gstei****@lyra*****> +.. sectionauthor:: Benjamin Peterson .. index:: @@ -235,25 +236,9 @@ *view* バッファを開放します。 バッファが利用されなくなったときに、そのメモリを開放できるようにこの関数 を呼び出すべきです。 -.. todo:: - 以下の2つの関数は実装が存在しない。問い合わせ中。 - - .. c:function:: Py_ssize_t PyBuffer_SizeFromFormat(const char *) - - :c:data:`~Py_buffer.itemsize` の値を :c:data:`~PyBuffer.format` から 計算して返します。 - - .. c:function:: int PyObject_CopyToObject(PyObject *obj, void *buf, Py_ssize_t len, char fortran) - - Copy *len* bytes of data pointed to by the contiguous chunk of memory - pointed to by *buf* into the buffer exported by obj. The buffer must of - course be writable. Return 0 on success and return -1 and raise an error - on failure. If the object does not have a writable buffer, then an error - is raised. If *fortran* is ``'F'``, then if the object is - multi-dimensional, then the data will be copied into the array in - Fortran-style (first dimension varies the fastest). If *fortran* is - ``'C'``, then the data will be copied into the array in C-style (last - dimension varies the fastest). If *fortran* is ``'A'``, then it does not - matter and the copy will be made in whatever way is more efficient. +.. c:function:: Py_ssize_t PyBuffer_SizeFromFormat(const char *) + + :c:data:`~Py_buffer.itemsize` の値を :c:data:`~PyBuffer.format` から計算 して返します。 .. c:function:: int PyBuffer_IsContiguous(Py_buffer *view, char fortran) @@ -267,7 +252,7 @@ .. c:function:: void PyBuffer_FillContiguousStrides(int ndim, Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t itemsize, char fortran) *strides* 配列を、 *itemsize* の大きさの要素がバイト単位で連続した、 - *shape* の形をした (*fortran* が ``'C'`` なら C-style, *fortran* が ``'F'`` + *shape* の形をした (*fortran* が ``'C'`` なら C-style, ``'F'`` なら Fortran-style の) 多次元配列として埋める。 @@ -278,12 +263,59 @@ 成功したら 0 を、エラー時には (例外を発生させつつ) -1 を返す。 +.. MemoryView objects + +memoryview オブジェクト +======================== + +.. versionadded:: 2.7 + +:class:`memoryview` オブジェクトは、新しい、他のオブジェクトと同じように扱 える +Python オブジェクトの形をした C言語レベルのバッファへのインタフェースです。 + +.. cfunction:: PyObject *PyMemoryView_FromObject(PyObject *obj) + + 新しいバッファインタフェースを定義しているオブジェクトから memoryview + オブジェクトを作ります。 + + +.. cfunction:: PyObject *PyMemoryView_FromBuffer(Py_buffer *view) + + buffer-info 構造体 *view* をラップする memoryview オブジェクトを作りま す。 + 作られた memoryview オブジェクトはバッファを所有することになるので、 + *view* を開放してはいけません。このバッファは memoryview オブジェクトが 削除されるときに + 解放されます。 + + +.. cfunction:: PyObject *PyMemoryView_GetContiguous(PyObject *obj, int buffertype, char order) + + buffer インタフェースを定義しているオブジェクトから ('C' か 'F'ortran の *order* で) + 連続したメモリチャンクへの memoryview オブジェクトを作ります。 + メモリが連続している場合、 memoryview オブジェクトは元のメモリを参照しま す。 + それ以外の場合、メモリはコピーされて、 memoryview オブジェクトは新しい bytes + オブジェクトを参照します。 + + +.. cfunction:: int PyMemoryView_Check(PyObject *obj) + + *obj* が memoryview オブジェクトの場合に真を返します。 + 現在のところ、 :class:`memoryview` のサブクラスの作成は許可されていませ ん。 + + +.. cfunction:: Py_buffer *PyMemoryView_GET_BUFFER(PyObject *obj) + + 与えられたオブジェクトにラップされた buffer-info 構造体へのポインタを返 します。 + オブジェクトは memoryview インスタンスで **なければなりません** 。 + このマクロはオブジェクトの型をチェックしないので、呼び出し側で保証しなけ れば + クラッシュする可能性があります。 + + 旧スタイルバッファオブジェクト ================================= .. index:: single: PyBufferProcs -バッファインタフェースに関するより詳しい情報は、 "バッファオブジェクト構造 体" 節 ( :ref:`buffer-structs` 節) の、 +古いバッファインタフェースに関するより詳しい情報は、 "バッファオブジェクト 構造体" 節 ( :ref:`buffer-structs` 節) の、 :c:type:`PyBufferProcs` の説明のところにあります。 "バッファオブジェクト" はヘッダファイル :file:`bufferobject.h` の中で定義 されています (このファイルは