ELSIE の array クラスを廃止した

なぜだろう?主画面のウィンドウをドラッグ移動できない.最初に写像の検査を実行した後,フリーズ状態になっている.⇒入力待ちになっていただけだ.

Stringからchar*への変換がうまくゆかない.どうしても,Marshalingという操作が必要なようだ.ゼルコバの木のコードを見ると,この辺りではncopyNameという自前の関数を作って処理している.この関数ではまず,UNICODEをS_JISに変換するということもやっている.コード変換は必ずしも必要ないのではないかと思われるが… やっと動くようになった.以下のコードでString→char*の変換を行う.

pin_ptr<const wchar_t> pinchars1 = PtrToStringChars(file1);

内部で使っているISOMORPHなどへのアクセスを回避するため,NATIVEFUNC_API int ELSIENATIVE::MatrixIsomorphism(int N, Mat& m1, Mat& m2)のような関数を使って呼び出すようにした.一応何とかこなせたのではないかと思う.ただし,エラーが出ている.

MatrixComparisonを実行して,EchoingMethodで-1026エラーが発生している.FILENOTFOUNDだ!エンコードの問題とも考えれるが,文字列にエスケープ文字が入っていることが障害要因になっている可能性もある.Replaceを試してみたがうまくゆかなかった.残っている文字列は”D”だけなので,エスケープの問題というより,エンコードの問題ではないかという気がする.WcharからSJISに変換してみよう.

どうもいろいろ厄介なところがある.arrayというテンプレートクラスにアクセスできない.これはおそらく,ELSIEでarrayというクラスが定義されているためではないかと思われる.これはリネームしておくしかないのではないか?⇒対処した.これでncopyNameも動作するようになり,ファイルを読み込んで処理することができた.⇒これで標準のarrayクラスが自由に使えるようになった.

現行では,typedef int Mat[MAXN+1][MAXN+1];というのを使っているが,これも一般のarrayに置き換えておこう.ELSIENATIVEでは,ReadMatrixとMatrixIsomorphismがMatを使っている.⇒マトリックスはファイルから読み込んでいるので,最後まで読まないとマトリックスのサイズが判明しないが,読みながら行列に書き込んでいるので,あらかじめサイズを指定するか,ないし固定サイズの配列を用意するしかない.⇒MAXNを定数としてそれを超えるデータは読み捨てでよいのではないか?いや,そもそもMatは2次元配列だ.

(多分)サイズを指定しないと引数には使えないと思う.しばらくは,このままで運用することにしよう.いや,配列サイズが不明でも引数として渡すことができる.これができるのなら任意サイズの配列としておいた方がよい.配列は初期化されていなくてはならないから,その情報からサイズを割り出すことができるのだろう.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA