OpenDogs extension 0.1.0 is out!

このブログの過去のエントリで書いたネタと非公開だったネタ、いくつかをまとめて一つの拡張モジュールにしてみました。
php_opendogs-0.1.0.tgz
Base32、UTF-8 対応の chr() & ord()、整数と平衡三進法の相互変換、dSFMT による疑似乱数を提供します。


インストール方法:

tar xfz php_opendogs-0.1.0.tgz
cd php_opendogs-0.1.0
phpize
./configure --enable-opendogs
make
sudo make install

dSFMT のサポートを有効にするには、configure のオプションで --with-opendogs-dsfmt=/path/to/libdsfmt-install-dir を指定する必要があります。


関数一覧:

  • string od_base32_encode(string $data)
  • string od_base32_decode(string $data)
    • Base32 エンコードされた文字列をデコードします。
    • A-Z2-7 以外の文字があるとエラーを発し、false を返します。
    • 空白文字、小文字のアルファベット、数字の 0,1 もエラーとなります。
    • 文字列末尾の = は無視します。過不足があってもかまいません。
  • string od_unichr(int $code)
    • Unicode のコードポイントを対応する UTF-8 の文字(列)に変換します。
    • 不正なコードポイントが与えられるとエラーを発し、false を返します。
    • 対応するコードポイントの範囲は 0-0x10FFFF で、返り値の長さは 1-4 バイトです。
  • string od_unichr_array(array $codes)
    • Unicode のコードポイントの配列を UTF-8 の文字列に変換します。
    • 配列の全ての要素は od_unichr() で処理できる範囲の整数でないといけません。
  • int od_uniord(string $str)
    • UTF-8 の文字列のうち、先頭のコードポイントを取得します。
    • UTF-8 として妥当でない文字列が与えられるとエラーを発し、false を返します。
    • 先頭の 1-4 バイト以外の妥当性は検証しません。
  • array od_uniord_array(string $str)
    • UTF-8 の文字列を Unicode のコードポイントの配列に変換します。
    • UTF-8 として妥当でない文字列が与えられるとエラーを発し、false を返します。
  • array od_balanced_ternary_int2array(int $num)
    • 整数を平衡三進記法の各桁の trit を収めた配列に変換します。
    • 扱える数値の範囲は ±1743392200 です。
  • int od_balanced_ternary_array2int(array $trits)
    • 平衡三進記法の各桁の trit を収めた配列を整数に変換します。
    • 配列の全ての要素は -1, 0, 1 のいずれかでないといけません。
    • 配列の要素数は 20 以下でないといけません。
  • void od_dsfmt_init([int $seed])
    • 疑似乱数生成器を初期化します。
  • float od_dsfmt_rand(void)

以下余談。
このモジュールの関数名は od_ で始まりますが、configure のオプションに --with-opendogs-alias をつけると、接頭辞 od_ 無しでも呼び出せるようになります。また、--with-opendogs-alias=no_prefix とすると接頭辞無しの名前でか定義されなくなります。
が、しかし、他のライブラリの関数と名前が衝突する可能性が高くなるので、このオプションはつけないほうが無難です。