Class AbstractFixedPointSolver<T extends IVariable<T>>

    • Field Detail

      • verbose

        public static final boolean verbose
      • DEFAULT_VERBOSE_INTERVAL

        public static final int DEFAULT_VERBOSE_INTERVAL
        See Also:
        Constant Field Values
      • DEFAULT_PERIODIC_MAINTENANCE_INTERVAL

        public static final int DEFAULT_PERIODIC_MAINTENANCE_INTERVAL
        See Also:
        Constant Field Values
      • workList

        protected Worklist workList
        worklist for the iterative solver
    • Constructor Detail

      • AbstractFixedPointSolver

        public AbstractFixedPointSolver()
    • Method Detail

      • makeStmtRHS

        protected abstract T[] makeStmtRHS​(int size)
      • initForFirstSolve

        public void initForFirstSolve()
        Some setup which occurs only before the first solve
      • emptyWorkList

        public boolean emptyWorkList()
        Returns:
        true iff work list is empty
      • lineBreak

        public static java.lang.String lineBreak​(java.lang.String string,
                                                 int wrap)
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • getStatements

        public java.util.Iterator<? extends INodeWithNumber> getStatements()
      • addToWorkList

        public void addToWorkList​(AbstractStatement s)
        Add a step to the work list.
        Parameters:
        s - the step to add
      • addAllStatementsToWorkList

        public void addAllStatementsToWorkList()
        Add all to the work list.
      • changedVariable

        public void changedVariable​(T v)
        Call this method when the contents of a variable changes. This routine adds all graph using this variable to the set of new graph.
        Parameters:
        v - the variable that has changed
      • newStatement

        public boolean newStatement​(T lhs,
                                    NullaryOperator<T> operator,
                                    boolean toWorkList,
                                    boolean eager)
        Add a step with zero operands on the right-hand side. TODO: this is a little odd, in that this equation will never fire unless explicitly added to a work list. I think in most cases we shouldn't be creating this nullary form.
        Parameters:
        lhs - the variable set by this equation
        operator - the step operator
        Throws:
        java.lang.IllegalArgumentException - if lhs is null
      • newStatement

        public boolean newStatement​(T lhs,
                                    UnaryOperator<T> operator,
                                    T rhs,
                                    boolean toWorkList,
                                    boolean eager)
        Add a step with one operand on the right-hand side.
        Parameters:
        lhs - the lattice variable set by this equation
        operator - the step's operator
        rhs - first operand on the rhs
        Returns:
        true iff the system changes
        Throws:
        java.lang.IllegalArgumentException - if operator is null
      • newStatement

        public boolean newStatement​(T lhs,
                                    AbstractOperator<T> operator,
                                    T op1,
                                    T op2,
                                    boolean toWorkList,
                                    boolean eager)
        Add an equation with two operands on the right-hand side.
        Parameters:
        lhs - the lattice variable set by this equation
        operator - the equation operator
        op1 - first operand on the rhs
        op2 - second operand on the rhs
      • newStatement

        public boolean newStatement​(T lhs,
                                    AbstractOperator<T> operator,
                                    T op1,
                                    T op2,
                                    T op3,
                                    boolean toWorkList,
                                    boolean eager)
        Add a step with three operands on the right-hand side.
        Parameters:
        lhs - the lattice variable set by this equation
        operator - the equation operator
        op1 - first operand on the rhs
        op2 - second operand on the rhs
        op3 - third operand on the rhs
        Throws:
        java.lang.IllegalArgumentException - if lhs is null
      • newStatement

        public boolean newStatement​(T lhs,
                                    AbstractOperator<T> operator,
                                    T[] rhs,
                                    boolean toWorkList,
                                    boolean eager)
        Add a step to the system with an arbitrary number of operands on the right-hand side.
        Parameters:
        lhs - lattice variable set by this equation
        operator - the operator
        rhs - the operands on the rhs
      • initializeVariables

        protected abstract void initializeVariables()
        Initialize all lattice vars in the system.
      • initializeWorkList

        protected abstract void initializeWorkList()
        Initialize the work list for iteration.j
      • orderStatements

        public void orderStatements()
      • isChanged

        public static boolean isChanged​(byte code)
      • isSideEffect

        public static boolean isSideEffect​(byte code)
      • isFixed

        public static boolean isFixed​(byte code)
      • getMinSizeForTopSort

        public int getMinSizeForTopSort()
      • setMinEquationsForTopSort

        public void setMinEquationsForTopSort​(int i)
      • getMaxEvalBetweenTopo

        public int getMaxEvalBetweenTopo()
      • getTopologicalGrowthFactor

        public double getTopologicalGrowthFactor()
      • setMaxEvalBetweenTopo

        public void setMaxEvalBetweenTopo​(int i)
      • setTopologicalGrowthFactor

        public void setTopologicalGrowthFactor​(double d)
      • getNumberOfEvaluations

        public int getNumberOfEvaluations()
      • incNumberOfEvaluations

        public void incNumberOfEvaluations()
      • periodicMaintenance

        protected void periodicMaintenance()
        a method that will be called every N evaluations. subclasses should override as desired.
      • getVerboseInterval

        protected int getVerboseInterval()
        subclasses should override as desired.
      • getPeriodicMaintainInterval

        protected int getPeriodicMaintainInterval()
        subclasses should override as desired.