コンテキスト変数オブジェクト
****************************

バージョン 3.7 で追加.

バージョン 3.7.1 で変更:

注釈:

  Python 3.7.1 で全てのコンテキスト変数の C API のシグネチャは、
  "PyContext", "PyContextVar", "PyContextToken" の代わりに "PyObject"
  ポインタを使うように **変更** されました。例えば:

     // in 3.7.0:
     PyContext *PyContext_New(void);

     // in 3.7.1+:
     PyObject *PyContext_New(void);

  詳細は bpo-34762 を参照してください。

この節では、 "contextvars" モジュールの公開 C API の詳細について説明し
ます。

type PyContext

   "contextvars.Context" オブジェクトを表現するための C 構造体。

type PyContextVar

   "contextvars.ContextVar" オブジェクトを表現するための C 構造体。

type PyContextToken

   "contextvars.Token" オブジェクトを表現するための C 構造体。

PyTypeObject PyContext_Type

   *コンテキスト* 型を表現する型オブジェクト。

PyTypeObject PyContextVar_Type

   *コンテキスト変数* 型を表現する型オブジェクト。

PyTypeObject PyContextToken_Type

   *コンテキスト変数トークン* 型を表現する型オブジェクト。

型チェックマクロ:

int PyContext_CheckExact(PyObject *o)

   *o* が "PyContext_Type" の場合に真を返します。 *o* は "NULL" であっ
   てはなりません。 この関数は常に成功します。

int PyContextVar_CheckExact(PyObject *o)

   *o* が "PyContextVar_Type" の場合に真を返します。 *o* は "NULL" で
   あってはなりません。 この関数は常に成功します。

int PyContextToken_CheckExact(PyObject *o)

   *o* が "PyContextToken_Type" の場合に真を返します。 *o* は "NULL"
   であってはなりません。 この関数は常に成功します。

コンテキストオブジェクトを取り扱う関数:

PyObject *PyContext_New(void)
    *戻り値: 新しい参照。*

   新しい空のコンテキストオブジェクトを作成します。 エラーが起きた場合
   は "NULL" を返します。

PyObject *PyContext_Copy(PyObject *ctx)
    *戻り値: 新しい参照。*

   渡された *ctx* コンテキストオブジェクトの浅いコピーを作成します。
   エラーが起きた場合は "NULL" を返します。

PyObject *PyContext_CopyCurrent(void)
    *戻り値: 新しい参照。*

   現在のコンテキストオブジェクトの浅いコピーを作成します。 エラーが起
   きた場合は "NULL" を返します。

int PyContext_Enter(PyObject *ctx)

   *ctx* を現在のスレッドの現在のコンテキストに設定します。 成功したら
   "0" を、失敗したら "-1" を返します。

int PyContext_Exit(PyObject *ctx)

   *ctx* コンテキストを無効にし、1 つ前のコンテキストを現在のスレッド
   の現在のコンテキストに復元します。 成功したら "0" を、失敗したら
   "-1" を返します。

コンテキスト変数の関数:

PyObject *PyContextVar_New(const char *name, PyObject *def)
    *戻り値: 新しい参照。*

   新しい "ContextVar" オブジェクトを作成します。*name* 引数は内部走査
   とデバッグの目的で使われます。*def* 引数はコンテキスト変数のデフォ
   ルト値を指定するか、デフォルトがない場合は "NULL" です。エラーが起
   きた場合は、関数は "NULL" を返します。

int PyContextVar_Get(PyObject *var, PyObject *default_value, PyObject **value)

   コンテキスト変数の値を取得します。 取得中にエラーが起きた場合は
   "-1" を、値が見付かっても見付からなくてもエラーが起きなかった場合は
   "0" を返します。

   コンテキスト変数が見付かった場合、 *value* はそれを指すポインタにな
   っています。 コンテキスト変数が見付から *なかった* 場合は、 *value*
   が指すものは次のようになっています:

   * ("NULL" でなければ) *default_value*

   * ("NULL" でなければ) *var* のデフォルト値

   * "NULL"

   "NULL" を除けば、この関数は新しい参照を返します。

PyObject *PyContextVar_Set(PyObject *var, PyObject *value)
    *戻り値: 新しい参照。*

   現在のコンテキストにおいて *var* の値を *value* にセットします。こ
   の変更による新しいトークンオブジェクトか、エラーが起こった場合は
   ``NULL``を返します。

int PyContextVar_Reset(PyObject *var, PyObject *token)

   *var* コンテキスト変数の状態をリセットし、 *token* を返した
   "PyContextVar_Set()" が呼ばれる前の状態に戻します。 この関数は成功
   したら "0" 、失敗したら "-1" を返します。
