グラフ ファイル パーサーを作成する必要があります (グラフは TGFF によって識別子/変数ベースのテキスト ファイルとして生成されます)。
@TASK_GRAPH 0 {
PERIOD 1100
TASK t0_0 TYPE 13
TASK t0_1 TYPE 3
TASK t0_2 TYPE 10
.
.
ARC a0_0 FROM t0_0 TO t0_1 TYPE 9
ARC a0_1 FROM t0_1 TO t0_2 TYPE 0
ARC a0_2 FROM t0_2 TO t0_3 TYPE 37
.
.
}
#------------------------------------------------------------------------------
# type exec_time
0 71.659
1 59.3856
2 64.7101
これはivがこれまでに得た限りです(断片化されたコードを気にしないでください...これはivがこれまでに行った方法の単なる例です)
void read(char* graph){
//open task graph description
string name;
string TaskList[300][300];
ifstream gfile;
gfile.open (graph);
if ( !gfile.is_open() ) cout<<"Could not open graph description file\n";
//start parsing
while(getline(gfile,inptext)){
istringstream sstream(inptext);
int i=0;
sstream >> name;
if(name.compare("TASK")==0){
sstream >> name;i
//wrte node name to hash index i++
sstream >> name;
if (name.compare("TYPE")==0){
sstream >> name;
//retrieve node index from hash
//write node weight to matrix
}
}
if(name.compare("ARC")==0){
sstream >> name;
//write edge name to hash index i++
sstream >> name;
if (name.compare("FROM")==0){
sstream >> name;
//retrieve node index a from hash
}
sstream >> name;
if (name.compare("TO")==0){
sstream >> name;
//retrieve node index b from hash
if (name.compare("TYPE")==0){
sstream >> name;
//write edge weight to matrix index a b
}
}
}
i++;
}
//end parsing
gfile.close();
}
私はトークンを読んだことがないので、トークンを扱ったことがありません。今私が遭遇した問題はTYPE
、ファイルの下部からの値の読み取りサイクルです。それらの識別子は通常の数字であり、検索する識別子にすることはできません。「# type」を探すのが最善の方法だと思いますが、文字列ストリームを使用しているため、対処が少し難しくなります。2番目の問題は、ノードの数が事前に不明であるため、グラフのサイズに合わせて配列マトリックスを初期化できないことです...
するべきか:
- a) ファイルを 2 回読み取ります。1 回目はノードをカウントするため、もう 1 回は実際にデータを読み取るためです。
- b)ベクトル/マトリックスタイプを使用します(これまで使用したことがなく、マトリックスクラスを構築する必要があると思います)
- c) 他のものを使う
私が考えているマトリックスはマトリックス[x] [x]である必要があります。ここで、nはノードの重みで、eはエッジの重みです(エッジは一方向にしか移動しないためミラーリングされていません)これまでのところ、マトリックスにタイプ番号を入力して読み取ることを計画しました後でハッシュまたはベクトルから型を取得し、正しい値に置き換えます
A B C D E
A n 0 0 0 0
B e n 0 0 0
C e e n 0 0
D e e e n 0
E e e e e n
このファイルをより簡単に読み取って解析する方法を誰かが知っていれば、それは素晴らしいことです。