summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2017-08-29 16:51:09 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2017-08-29 16:51:09 +0200
commitea11fdc81ed7a8df14868476c04bf2fe7c7b6393 (patch)
treeb71364022fb3d670fb011916c9395781a5082306 /instance-calculator/src
parent9a5e79dfd1c6829b052ab7cf0cb7a79afd25eb72 (diff)
Most of the program's logic seems to be there...
Diffstat (limited to 'instance-calculator/src')
-rw-r--r--instance-calculator/src/Main.java104
-rw-r--r--instance-calculator/src/ModelFile.java8
-rw-r--r--instance-calculator/src/Parameters.java6
-rw-r--r--instance-calculator/src/VHDLArchitecture.java5
-rw-r--r--instance-calculator/src/VHDLComponent.java5
-rw-r--r--instance-calculator/src/VHDLEntity.java19
6 files changed, 105 insertions, 42 deletions
diff --git a/instance-calculator/src/Main.java b/instance-calculator/src/Main.java
index 3835c16..b521324 100644
--- a/instance-calculator/src/Main.java
+++ b/instance-calculator/src/Main.java
@@ -35,45 +35,79 @@ public class Main
return;
}
+
+ create_instances();
}
private static void create_instances ()
{
- /*
- * FuturCandidates <- All Architecture.
- * Candidates <- emptyset
- * Set ProcessedCandidates <- emptyset.
- *
- * while (!isEmpty(FuturCandidates))
- * {
- * is_stuck = True;
- * Candidates.addAll(FuturCandidates);
- * FuturCandidates.setLength(0);
- *
- * while (!isEmpty(candidates))
- * {
- * a = Candidates.pop();
- *
- * if (a.has_components_not_in(ProcessedCandidates))
- * {
- * FuturCandidates.push(a);
- * }
- * else
- * {
- * is_stuck = False;
- *
- * a.create_instance();
- *
- * ProcessedCandidates.add(a);
- * }
- * }
- *
- * if (is_stuck)
- * {
- * Error.
- * }
- * }
- */
+ final Collection<VHDLEntity> futur_candidates;
+ final Deque<VHDLEntity> candidates;
+ final Collection<VHDLEntity> processed_candidates;
+ boolean is_stuck;
+
+ futur_candidates = new ArrayList<VHDLEntity>();
+ candidates = new ArrayDeque<VHDLEntity>();
+ processed_candidates = new ArrayList<VHDLEntity>();
+
+ futur_candidates.addAll(VHDLEntity.get_all());
+
+ while (!futur_candidates.isEmpty())
+ {
+ is_stuck = true;
+
+ candidates.addAll(futur_candidates);
+ futur_candidates.clear();
+
+ while (!candidates.isEmpty())
+ {
+ final VHDLEntity e;
+ boolean is_ready;
+
+ e = candidates.pop();
+
+ is_ready = true;
+
+ for (final VHDLComponent cmp: e.get_architecture().get_components())
+ {
+ if (!processed_candidates.contains(cmp.get_destination()))
+ {
+ is_ready = false;
+
+ break;
+ }
+ }
+
+ if (is_ready)
+ {
+ is_stuck = false;
+
+ e.generate_instance();
+
+ processed_candidates.add(e);
+ }
+ else
+ {
+ futur_candidates.add(e);
+ }
+ }
+
+ if (is_stuck)
+ {
+ System.err.println("[F] Unable to create all the instances...");
+ System.err.println
+ (
+ "[E] The following entites might form a circular dependency:"
+ );
+
+ for (final VHDLEntity e: futur_candidates)
+ {
+ System.err.println("[E] Entity " + e.get_id());
+ }
+
+ System.exit(-1);
+ }
+ }
}
public static Parameters get_parameters ()
diff --git a/instance-calculator/src/ModelFile.java b/instance-calculator/src/ModelFile.java
index 929c348..b873c3b 100644
--- a/instance-calculator/src/ModelFile.java
+++ b/instance-calculator/src/ModelFile.java
@@ -120,19 +120,19 @@ public class ModelFile
return false;
}
- if (input.equals("entity"))
+ if (input[1].equals("entity"))
{
VHDLEntity.add_element(input[2]);
}
- else if (input.equals("architecture"))
+ else if (input[1].equals("architecture"))
{
VHDLArchitecture.add_element(input[2]);
}
- else if (input.equals("process"))
+ else if (input[1].equals("process"))
{
VHDLProcess.add_element(input[2]);
}
- else if (input.equals("component"))
+ else if (input[1].equals("component"))
{
VHDLComponent.add_element(input[2]);
}
diff --git a/instance-calculator/src/Parameters.java b/instance-calculator/src/Parameters.java
index ce5e2cf..e01f912 100644
--- a/instance-calculator/src/Parameters.java
+++ b/instance-calculator/src/Parameters.java
@@ -22,7 +22,7 @@ public class Parameters
public Parameters (final String... args)
{
- if (args.length != 4)
+ if (args.length != 3)
{
print_usage();
@@ -35,8 +35,8 @@ public class Parameters
else
{
model_file = args[0];
- id_prefix = args[2];
- output_file = args[3];
+ id_prefix = args[1];
+ output_file = args[2];
are_valid = true;
}
}
diff --git a/instance-calculator/src/VHDLArchitecture.java b/instance-calculator/src/VHDLArchitecture.java
index 0a61a24..09576e3 100644
--- a/instance-calculator/src/VHDLArchitecture.java
+++ b/instance-calculator/src/VHDLArchitecture.java
@@ -87,6 +87,11 @@ public class VHDLArchitecture
}
}
+ public Collection<VHDLComponent> get_components ()
+ {
+ return components;
+ }
+
public void add_waveform (final VHDLWaveform wfm)
{
if (!waveforms.contains(wfm))
diff --git a/instance-calculator/src/VHDLComponent.java b/instance-calculator/src/VHDLComponent.java
index b0f8de2..6803a57 100644
--- a/instance-calculator/src/VHDLComponent.java
+++ b/instance-calculator/src/VHDLComponent.java
@@ -56,6 +56,11 @@ public class VHDLComponent
destination = dest;
}
+ public VHDLEntity get_destination ()
+ {
+ return destination;
+ }
+
public void set_architecture (final VHDLArchitecture arch)
{
parent = arch;
diff --git a/instance-calculator/src/VHDLEntity.java b/instance-calculator/src/VHDLEntity.java
index e5ab4eb..7c29e63 100644
--- a/instance-calculator/src/VHDLEntity.java
+++ b/instance-calculator/src/VHDLEntity.java
@@ -9,6 +9,11 @@ public class VHDLEntity
FROM_ID = new HashMap<String, VHDLEntity>();
}
+ public static Collection<VHDLEntity> get_all ()
+ {
+ return FROM_ID.values();
+ }
+
public static void add_element (final String id)
{
if (!FROM_ID.containsKey(id))
@@ -64,6 +69,11 @@ public class VHDLEntity
this.waveform_instances = new ArrayList<VHDLWaveform.Instance>();
}
+ public String get_id ()
+ {
+ return id;
+ }
+
public void add_port (final String pt)
{
if (!ports.contains(pt))
@@ -77,6 +87,11 @@ public class VHDLEntity
architecture = arch;
}
+ public VHDLArchitecture get_architecture ()
+ {
+ return architecture;
+ }
+
public Collection<VHDLProcess.Instance> get_process_instances ()
{
return process_instances;
@@ -86,4 +101,8 @@ public class VHDLEntity
{
return waveform_instances;
}
+
+ public void generate_instance ()
+ {
+ }
}