import java.util.ArrayList; import java.util.Collection; import java.util.Map; import java.util.HashMap; public class VHDLEntity { private static final Map FROM_ID; static { FROM_ID = new HashMap(); } public static Collection get_all () { return FROM_ID.values(); } public static void add_element (final String id) { if (!FROM_ID.containsKey(id)) { FROM_ID.put(id, new VHDLEntity(id)); } } public static VHDLEntity get_from_id (final String id) { final VHDLEntity result; result = FROM_ID.get(id); if (result == null) { System.err.println ( "[E] Element " + id + " is used like an entity, but is not declared as such before that" + " use." ); System.exit(-1); } return result; } public static VHDLEntity find (final String id) { return FROM_ID.get(id); } /******************************************************************************/ private final Collection process_instances; private final Collection waveform_instances; private final OutputFile output_file; private final Collection ports; private final String id; private VHDLArchitecture architecture; private VHDLEntity (final String id) { this.id = id; ports = new ArrayList(); architecture = null; this.process_instances = new ArrayList(); this.waveform_instances = new ArrayList(); output_file = OutputFile.new_output_file("instances_in_" + id + ".mod"); } public String get_id () { return id; } public void add_port (final String pt) { if (!ports.contains(pt)) { ports.add(pt); } } public void set_architecture (final VHDLArchitecture arch) { architecture = arch; } public VHDLArchitecture get_architecture () { return architecture; } public Collection get_process_instances () { return process_instances; } public Collection get_waveform_instances () { return waveform_instances; } public void generate_instance () { final Map local_conversion; local_conversion = new HashMap(); for (final String pt: ports) { final VHDLWaveform wfm; final VHDLWaveform.Instance i_wfm; wfm = VHDLWaveform.get_from_id(Waveforms.get_waveform_id_from_id(pt)); i_wfm = wfm.add_instance(this); waveform_instances.add(i_wfm); local_conversion.put(wfm, i_wfm); } architecture.add_instance_to ( process_instances, waveform_instances, 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); } } }