package hu.webarticum.jsatbuilder.satbuilder.core;

import java.util.ArrayList;
import java.util.List;

import hu.webarticum.jsatbuilder.sat.Solver;

public class ConstraintSetSolverFiller implements SolverFiller {
    
    private List<Constraint> constraints = new ArrayList<Constraint>();
    
    public void add(Constraint constraint) {
        constraints.add(constraint);
    }

    @Override
    public void fillSolver(Solver solver) {
        
        // TODO
        
    }
    
}

@@ -94,56 +94,349 @@
 til.
-List;%0A%0Aimport hu.webarticum.jsatbuilder.sat.Solv
+HashSet;%0Aimport java.util.List;%0Aimport java.util.Set;%0A%0Aimport hu.webarticum.jsatbuilder.sat.Solver;%0Aimport hu.webarticum.jsatbuilder.satbuilder.core.Constraint;%0Aimport hu.webarticum.jsatbuilder.satbuilder.core.Definition;%0Aimport hu.webarticum.jsatbuilder.satbuilder.core.Dependant;%0Aimport hu.webarticum.jsatbuilder.satbuilder.core.SolverFill
 er;%0A
@@ -514,16 +514,8 @@
     
-private 
 List
@@ -663,16 +663,20 @@
 ;%0A    %7D%0A
+    
 %0A    @Ov
@@ -738,43 +738,1297 @@
     
-%0A        // TODO%0A        
+Set%3CDependant%3E handledDependants = new HashSet%3CDependant%3E();%0A        Set%3CDependant%3E unhandledDependants = new HashSet%3CDependant%3E();%0A        %0A        for (Constraint constraint: constraints) %7B%0A            if (!constraint.isRemoved()) %7B%0A                unhandledDependants.add(constraint);%0A            %7D%0A        %7D%0A        %0A        while (!unhandledDependants.isEmpty()) %7B%0A            Set%3CDependant%3E newDependants = new HashSet%3CDependant%3E();%0A            %0A            for (Dependant dependant: unhandledDependants) %7B%0A                for (Definition definition: dependant.getDependencies()) %7B%0A                    if (%0A                        definition instanceof Dependant &&%0A                        !handledDependants.contains(definition) &&%0A                        !unhandledDependants.contains(definition)%0A                    ) %7B%0A                        newDependants.add(dependant);%0A                    %7D%0A                %7D%0A            %7D%0A            %0A            handledDependants.addAll(unhandledDependants);%0A            %0A            unhandledDependants = newDependants;%0A        %7D%0A        %0A        for (Dependant dependant: handledDependants) %7B%0A            if (dependant instanceof SolverFiller) %7B%0A                ((SolverFiller)dependant).fillSolver(solver);%0A            %7D%0A        %7D
 %0A    %7D%0A
-    
 %0A%7D%0A

Implement ConstraintSetSolverFiller