| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'instance-calculator/src/Main.java')
| -rw-r--r-- | instance-calculator/src/Main.java | 104 | 
1 files changed, 69 insertions, 35 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 () | 


