PyHash API
**********

"PyTypeObject.tp_hash" メンバや 数値型のハッシュ化 も参照してください
。

type Py_hash_t

   ハッシュ値型: 符号付き整数。

   Added in version 3.2.

type Py_uhash_t

   ハッシュ値型: 符号なし整数。

   Added in version 3.2.

Py_HASH_ALGORITHM

   "str"、"bytes"、"memoryview" のハッシュに使うアルゴリズムを示す数値
   です。

   アルゴリズム名は "sys.hash_info.algorithm" により公開されます。

   Added in version 3.4.

Py_HASH_FNV
Py_HASH_SIPHASH24
Py_HASH_SIPHASH13
Py_HASH_EXTERNAL

   ハッシュに使うアルゴリズムを判定するために "Py_HASH_ALGORITHM" と比
   較する数値です。 組み込みのハッシュアルゴリズムは、configure の "--
   with-hash-algorithm" オプションで設定できます。

   "Py_HASH_EXTERNAL" の値は "0" で、Python を組み込むアプリケーション
   が提供するハッシュ実装を表します。 "PyHash_Func" を参照してください
   。

   Added in version 3.4: "Py_HASH_FNV"、"Py_HASH_SIPHASH24"、
   "Py_HASH_EXTERNAL" を追加しました。

   Added in version 3.11: "Py_HASH_SIPHASH13" を追加しました。

Py_HASH_CUTOFF

   長さが "[1, Py_HASH_CUTOFF)" の範囲にあるバッファのハッシュには、
   "Py_HASH_ALGORITHM" が示すアルゴリズムの代わりに DJBX33A を使います
   。

   * "Py_HASH_CUTOFF" を 0 にすると、この最適化は無効になります。

   * "Py_HASH_CUTOFF" は 0 以上 7 以下でなければなりません。

   32 ビットのプラットフォームでは衝突する文字列を作成しやすいため、64
   ビットのプラットフォームよりも小さい閾値を使うべきです。 64 ビット
   では 7、32 ビットでは 5 を閾値にすると、十分な安全の余裕が得られる
   はずです。

   "sys.hash_info.cutoff" 定数に対応します。

   Added in version 3.4.

PyHASH_MODULUS

   数値のハッシュ方式で使う メルセンヌ素数 "P = 2**n -1"。

   "sys.hash_info.modulus" 定数に対応します。

   Added in version 3.13.

PyHASH_BITS

   "PyHASH_MODULUS" の "P" の指数 "n"。

   Added in version 3.13.

PyHASH_MULTIPLIER

   文字列などさまざまなハッシュで乗数として使う素数。

   Added in version 3.13.

PyHASH_INF

   正の無限大に対して返すハッシュ値。

   "sys.hash_info.inf" 定数に対応します。

   Added in version 3.13.

PyHASH_IMAG

   複素数の虚部に使う乗数。

   "sys.hash_info.imag" 定数に対応します。

   Added in version 3.13.

type PyHash_FuncDef

   "PyHash_GetFuncDef()" が使うハッシュ関数の定義。

   Py_hash_t (*const hash)(const void*, Py_ssize_t)

      ハッシュ関数。

   const char *name

      ハッシュ関数の名前 (UTF-8 エンコードの文字列)。

      "sys.hash_info.algorithm" 定数に対応します。

   const int hash_bits

      ハッシュ値の内部でのサイズ (ビット単位)。

      "sys.hash_info.hash_bits" 定数に対応します。

   const int seed_bits

      シード入力のサイズ (ビット単位)。

      "sys.hash_info.seed_bits" 定数に対応します。

   Added in version 3.4.

PyHash_FuncDef PyHash_Func

   "Py_HASH_ALGORITHM" を "Py_HASH_EXTERNAL" に設定して Python をビル
   ドする場合、Python を組み込むアプリケーションはこの変数を定義する必
   要があります。 これにより、Python の組み込みハッシュアルゴリズムの
   代わりに使うハッシュ実装を提供します。

   Added in version 3.4.

   バージョン 3.15 で非推奨、バージョン 3.19 で削除予定: 代わりに組み
   込みのハッシュアルゴリズムを使ってください。

PyHash_FuncDef *PyHash_GetFuncDef(void)

   ハッシュ関数の定義を取得します。

   参考: **PEP 456** 「安全で交換可能なハッシュアルゴリズム」。

   Added in version 3.4.

Py_hash_t Py_HashPointer(const void *ptr)

   ポインタ値のハッシュを計算します。 ポインタ値を整数として処理します
   (内部では "uintptr_t" にキャストします)。 ポインタの参照先にはアク
   セスしません。

   この関数は失敗しません。 "-1" を返すことはありません。

   Added in version 3.13.

Py_hash_t Py_HashBuffer(const void *ptr, Py_ssize_t len)

   アドレス "ptr" を先頭とする長さ "len" バイトのバッファのハッシュ値
   を計算して返します。 このハッシュ値は、"bytes"、"memoryview" など
   バッファプロトコル を実装する組み込みオブジェクトのハッシュ値と一致
   することが保証されています。

   "tp_richcompare" 関数でほかのオブジェクトのバッファと比較する不変オ
   ブジェクトに、ハッシュ計算を実装する場合に使ってください。

   "len" は "0" 以上でなければなりません。

   この関数は常に成功します。

   Added in version 3.14.

Py_hash_t PyObject_GenericHash(PyObject *obj)

   型オブジェクトの "tp_hash" スロットに設定するための汎用ハッシュ関数
   です。 結果はオブジェクトの同一性だけで決まります。

   CPython では "Py_HashPointer()" と同等です。

   Added in version 3.13.
