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

注釈:

  バージョン 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 を参照してください。

バージョン 3.7 で追加.

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

PyContext

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

PyContextVar

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

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)
    *Return value: New reference.*

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

PyObject *PyContext_Copy(PyObject *ctx)
    *Return value: New reference.*

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

PyObject *PyContext_CopyCurrent(void)
    *Return value: New reference.*

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

int PyContext_Enter(PyObject *ctx)

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

int PyContext_Exit(PyObject *ctx)

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

int PyContext_ClearFreeList()

   コンテキスト変数のフリーリストをクリアします。 解放された要素数を返
   します。 この関数は常に成功します。

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

PyObject *PyContextVar_New(const char *name, PyObject *def)
    *Return value: New reference.*

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

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

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

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

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

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

   * "NULL"

   値が見付かった場合、この関数はその値への新しい参照を作成します。

PyObject *PyContextVar_Set(PyObject *var, PyObject *value)
    *Return value: New reference.*

   現在のコンテキストにおいて、 *var* の値に *value* を設定します。
   "PyObject" オブジェクトへのポインタ、もしくはエラーが起きた場合は
   "NULL" を返します。

int PyContextVar_Reset(PyObject *var, PyObject *token)

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