| summaryrefslogtreecommitdiff |
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2017-08-30 11:22:16 +0200 |
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2017-08-30 11:22:16 +0200 |
| commit | aebd8f1bd52495b0a787e0cccfa4501141eace2b (patch) | |
| tree | f2c0339b6cb0767fd858ea21523fd18f1bfdd075 | |
| parent | 882d605d684abf7120a1b5b095e7f5425e77dd34 (diff) | |
Outputs are now generated.
| -rw-r--r-- | instance-calculator/Makefile | 2 | ||||
| -rw-r--r-- | instance-calculator/src/Instances.java | 22 | ||||
| -rw-r--r-- | instance-calculator/src/Main.java | 3 | ||||
| -rw-r--r-- | instance-calculator/src/ModelFile.java | 16 | ||||
| -rw-r--r-- | instance-calculator/src/OutputFile.java | 135 | ||||
| -rw-r--r-- | instance-calculator/src/Parameters.java | 17 | ||||
| -rw-r--r-- | instance-calculator/src/VHDLArchitecture.java | 31 | ||||
| -rw-r--r-- | instance-calculator/src/VHDLComponent.java | 31 | ||||
| -rw-r--r-- | instance-calculator/src/VHDLEntity.java | 17 | ||||
| -rw-r--r-- | instance-calculator/src/VHDLProcess.java | 63 | ||||
| -rw-r--r-- | instance-calculator/src/VHDLWaveform.java | 51 |
11 files changed, 350 insertions, 38 deletions
diff --git a/instance-calculator/Makefile b/instance-calculator/Makefile index 356b681..25d31cc 100644 --- a/instance-calculator/Makefile +++ b/instance-calculator/Makefile @@ -67,7 +67,7 @@ clean_solutions: $(JAVAC) -cp $(CLASSPATH) $< $(OUTPUT_FILE): $(MODEL_FILE) $(CLASSES) - $(JAVA) -cp $(CLASSPATH) Main $(MODEL_FILE) "inst_" $@ + $(JAVA) -cp $(CLASSPATH) Main $(MODEL_FILE) "inst_" $(INSTANCE_MODEL_DIR) $(INSTANCE_MODEL_DIR): mkdir -p $(INSTANCE_MODEL_DIR) diff --git a/instance-calculator/src/Instances.java b/instance-calculator/src/Instances.java index 5d6ec8b..d4954d9 100644 --- a/instance-calculator/src/Instances.java +++ b/instance-calculator/src/Instances.java @@ -2,11 +2,13 @@ import java.util.*; public class Instances { - private static final Map<Integer, String> instances; + private static final Map<Integer, String> INSTANCES; + private static final OutputFile OUTPUT_FILE; static { - instances = new HashMap<Integer, String>(); + INSTANCES = new HashMap<Integer, String>(); + OUTPUT_FILE = OutputFile.new_output_file("instances.mod"); } public static String get_id_for (final int i) @@ -16,15 +18,27 @@ public class Instances j = new Integer(i); - result = instances.get(j); + result = INSTANCES.get(j); if (result == null) { result = (Main.get_parameters().get_id_prefix() + i); - instances.put(j, result); + INSTANCES.put(j, result); } return result; } + + public static void write_predicates () + { + for (final String id: INSTANCES.values()) + { + OUTPUT_FILE.write("(add_element instance "); + OUTPUT_FILE.write(id); + OUTPUT_FILE.write(")"); + + OUTPUT_FILE.insert_newline(); + } + } } diff --git a/instance-calculator/src/Main.java b/instance-calculator/src/Main.java index b521324..a23da06 100644 --- a/instance-calculator/src/Main.java +++ b/instance-calculator/src/Main.java @@ -37,6 +37,8 @@ public class Main } create_instances(); + Instances.write_predicates(); + OutputFile.close_all(); } private static void create_instances () @@ -84,6 +86,7 @@ public class Main e.generate_instance(); + e.write_predicates(); processed_candidates.add(e); } else diff --git a/instance-calculator/src/ModelFile.java b/instance-calculator/src/ModelFile.java index 8589116..1f9297e 100644 --- a/instance-calculator/src/ModelFile.java +++ b/instance-calculator/src/ModelFile.java @@ -107,6 +107,8 @@ public class ModelFile } } + VHDLArchitecture.resolve_all_waveforms(); + return true; } @@ -233,8 +235,6 @@ public class ModelFile final VHDLArchitecture arch; final VHDLProcess ps; final VHDLComponent cmp; - final String wfm_id; - final VHDLWaveform wfm; if (input.length != 3) { @@ -263,17 +263,7 @@ public class ModelFile return true; } - wfm_id = Waveforms.find_waveform_id_from_id(input[1]); - - if (wfm_id != null) - { - wfm = VHDLWaveform.get_from_id(wfm_id); - - arch.add_waveform(wfm); - wfm.set_architecture(arch); - - return true; - } + arch.add_futur_waveform(input[1]); return true; } diff --git a/instance-calculator/src/OutputFile.java b/instance-calculator/src/OutputFile.java new file mode 100644 index 0000000..201ca2b --- /dev/null +++ b/instance-calculator/src/OutputFile.java @@ -0,0 +1,135 @@ +import java.util.ArrayList; +import java.util.Collection; + +import java.io.File; +import java.io.FileWriter; +import java.io.BufferedWriter; + +public class OutputFile +{ + private static Collection<OutputFile> ALL_OUTPUT_FILES; + + static + { + ALL_OUTPUT_FILES = new ArrayList<OutputFile>(); + } + + public static void close_all () + { + for (final OutputFile f: ALL_OUTPUT_FILES) + { + f.close(); + } + } + + public static OutputFile new_output_file (final String filename) + { + final OutputFile result; + + result = + new OutputFile + ( + Main.get_parameters().get_output_directory() + + "/" + + filename + ); + + ALL_OUTPUT_FILES.add(result); + + return result; + } + + /** Non-Static *************************************************************/ + private final String filename; + private final BufferedWriter buffered_writer; + + private OutputFile (final String filename) + { + BufferedWriter bf; + + this.filename = filename; + + try + { + bf = new BufferedWriter(new FileWriter(new File(filename))); + } + catch (final Exception e) + { + bf = null; + + System.err.println + ( + "[F] Could not create new output file \"" + + filename + + "\":" + ); + + e.printStackTrace(); + + System.exit(-1); + } + + buffered_writer = bf; + } + + public void write (final String data) + { + try + { + buffered_writer.write(data); + } + catch (final Exception e) + { + System.err.println + ( + "[F] Could not write to output file \"" + + filename + + "\":" + ); + + e.printStackTrace(); + + System.exit(-1); + } + } + + public void insert_newline () + { + try + { + buffered_writer.newLine(); + } + catch (final Exception e) + { + System.err.println + ( + "[F] Could not write to output file \"" + + filename + + "\":" + ); + + e.printStackTrace(); + + System.exit(-1); + } + } + + private void close () + { + try + { + buffered_writer.close(); + } + catch (final Exception e) + { + System.err.println + ( + "[E] Could not properly close output file \"" + + filename + + "\":" + ); + + e.printStackTrace(); + } + } +} diff --git a/instance-calculator/src/Parameters.java b/instance-calculator/src/Parameters.java index e01f912..b8bba30 100644 --- a/instance-calculator/src/Parameters.java +++ b/instance-calculator/src/Parameters.java @@ -2,7 +2,7 @@ public class Parameters { private final String model_file; private final String id_prefix; - private final String output_file; + private final String output_dir; private final boolean are_valid; public static void print_usage () @@ -11,12 +11,12 @@ public class Parameters ( "Instance-Calculator\n" + "USAGE:\n" - + "\tjava Main <INSTRUCTIONS> <ID_PREFIX> <OUTPUT_FILE>\n" + + "\tjava Main <INSTRUCTIONS> <ID_PREFIX> <OUTPUT_DIR>\n" + "PARAMETERS:\n" + "\t<INSTRUCTIONS>\tInstruction file describing the model.\n" + "\t<ID_PREFIX>\tPrefix for the IDs of generated paths.\n" - + "\t<OUTPUT_FILE>\tFile in which to output the generated" - + " instructions." + + "\t<OUTPUT_DIR>\tDirectory in which to output the generated" + + " instruction files." ); } @@ -28,7 +28,7 @@ public class Parameters model_file = new String(); id_prefix = new String(); - output_file = new String(); + output_dir = new String(); are_valid = false; } @@ -36,7 +36,8 @@ public class Parameters { model_file = args[0]; id_prefix = args[1]; - output_file = args[2]; + output_dir = args[2]; + are_valid = true; } } @@ -51,9 +52,9 @@ public class Parameters return id_prefix; } - public String get_output_file () + public String get_output_directory () { - return output_file; + return output_dir; } public boolean are_valid () diff --git a/instance-calculator/src/VHDLArchitecture.java b/instance-calculator/src/VHDLArchitecture.java index 5597529..407a09f 100644 --- a/instance-calculator/src/VHDLArchitecture.java +++ b/instance-calculator/src/VHDLArchitecture.java @@ -9,6 +9,14 @@ public class VHDLArchitecture FROM_ID = new HashMap<String, VHDLArchitecture>(); } + public static void resolve_all_waveforms () + { + for (final VHDLArchitecture arch: FROM_ID.values()) + { + arch.resolve_waveforms(); + } + } + public static void add_element (final String id) { if (!FROM_ID.containsKey(id)) @@ -48,6 +56,7 @@ public class VHDLArchitecture private final Collection<VHDLProcess> processes; private final Collection<VHDLComponent> components; private final Collection<VHDLWaveform> waveforms; + private final Deque<String> futur_waveforms; private final String id; private VHDLEntity entity; @@ -59,6 +68,7 @@ public class VHDLArchitecture processes = new ArrayList<VHDLProcess>(); components = new ArrayList<VHDLComponent>(); waveforms = new ArrayList<VHDLWaveform>(); + futur_waveforms = new ArrayDeque<String>(); } public VHDLEntity get_entity () @@ -100,6 +110,27 @@ public class VHDLArchitecture } } + public void add_futur_waveform (final String fwfm) + { + if (!futur_waveforms.contains(fwfm)) + { + futur_waveforms.add(fwfm); + } + } + + public void resolve_waveforms () + { + while (!futur_waveforms.isEmpty()) + { + final String src_id, wfm_id; + + src_id = futur_waveforms.pop(); + + wfm_id = Waveforms.get_waveform_id_from_id(src_id); + add_waveform(VHDLWaveform.get_from_id(wfm_id)); + } + } + public void add_instance_to ( final Collection<VHDLProcess.Instance> process_instances, diff --git a/instance-calculator/src/VHDLComponent.java b/instance-calculator/src/VHDLComponent.java index fb05c6e..958a2e4 100644 --- a/instance-calculator/src/VHDLComponent.java +++ b/instance-calculator/src/VHDLComponent.java @@ -45,7 +45,7 @@ public class VHDLComponent } /******************************************************************************/ - private final Map<String, String> port_map; + private final Map<String, String> reverse_port_map; private final String id; private VHDLEntity destination; @@ -68,7 +68,7 @@ public class VHDLComponent public void add_port_map (final String src, final String dest) { - port_map.put(src, dest); + reverse_port_map.put(dest, src); } public void add_instance_content_to @@ -89,28 +89,35 @@ public class VHDLComponent for (final VHDLWaveform.Instance i_wfm: dest_waveform_instances) { - final String dest; + final String src_wfm, dest_port; final VHDLWaveform.Instance replacement; - dest = - port_map.get + dest_port = + Waveforms.get_id_from_waveform_id ( - Waveforms.get_id_from_waveform_id - ( - i_wfm.get_parent().get_id() - ) + i_wfm.get_parent().get_id() ); - if (dest == null) + src_wfm = reverse_port_map.get(dest_port); + + if (src_wfm == null) { + /* i_wfm is not linked to a port, so it needs a new instance. */ replacement = i_wfm.get_parent().add_instance(parent.get_entity()); } else { + /* + * i_wfm is linked to a port. Replace it by what's connected to the + * port. + */ replacement = local_conversion.get ( - Waveforms.get_waveform_id_from_id(dest) + VHDLWaveform.get_from_id + ( + src_wfm + ) ); } @@ -131,6 +138,6 @@ public class VHDLComponent { this.id = id; - port_map = new HashMap<String, String>(); + reverse_port_map = new HashMap<String, String>(); } } diff --git a/instance-calculator/src/VHDLEntity.java b/instance-calculator/src/VHDLEntity.java index 91de6f6..2765229 100644 --- a/instance-calculator/src/VHDLEntity.java +++ b/instance-calculator/src/VHDLEntity.java @@ -1,4 +1,5 @@ import java.util.*; +import java.io.BufferedWriter; public class VHDLEntity { @@ -53,6 +54,7 @@ public class VHDLEntity private final Collection<VHDLProcess.Instance> process_instances; private final Collection<VHDLWaveform.Instance> waveform_instances; + private final OutputFile output_file; private final Collection<String> ports; private final String id; @@ -67,6 +69,8 @@ public class VHDLEntity this.process_instances = new ArrayList<VHDLProcess.Instance>(); this.waveform_instances = new ArrayList<VHDLWaveform.Instance>(); + + output_file = OutputFile.new_output_file("instances_in_" + id + ".mod"); } public String get_id () @@ -128,4 +132,17 @@ public class VHDLEntity local_conversion ); } + + public void write_predicates () + { + for (final VHDLWaveform.Instance iwfm: waveform_instances) + { + iwfm.write_predicates_to(output_file); + } + + for (final VHDLProcess.Instance ips: process_instances) + { + ips.write_predicates_to(output_file); + } + } } diff --git a/instance-calculator/src/VHDLProcess.java b/instance-calculator/src/VHDLProcess.java index d54e0cc..eba5e46 100644 --- a/instance-calculator/src/VHDLProcess.java +++ b/instance-calculator/src/VHDLProcess.java @@ -1,4 +1,5 @@ import java.util.*; +import java.io.BufferedWriter; public class VHDLProcess { @@ -61,6 +62,11 @@ public class VHDLProcess architecture = null; } + public String get_id () + { + return id; + } + public void add_accessed_wfm (final VHDLWaveform wfm) { if (!accessed_wfm.contains(wfm)) @@ -172,5 +178,62 @@ public class VHDLProcess return result; } + + public void write_predicates_to (final OutputFile of) + { + final Set<Map.Entry<VHDLWaveform.Instance, VHDLWaveform>> iwfm_set; + + iwfm_set = iwfm_map.entrySet(); + + try + { + of.write("(is_process_instance "); + of.write(id); + of.write(" "); + of.write(parent.get_id()); + of.write(")"); + of.insert_newline(); + + of.write("(is_visible_in "); + of.write(id); + of.write(" "); + of.write(parent.get_id()); + of.write(" "); + of.write(visibility.get_id()); + of.write(")"); + of.insert_newline(); + + for + ( + final Map.Entry<VHDLWaveform.Instance, VHDLWaveform> iwfm: + iwfm_set + ) + { + of.write("(process_instance_maps "); + of.write(id); + of.write(" "); + of.write(parent.get_id()); + of.write(" "); + of.write(iwfm.getKey().get_id()); + of.write(" "); + of.write(iwfm.getKey().get_parent().get_id()); + of.write(" "); + of.write(iwfm.getValue().get_id()); + of.write(")"); + of.insert_newline(); + } + } + catch (final Exception e) + { + System.err.println + ( + "[F] Could not write to output file:" + ); + + e.printStackTrace(); + + System.exit(-1); + } + } } } diff --git a/instance-calculator/src/VHDLWaveform.java b/instance-calculator/src/VHDLWaveform.java index eb5c38e..74edc88 100644 --- a/instance-calculator/src/VHDLWaveform.java +++ b/instance-calculator/src/VHDLWaveform.java @@ -1,4 +1,5 @@ import java.util.*; +import java.io.BufferedWriter; public class VHDLWaveform { @@ -95,6 +96,12 @@ public class VHDLWaveform architecture = arch; } + @Override + public String toString () + { + return id; + } + public static class Instance { private final String id; @@ -113,9 +120,53 @@ public class VHDLWaveform this.visibility = visibility; } + public String get_id () + { + return id; + } + public VHDLWaveform get_parent () { return parent; } + + public void write_predicates_to (final OutputFile of) + { + try + { + of.write("(is_waveform_instance "); + of.write(id); + of.write(" "); + of.write(parent.get_id()); + of.write(")"); + of.insert_newline(); + + of.write("(is_visible_in "); + of.write(id); + of.write(" "); + of.write(parent.get_id()); + of.write(" "); + of.write(visibility.get_id()); + of.write(")"); + of.insert_newline(); + } + catch (final Exception e) + { + System.err.println + ( + "[F] Could not write to output file:" + ); + + e.printStackTrace(); + + System.exit(-1); + } + } + + @Override + public String toString () + { + return "<" + parent.get_id() + ", " + id + ">"; + } } } |


