106 lines
4.4 KiB
Java
106 lines
4.4 KiB
Java
package TestingSystem.SAPFOR.SapforSettings;
|
|
import Common.Database.DBObject;
|
|
import Common.Global;
|
|
import Common.Utils.TextLog;
|
|
import Common.Utils.Utils;
|
|
import TestingSystem.Common.Settings.Settings;
|
|
import TestingSystem.SAPFOR.SapforSettingsCommand.SapforSettingsCommand;
|
|
import Visual_DVM_2021.Passes.PassCode_2021;
|
|
|
|
import java.util.List;
|
|
import java.util.Vector;
|
|
public class SapforSettings extends Settings {
|
|
//настройки.
|
|
public int FREE_FORM = 0; //"Свободный выходной стиль"; -f90
|
|
public int STATIC_SHADOW_ANALYSIS = 0;//"Оптимизация теневых обменов"; -sh
|
|
public int MAX_SHADOW_WIDTH = 50; // "Максимальный размер теневых граней"; (%) -shwidth значение поля
|
|
public int KEEP_SPF_DIRECTIVES = 0; //"Сохранять SPF директивы при построении параллельных вариантов"; -keepSPF
|
|
public int KEEP_DVM_DIRECTIVES = 0;// "Учитывать DVM директивы"; -keepDVM
|
|
//----
|
|
//----
|
|
public void packFlags() {
|
|
Vector<String> res = new Vector<>();
|
|
//--
|
|
if (FREE_FORM > 0)
|
|
res.add("-f90");
|
|
if (STATIC_SHADOW_ANALYSIS > 0)
|
|
res.add("-sh");
|
|
if (MAX_SHADOW_WIDTH > 0)
|
|
res.add("-shwidth " + MAX_SHADOW_WIDTH);
|
|
if (KEEP_DVM_DIRECTIVES > 0)
|
|
res.add("-keepDVM");
|
|
if (KEEP_SPF_DIRECTIVES > 0)
|
|
res.add("-keepSPF");
|
|
//--
|
|
flags = String.join(" ", res);
|
|
}
|
|
//--
|
|
@Override
|
|
public void SynchronizeFields(DBObject src) {
|
|
super.SynchronizeFields(src);
|
|
SapforSettings c = (SapforSettings) src;
|
|
FREE_FORM = c.FREE_FORM;
|
|
STATIC_SHADOW_ANALYSIS = c.STATIC_SHADOW_ANALYSIS;
|
|
MAX_SHADOW_WIDTH = c.MAX_SHADOW_WIDTH;
|
|
KEEP_SPF_DIRECTIVES = c.KEEP_SPF_DIRECTIVES;
|
|
KEEP_DVM_DIRECTIVES = c.KEEP_DVM_DIRECTIVES;
|
|
}
|
|
public SapforSettings(SapforSettings sapforSettings) {
|
|
this.SynchronizeFields(sapforSettings);
|
|
}
|
|
public SapforSettings() {
|
|
}
|
|
public Vector<PassCode_2021> getCodes() {
|
|
Vector<PassCode_2021> res = new Vector<>();
|
|
for (SapforSettingsCommand command : Global.testingServer.db.sapforSettingsCommands.Data.values())
|
|
if (command.sapforsettings_id == id) res.add(command.passCode);
|
|
return res;
|
|
}
|
|
public List<PassCode_2021> getCheckedCodes(){
|
|
Vector<PassCode_2021> res = getCodes();
|
|
if (!res.firstElement().equals(PassCode_2021.SPF_InsertIncludesPass))
|
|
res.insertElementAt(PassCode_2021.SPF_CorrectCodeStylePass,0); //всегда добавляется.
|
|
return res;
|
|
}
|
|
@Override
|
|
public boolean validate(TextLog Log) {
|
|
boolean res = true;
|
|
Vector<PassCode_2021> codes = getCodes();
|
|
if (codes.size() == 0) {
|
|
Log.Writeln_("Настройки:" + id + " не содержат ни одного прохода.");
|
|
return false;
|
|
}
|
|
//-
|
|
int first = 0;
|
|
int last = codes.size() - 1;
|
|
Vector<PassCode_2021> matches = new Vector<>();
|
|
for (int i = 0; i < codes.size(); ++i) {
|
|
PassCode_2021 code = codes.get(i);
|
|
if (code.isSapforStart()) {
|
|
if (i > first) {
|
|
Log.Writeln_("Неверные настройки:" + id + ": проход" +
|
|
Utils.Brackets(code.getDescription()) +
|
|
" может быть только первым!");
|
|
res=false;
|
|
}
|
|
}
|
|
if (code.isSapforTerminal()) {
|
|
if (i < last) {
|
|
Log.Writeln_("Неверные настройки:" + id + ": проход " +
|
|
Utils.Brackets(code.getDescription()) +
|
|
" может быть только последним!");
|
|
res= false;
|
|
}
|
|
}
|
|
if (matches.contains(code)) {
|
|
Log.Writeln_("Неверные настройки:" + id + ": проход " +
|
|
Utils.Brackets(code.getDescription()) +
|
|
" запрещено применять более одного раза!");
|
|
res=false;
|
|
} else matches.add(code);
|
|
}
|
|
//-
|
|
return res;
|
|
}
|
|
}
|