2進ベクトルのクラス CBVector と 2進行列のクラス CBMatrix をそれぞれ書き直しました。書き直したコードは CodePlex に GraphGo 0.5 として公開しました。ドキュメントはこちらに公開しました。
CBVector ではビット列を int の配列から 32 ビット固定の bitset に変更しました。これで CBVector のメモリ解放の問題はなくなりました。囲碁で使うのはせいぜい 19 路なので、19 ビット以上あれば困らないだろうということにしました。
さらに戻り値が CBMatrix になる CBVector::cross メソッドを定義しました。これはベクトル同士のクロス積なので結果が行列になります。2つの DLL が相互に参照するケースは Reference を設定しようとした時点でエラーになってしまいます。これを解消するにはビルドの手順を変更する必要があるようです。Visual Studio のビルドの手順を変更するのが難しそうだったので、結局2つのクラスを binarymath.dll という名前の一つの DLL にまとめることにしました。
CBMatrix ではビット列の配列から CBVector の配列に変更し、vector テンプレートを利用しました。メモリの解放がうまくいっているのかどうかは、ちょっと今のところ理解できていません…。