PECLに置いてあったBitSet。
日本語はおろか英語ドキュメントすらもまったく見つからず、ソースとテストコードくらいしかないみたい。
よくわからないので使ってみます。
64桁も取ってるのに、たったの64ビットしかフラグ管理できません。
役に立たなすぎる。
あと0ビット目だけを操作する方法がありません。
ビット管理がしたいからといって、正直わざわざBitSetを使うメリットは全く感じられませんでした。
日本語はおろか英語ドキュメントすらもまったく見つからず、ソースとテストコードくらいしかないみたい。
よくわからないので使ってみます。
<?php $bitset = new BitSet(); $bitset->set(1); print($bitset); // 0100000000000000000000000000000000000000000000000000000000000000おっと、これ、もしかしてビット演算を簡単にやってくれる便利クラスじゃね?
<?php $bitset = new BitSet(); $bitset->set(1); $bitset->set(3); $bitset->set(5); print($bitset); // 0101010000000000000000000000000000000000000000000000000000000000 $bitset->set(64); // Uncaught exception 'OutOfRangeException' $bitset->set(0); // 全部1になる print($bitset); // 1111111111111111111111111111111111111111111111111111111111111111 $bitset->clear(); // クリア print($bitset); // 00000000000000000000000000000000000000000000000000000000000000002進数じゃなくてただのフラグじゃねーか!
64桁も取ってるのに、たったの64ビットしかフラグ管理できません。
役に立たなすぎる。
あと0ビット目だけを操作する方法がありません。
<?php $bitset = new BitSet(8); // 8桁に設定 $bitset->set(1);$bitset->set(2);$bitset->set(3); // メソッドチェーン非対応 01110000 $bitset2 = BitSet::fromArray([1, 3, 5, 7]); // 01010101 $bitset->andOp($bitset2); // AND 01010000 $bitset->orOp($bitset2); // OR 01110101 $bitset->xorOp($bitset2); // XOR 00100101 $bitset->andNotOp($bitset2); // $bitsetは1、$bitset2は0のときに1 00100000 var_dump($bitset->size()); // BitSetの桁数。 8 var_dump($bitset->length()); // BitSetを表せる最小桁数? 01010000なら4 var_dump($bitset->cardinality()); // 1が立ってる数。 var_dump($bitset->isEmpty()); // 全て0のときだけtrue var_dump($bitset->get(1)); // 引数桁が1ならtrueandOp()やorOp()など一見便利そうなのですが、どれも返り値がNULLでメソッドチェーン非対応のため、とても使いにくいです。
ビット管理がしたいからといって、正直わざわざBitSetを使うメリットは全く感じられませんでした。
PR