From 35e6857fb09b006da9f8cc3f59f239f078cc69a1 Mon Sep 17 00:00:00 2001 From: Nathanael Sensfelder Date: Tue, 29 Aug 2017 13:54:43 +0200 Subject: Still working on the implementation. --- instance-calculator/src/Instances.java | 30 ++++++++ instance-calculator/src/Main.java | 26 ++++--- instance-calculator/src/ModelFile.java | 36 ++-------- instance-calculator/src/ProcessInstance.java | 9 --- instance-calculator/src/VHDLArchitecture.java | 9 +++ instance-calculator/src/VHDLComponent.java | 60 ++++++++++++++++ instance-calculator/src/VHDLEntity.java | 30 +++++++- instance-calculator/src/VHDLProcess.java | 76 +++++++++++++++++++- instance-calculator/src/VHDLWaveform.java | 99 +++++++++++++++++++++++++++ 9 files changed, 318 insertions(+), 57 deletions(-) create mode 100644 instance-calculator/src/Instances.java delete mode 100644 instance-calculator/src/ProcessInstance.java create mode 100644 instance-calculator/src/VHDLWaveform.java diff --git a/instance-calculator/src/Instances.java b/instance-calculator/src/Instances.java new file mode 100644 index 0000000..5d6ec8b --- /dev/null +++ b/instance-calculator/src/Instances.java @@ -0,0 +1,30 @@ +import java.util.*; + +public class Instances +{ + private static final Map instances; + + static + { + instances = new HashMap(); + } + + public static String get_id_for (final int i) + { + final Integer j; + String result; + + j = new Integer(i); + + result = instances.get(j); + + if (result == null) + { + result = (Main.get_parameters().get_id_prefix() + i); + + instances.put(j, result); + } + + return result; + } +} diff --git a/instance-calculator/src/Main.java b/instance-calculator/src/Main.java index 488b9bb..3835c16 100644 --- a/instance-calculator/src/Main.java +++ b/instance-calculator/src/Main.java @@ -54,25 +54,18 @@ public class Main * { * a = Candidates.pop(); * - * for (c: a.component) + * if (a.has_components_not_in(ProcessedCandidates)) * { - * if (!contains(c.target, ProcessedCandidates)) - * { - * FuturCandidates.push(a); - * continue; - * } + * FuturCandidates.push(a); * } + * else + * { + * is_stuck = False; * - * is_stuck = False; - * - * a.instantiate_all_processes(); + * a.create_instance(); * - * for (c: a.component) - * { - * a.integrate_instanciated_processes_from(c); + * ProcessedCandidates.add(a); * } - * - * ProcessedCandidates.add(a); * } * * if (is_stuck) @@ -82,4 +75,9 @@ public class Main * } */ } + + public static Parameters get_parameters () + { + return PARAMETERS; + } } diff --git a/instance-calculator/src/ModelFile.java b/instance-calculator/src/ModelFile.java index 7ca0899..691de1a 100644 --- a/instance-calculator/src/ModelFile.java +++ b/instance-calculator/src/ModelFile.java @@ -178,9 +178,7 @@ public class ModelFile return false; } - VHDLEntity.handle_is_port_of(input[1], input[2]); - - return true; + return VHDLEntity.handle_is_port_of(input[1], input[2]); } private static boolean handle_is_architecture_of @@ -193,24 +191,7 @@ public class ModelFile return false; } - VHDLArchitecture.handle_is_architecture_of(input[1], input[2]); - - return true; - } - - private static boolean handle_belongs_to_architecture - ( - final String[] input - ) - { - if (input.length != 3) - { - return false; - } - - VHDLArchitecture.handle_belongs_to_architecture(input[1], input[2]); - - return true; + return VHDLArchitecture.handle_is_architecture_of(input[1], input[2]); } private static boolean handle_belongs_to_architecture @@ -223,9 +204,8 @@ public class ModelFile return false; } - VHDLArchitecture.handle_belongs_to_architecture(input[1], input[2]); - - return true; + return + VHDLArchitecture.handle_belongs_to_architecture(input[1], input[2]); } private static boolean handle_is_component_of @@ -238,9 +218,7 @@ public class ModelFile return false; } - VHDLComponent.handle_is_component_of(input[1], input[2]); - - return true; + return VHDLComponent.handle_is_component_of(input[1], input[2]); } private static boolean handle_port_maps @@ -253,9 +231,7 @@ public class ModelFile return false; } - VHDLComponent.handle_port_maps(input[1], input[2], input[3]); - - return true; + return VHDLComponent.handle_port_maps(input[1], input[2], input[3]); } private ModelFile () {} /* Utility Class */ diff --git a/instance-calculator/src/ProcessInstance.java b/instance-calculator/src/ProcessInstance.java deleted file mode 100644 index 580df6b..0000000 --- a/instance-calculator/src/ProcessInstance.java +++ /dev/null @@ -1,9 +0,0 @@ -import java.util.*; - -public class ProcessInstance -{ - private final String id; - private String process_id; - private Map wfm_map; - -} diff --git a/instance-calculator/src/VHDLArchitecture.java b/instance-calculator/src/VHDLArchitecture.java index 2834ab3..7f3be10 100644 --- a/instance-calculator/src/VHDLArchitecture.java +++ b/instance-calculator/src/VHDLArchitecture.java @@ -23,6 +23,7 @@ public class VHDLArchitecture final String arch_id ) { + /* TODO */ return false; } @@ -32,6 +33,7 @@ public class VHDLArchitecture final String e_id ) { + /* TODO */ return false; } @@ -40,6 +42,8 @@ public class VHDLArchitecture private final List components; private final String id; + private VHDLEntity entity; + private VHDLArchitecture (final String id) { this.id = id; @@ -47,4 +51,9 @@ public class VHDLArchitecture processes = new ArrayList(); components = new ArrayList(); } + + public VHDLEntity get_entity () + { + return entity; + } } diff --git a/instance-calculator/src/VHDLComponent.java b/instance-calculator/src/VHDLComponent.java index 493ba22..5972173 100644 --- a/instance-calculator/src/VHDLComponent.java +++ b/instance-calculator/src/VHDLComponent.java @@ -23,6 +23,7 @@ public class VHDLComponent final String e_id ) { + /* TODO */ return false; } @@ -33,6 +34,7 @@ public class VHDLComponent final String wfm_id ) { + /* TODO */ return false; } @@ -40,6 +42,64 @@ public class VHDLComponent private final Map port_map; private final String id; + private VHDLEntity destination; + private VHDLArchitecture parent; + + public void add_instance_content_to + ( + final Collection process_instances, + final Collection waveform_instances + ) + { + final Collection dest_process_instances; + final Collection dest_waveform_instances; + final Map wfm_map; + + dest_process_instances = destination.get_process_instances(); + dest_waveform_instances = destination.get_waveform_instances(); + + wfm_map = new HashMap(); + + for (final VHDLWaveform.Instance i_wfm: dest_waveform_instances) + { + final String dest; + final VHDLWaveform.Instance replacement; + + dest = + port_map.get + ( + Waveforms.get_id_from_waveform_id + ( + i_wfm.get_parent().get_id() + ) + ); + + if (dest == null) + { + replacement = i_wfm.get_parent().add_instance(parent.get_entity()); + } + else + { + replacement = + VHDLWaveform.get_from_id(dest).add_instance + ( + parent.get_entity() + ); + } + + wfm_map.put(i_wfm, replacement); + waveform_instances.add(replacement); + } + + for (final VHDLProcess.Instance i_ps: dest_process_instances) + { + process_instances.add + ( + i_ps.add_instance(parent.get_entity(), wfm_map) + ); + } + } + private VHDLComponent (final String id) { this.id = id; diff --git a/instance-calculator/src/VHDLEntity.java b/instance-calculator/src/VHDLEntity.java index a5ba28c..8059566 100644 --- a/instance-calculator/src/VHDLEntity.java +++ b/instance-calculator/src/VHDLEntity.java @@ -23,17 +23,45 @@ public class VHDLEntity final String e_id ) { + /* TODO */ + return false; + } + + public static boolean handle_is_architecture_of + ( + final String pt_id, + final String e_id + ) + { + /* TODO */ return false; } /******************************************************************************/ + private final Collection process_instances; + private final Collection waveform_instances; + private final List ports; private final String id; + private String architecture; + private VHDLEntity (final String id) { this.id = id; - ports = new ArrayList(); + + this.process_instances = new ArrayList(); + this.waveform_instances = new ArrayList(); + } + + public Collection get_process_instances () + { + return process_instances; + } + + public Collection get_waveform_instances () + { + return waveform_instances; } } diff --git a/instance-calculator/src/VHDLProcess.java b/instance-calculator/src/VHDLProcess.java index a017ef4..f85fe9a 100644 --- a/instance-calculator/src/VHDLProcess.java +++ b/instance-calculator/src/VHDLProcess.java @@ -23,18 +23,88 @@ public class VHDLProcess final String ps_id ) { + /* TODO */ return false; } /******************************************************************************/ - - private final List accessed_wfm; + private final Collection accessed_wfm; + private final Collection instances; private final String id; + private int instances_count; private VHDLProcess (final String id) { this.id = id; + accessed_wfm = new ArrayList(); + instances = new ArrayList(); + instances_count = 0; + } + + public static class Instance + { + private final String id; + private final VHDLProcess parent; + private final Map iwfm_map; + private final VHDLEntity visibility; + + private Instance + ( + final String id, + final VHDLProcess parent, + final VHDLEntity visibility, + final Map iwfm_map + ) + { + this.id = id; + this.parent = parent; + this.visibility = visibility; + this.iwfm_map = iwfm_map; + } + + public VHDLProcess get_parent () + { + return parent; + } + + public VHDLProcess.Instance add_instance + ( + final VHDLEntity visibility, + final Map convertion + ) + { + final VHDLProcess.Instance result; + final Set> iwfm_set; + final Map new_iwfm_map; + + iwfm_set = iwfm_map.entrySet(); + + new_iwfm_map = new HashMap(); - ports = new ArrayList(); + for + ( + final Map.Entry me: iwfm_set + ) + { + new_iwfm_map.put + ( + convertion.get(me.getKey()), + me.getValue() + ); + } + + result = + new VHDLProcess.Instance + ( + Instances.get_id_for(parent.instances_count), + parent, + visibility, + new_iwfm_map + ); + + parent.instances_count += 1; + + return result; + } } } diff --git a/instance-calculator/src/VHDLWaveform.java b/instance-calculator/src/VHDLWaveform.java new file mode 100644 index 0000000..83b9626 --- /dev/null +++ b/instance-calculator/src/VHDLWaveform.java @@ -0,0 +1,99 @@ +import java.util.*; + +public class VHDLWaveform +{ + private static final Map FROM_ID; + + static + { + FROM_ID = new HashMap(); + } + + 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) + { + return FROM_ID.get(id); + } + + public static boolean handle_is_accessed_by + ( + final String wfm_id, + final String ps_id + ) + { + /* TODO */ + return false; + } + +/******************************************************************************/ + private final Collection accessed_wfm; + private final Collection instances; + private final String id; + private int instances_count; + + private VHDLWaveform (final String id) + { + this.id = id; + accessed_wfm = new ArrayList(); + instances = new ArrayList(); + instances_count = 0; + } + + public VHDLWaveform.Instance add_instance + ( + final VHDLEntity visibility + ) + { + final VHDLWaveform.Instance result; + + result = + new VHDLWaveform.Instance + ( + Instances.get_id_for(instances_count), + this, + visibility + ); + + instances.add(result); + + instances_count += 1; + + return result; + } + + public String get_id () + { + return id; + } + + public static class Instance + { + private final String id; + private final VHDLWaveform parent; + private final VHDLEntity visibility; + + private Instance + ( + final String id, + final VHDLWaveform parent, + final VHDLEntity visibility + ) + { + this.id = id; + this.parent = parent; + this.visibility = visibility; + } + + public VHDLWaveform get_parent () + { + return parent; + } + } +} -- cgit v1.2.3-70-g09d2