Files
VisualSapfor/src/Visual_DVM_2021/Passes/All/SPF_GetGraphLoops.java

75 lines
2.7 KiB
Java
Raw Normal View History

package Visual_DVM_2021.Passes.All;
2024-10-11 00:00:30 +03:00
import Common.Utils.Utils_;
2024-10-09 22:01:19 +03:00
import _VisualDVM.Current;
import _VisualDVM.Visual.UI;
2023-09-17 22:13:42 +03:00
import Common.Utils.Index;
2024-10-09 22:21:57 +03:00
import _VisualDVM.ProjectData.Files.DBProjectFile;
import _VisualDVM.ProjectData.SapforData.Loops.Loop;
import Visual_DVM_2021.Passes.SapforAnalysis;
2023-09-17 22:13:42 +03:00
import java.util.Vector;
public class SPF_GetGraphLoops extends SapforAnalysis {
@Override
public String phase() {
return "LOOP_GRAPH";
}
@Override
protected void showPreparation() {
if (Current.HasFile())
Current.getFile().form.ShowNoLoops();
}
@Override
protected boolean alwaysCheck() {
return true;
}
@Override
protected boolean isAtomic() {
return false;
}
@Override
protected void performPreparation() throws Exception {
super.performPreparation(); //удаление интеррупта.
target.numLoops = 0;
for (DBProjectFile file : target.db.files.Data.values()) {
file.LoopNests.clear();
file.AllLoops.clear();
file.LoopGraphTitle = "Всего циклов: 0";
}
}
@Override
protected void unpack(String packed) throws Exception {
Vector<String> done_programs = new Vector<>();
String[] splitedPackedGraph = packed.split("\\|");
for (int i = 0; i < splitedPackedGraph.length; i += 2) {
2024-10-11 00:00:30 +03:00
String name_ = Utils_.toW(splitedPackedGraph[i]);
2023-09-17 22:13:42 +03:00
String[] packedLoopInfo = splitedPackedGraph[i + 1].split("#");
Index idx = new Index();
int nests_ = Integer.parseInt(packedLoopInfo[idx.Inc()]);
DBProjectFile program = target.db.files.Data.get(name_);
if (!done_programs.contains(name_)) {
for (int k = 0; k < nests_; ++k) {
Loop newLoop = new Loop(packedLoopInfo, idx, program);
program.LoopNests.add(newLoop);
}
program.LoopGraphTitle = "Всего циклов: " + program.AllLoops.size();
target.numLoops += program.AllLoops.size();
done_programs.add(name_);
}
}
target.UpdateLoopsCount();
}
@Override
protected void FocusResult() {
super.FocusResult();
if (Current.HasFile())
Current.getFile().form.FocusLoops();
}
@Override
protected void showDone() throws Exception {
UI.getMainWindow().getProjectWindow().getAnalysisWindow().ShowLoopsCount();
UI.getMainWindow().getProjectWindow().getAnalysisWindow().ShowRegions();
if (Current.HasFile())
Current.getFile().form.ShowLoops();
super.showDone();
}
}