summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'instance-calculator/src/VHDLWaveform.java')
-rw-r--r--instance-calculator/src/VHDLWaveform.java190
1 files changed, 190 insertions, 0 deletions
diff --git a/instance-calculator/src/VHDLWaveform.java b/instance-calculator/src/VHDLWaveform.java
new file mode 100644
index 0000000..feb1e51
--- /dev/null
+++ b/instance-calculator/src/VHDLWaveform.java
@@ -0,0 +1,190 @@
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Map;
+import java.util.HashMap;
+
+public class VHDLWaveform
+{
+ private static final Map<String, VHDLWaveform> FROM_ID;
+
+ static
+ {
+ FROM_ID = new HashMap<String, VHDLWaveform>();
+ }
+
+ public static void add_element (final String id)
+ {
+ if (!FROM_ID.containsKey(id))
+ {
+ FROM_ID.put(id, new VHDLWaveform(id));
+ }
+ }
+
+ public static VHDLWaveform get_from_id (final String id)
+ {
+ final VHDLWaveform result;
+
+ result = FROM_ID.get(id);
+
+ if (result == null)
+ {
+ System.err.println
+ (
+ "[E] Element "
+ + id
+ + " is used like a waveform, but is not declared as such before"
+ + " that use."
+ );
+
+ new Exception().printStackTrace();
+
+ System.exit(-1);
+ }
+
+ return result;
+ }
+
+ public static VHDLWaveform find (final String id)
+ {
+ return FROM_ID.get(id);
+ }
+
+/******************************************************************************/
+ private final Collection<String> accessed_wfm;
+ private final Collection<VHDLWaveform.Instance> instances;
+ private final String id;
+ private int instances_count;
+
+ private VHDLArchitecture architecture;
+
+ private VHDLWaveform (final String id)
+ {
+ this.id = id;
+ accessed_wfm = new ArrayList<String>();
+ instances = new ArrayList<VHDLWaveform.Instance>();
+ instances_count = 0;
+ architecture = null;
+ }
+
+ public VHDLWaveform.Instance add_instance
+ (
+ final VHDLEntity visibility
+ )
+ {
+ final VHDLWaveform.Instance result;
+
+ result =
+ new VHDLWaveform.Instance
+ (
+ this,
+ visibility
+ );
+
+ instances.add(result);
+
+ instances_count += 1;
+
+ return result;
+ }
+
+ public String get_id ()
+ {
+ return id;
+ }
+
+ public void set_architecture (final VHDLArchitecture arch)
+ {
+ architecture = arch;
+ }
+
+ @Override
+ public String toString ()
+ {
+ return id;
+ }
+
+ public static class Instance
+ {
+ private static int instances_count;
+
+ static
+ {
+ instances_count = 0;
+ }
+
+ private final String id;
+ private final VHDLWaveform parent;
+ private final VHDLEntity visibility;
+
+ private Instance
+ (
+ final VHDLWaveform parent,
+ final VHDLEntity visibility
+ )
+ {
+ this.id =
+ (
+ Main.get_parameters().get_id_prefix()
+ + "wfm_"
+ + instances_count
+ );
+
+ instances_count += 1;
+
+ this.parent = parent;
+ 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("(add_element wfm_instance ");
+ of.write(id);
+ of.write(")");
+ of.insert_newline();
+
+ of.write("(is_wfm_instance_of ");
+ 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(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 id;
+ }
+ }
+}