2023-11-19 02:12:44 +03:00
|
|
|
package Visual_DVM_2021.Passes.All;
|
2023-09-17 22:13:42 +03:00
|
|
|
import Common.Global;
|
|
|
|
|
import ProjectData.SapforData.Arrays.ProjectArray;
|
2023-11-19 02:12:44 +03:00
|
|
|
import Visual_DVM_2021.Passes.SilentSapforPass;
|
2023-09-17 22:13:42 +03:00
|
|
|
public class SPF_GetArrayLinks extends SilentSapforPass {
|
|
|
|
|
@Override
|
|
|
|
|
protected void body() throws Exception {
|
|
|
|
|
sapfor.RunAnalysis(
|
|
|
|
|
getSapforPassName(),
|
|
|
|
|
-Global.messagesServer.getPort(),
|
|
|
|
|
Global.packSapforSettings(),
|
|
|
|
|
target.getProjFile().getAbsolutePath());
|
|
|
|
|
}
|
|
|
|
|
protected void unpack(String packed) throws Exception {
|
|
|
|
|
//----------------------------------------
|
|
|
|
|
/*
|
|
|
|
|
map<DIST::Array*, set<DIST::Array*» arrayLinksByFuncCalls;как
|
|
|
|
|
id_1|number_1|link_id1|link_id2|link_id3|id_2|number_2|link_id1|link_id2|link_id3
|
|
|
|
|
*/
|
|
|
|
|
//эту инфу суем в список объявленных массивов, чтобы не плодить лишних таблиц.
|
|
|
|
|
String[] data = packed.split("\\|");
|
|
|
|
|
long current_id;
|
|
|
|
|
int links_size = 0;
|
|
|
|
|
ProjectArray current_array = null;
|
|
|
|
|
int j = 0;
|
|
|
|
|
for (int i = 0; i < data.length; ++i) {
|
|
|
|
|
switch (j) {
|
|
|
|
|
case 0:
|
|
|
|
|
current_id = Long.parseLong(data[i]);
|
|
|
|
|
current_array =
|
|
|
|
|
target.declaratedArrays.get(current_id);
|
|
|
|
|
current_array.links.clear();
|
|
|
|
|
j++;
|
|
|
|
|
break;
|
|
|
|
|
case 1:
|
|
|
|
|
links_size = Integer.parseInt(data[i]);
|
|
|
|
|
j++;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
if (links_size > 0) {
|
|
|
|
|
long link_id = Long.parseLong(data[i]);
|
|
|
|
|
current_array.links.put(link_id, target.declaratedArrays.get(link_id));
|
|
|
|
|
links_size--;
|
|
|
|
|
}
|
|
|
|
|
if (links_size == 0) {
|
|
|
|
|
j = 0;
|
|
|
|
|
current_array = null;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@Override
|
|
|
|
|
protected void performDone() throws Exception {
|
|
|
|
|
if (!sapfor.getResult().isEmpty()) {
|
|
|
|
|
unpack(sapfor.getResult());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|