Commit 6f95caa5 authored by Matthew Dawson's avatar Matthew Dawson
Browse files

Kill Table's split input/output variables, since VariableCollection handles both.

Since VariableCollection now handles both input and output variables, move
Table to have both stored under that as well.  This involves killing the
split input/output variables functions.  Generator relying on how that split
worked are reworked to handle this reality.
parent 7166a03a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -59,7 +59,7 @@ final public class EventBTableGenerator {

            //Step 2: Generate the Variables & Invariants Xml
            EventBVariablesDeclarationGenerator eventBVariablesDeclarationGenerator = new EventBVariablesDeclarationGenerator();
            output += eventBVariablesDeclarationGenerator.GenerateVariablesDeclaration(m_table.getInputVariables());
            output += eventBVariablesDeclarationGenerator.GenerateVariablesDeclaration(m_table.getVariables());

            //Step 3: Generate the Events Xml
            HierarchicalGridEventBGenerator hierarchicalGridEventBGenerator;
+2 −2
Original line number Diff line number Diff line
@@ -86,7 +86,7 @@ final public class EventBVariablesDeclarationGenerator implements VariablesDecla
        String ret = "";
        int  invariantsNum = 1;
        final String invariantXmlPost = "\"/>\n";
        Map<String, Variable> vars = variableCollection.getInputVariables();
        Map<String, Variable> vars = variableCollection.getAllVariables();

        //generate all the Invariants one by one.
        for (Variable var : vars.values()) {
@@ -130,7 +130,7 @@ final public class EventBVariablesDeclarationGenerator implements VariablesDecla

    private String generateInitEventActionsXml(VariableCollection variableCollection) {
        String ret = "";
        Map<String, Variable> vars = variableCollection.getInputVariables();
        Map<String, Variable> vars = variableCollection.getAllVariables();

        //generate all the Initialisation actions one by one.
        int actionNo = 0;
+7 −7
Original line number Diff line number Diff line
@@ -45,10 +45,10 @@ final public class HierarchicalGridEventBGenerator implements HierarchicalGridDe
    public HierarchicalGridEventBGenerator(RefinementMode refineMode, int refineLayerNo, Table table) {
        m_refineMode = refineMode;
        m_refineLayerNo = refineLayerNo;
        m_variableDefinitions = table.getInputVariables();
        m_variableDefinitions = table.getVariables();
        m_outputVariable = m_variableDefinitions.getOutputVariables().values().iterator().next();
        m_tableName = table.getTableName();
        m_outputGrid = table.getVariableOutputs().get(0);
        m_outputVariables = table.getOutputVariables();
        m_outputGrid = table.getVariableOutputs().get(m_outputVariable);
    }

    private String generateEventGuardXml(int guardNo, String guard) {
@@ -67,10 +67,10 @@ final public class HierarchicalGridEventBGenerator implements HierarchicalGridDe

        if (m_collectedOutputValues.size() == 1) { // leaf action
            outputValue = m_collectedOutputValues.get(0);
            outputVariable = m_outputVariables.get(actionNo).name();
            outputVariable = m_outputVariable.name();
            ret += generateOneEventActionXml(actionNo, outputVariable, outputValue);
        } else {
            String topGridName = m_outputVariables.get(actionNo).name();
            String topGridName = m_outputVariable.name();
            String columnVector = "{";
            columnVector += StringUtils.join(m_collectedOutputValues, ',');
            columnVector += "}";
@@ -190,7 +190,7 @@ final public class HierarchicalGridEventBGenerator implements HierarchicalGridDe

    private void collectEdgeGridValues() {
        String outputValue = m_outputGrid.get(0, m_tableRowNo - 1).contents();
        String convertedValue = convertMatlabToEventB(outputValue, m_outputVariables.get(0).type());
        String convertedValue = convertMatlabToEventB(outputValue, m_outputVariable.type());
        m_collectedOutputValues.add(convertedValue);
    }

@@ -219,9 +219,9 @@ final public class HierarchicalGridEventBGenerator implements HierarchicalGridDe
    String m_tableName = "";
    String m_eventNo = "";//like evt1_3_2
    String m_parentEventNo = "";//like evt1_3
    List<Variable> m_outputVariables;
    TwoDimensionalGrid m_outputGrid;
    VariableCollection m_variableDefinitions;
    final Variable m_outputVariable; // Temporary during refactor, while the single variable support is still in place.
    List<String> m_collectedOutputValues = new ArrayList<String>();
    EventBExpressionGenerator m_eventBExpressionGenerator = new EventBExpressionGenerator();
    Stack<String> m_eventBGuards = new Stack<String>();
+28 −17
Original line number Diff line number Diff line
@@ -31,8 +31,9 @@ package ca.mcscert.jtet.tablularexpression;
import ca.mcscert.jtet.expression.Variable;
import ca.mcscert.jtet.expression.VariableCollection;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author Matthew Dawson <matthew@mjdsystems.ca>
@@ -40,20 +41,20 @@ import java.util.List;
public class Table {
    public Table(String tableName, VariableCollection variables) {
        this.tableName = tableName;
        this.inputVariables = variables;
        this.m_variables = variables;
    }

    public void verifyTable() throws IllegalTableSetup {
        if (outputVariables.size() != variableOutputs.size()) {
        if (m_variables.getOutputVariables().size() != variableOutputs.size()) {
            throw new IllegalTableSetup("The number of output variables and the number of outputs disagree!");
        }

        int leftCount = leftGrid.countTotalCases();
        int topCount = topGrid.countTotalCases();
        for (int i = 0; i < variableOutputs.size(); ++i) {
            TwoDimensionalGrid output = variableOutputs.get(i);
        for (final Map.Entry<Variable, TwoDimensionalGrid> variableOutput : variableOutputs.entrySet()) {
            TwoDimensionalGrid output = variableOutput.getValue();
            if (output.sizeX() != topCount || output.sizeY() != leftCount) {
                throw new IllegalTableSetup("There are a different number of outputs then conditions for variable " + outputVariables.get(i) + "!");
                throw new IllegalTableSetup("There are a different number of outputs then conditions for variable " + variableOutput.getKey().name() + "!");
            }
        }
    }
@@ -62,10 +63,6 @@ public class Table {
        return tableName;
    }

    public VariableCollection getInputVariables() {
        return inputVariables;
    }

    public HierarchicalGrid getLeftGrid() {
        return leftGrid;
    }
@@ -74,19 +71,33 @@ public class Table {
        return topGrid;
    }

    public List<TwoDimensionalGrid> getVariableOutputs() {
    public Map<Variable, TwoDimensionalGrid> getVariableOutputs() {
        return variableOutputs;
    }

    public List<Variable> getOutputVariables() {
        return outputVariables;
    public VariableCollection getVariables() {
        return m_variables;
    }

    private static void HandleGrid(SubHierarchyFetcher grid, HierarchicalGridDepthFirstCheckerGenerator generator) {
        List<HierarchicalCell> cells = grid.getSubHierarchy();
        for (int i = 0; i < cells.size(); ++i) {
            HierarchicalCell cell = cells.get(i);

            if (cell.getSubHierarchy().isEmpty()) {
                generator.handleLeafCell(cell);
            } else {
                generator.handleEdgeCell(cell);
                generator.descendIntoGridFromCell(cell);
                HandleGrid(cell, generator);
                generator.ascendFromGrid();
            }
        }
    }

    private String tableName;
    private VariableCollection inputVariables;
    private VariableCollection m_variables;
    private final HierarchicalGrid leftGrid = new HierarchicalGrid();
    private final HierarchicalGrid topGrid = new HierarchicalGrid();
    private final List<TwoDimensionalGrid> variableOutputs = new ArrayList<TwoDimensionalGrid>();
    private final List<Variable> outputVariables = new ArrayList<Variable>();

    private final Map<Variable, TwoDimensionalGrid> variableOutputs = new HashMap<Variable, TwoDimensionalGrid>();
}
+21 −24
Original line number Diff line number Diff line
@@ -102,26 +102,25 @@ public class ParameterizedEventBTableGeneratorTest {
    }

    public static Table makeOneLayerTable() {
        Table table = initialize("oneLayerTable", "x,output");
        Variable outputVar = new Variable("output", new RealVariableType());
        Table table = initialize("oneLayerTable", "x", outputVar);
        HierarchicalGrid leftGrid = table.getLeftGrid();

        List<HierarchicalCell> cells = leftGrid.getSubHierarchy();
        cells.add(new HierarchicalCell("x >= 0"));
        cells.add(new HierarchicalCell("x < 0"));

        List<Variable> outputVariables = table.getOutputVariables();
        outputVariables.add(new Variable("output", new RealVariableType()));

        TwoDimensionalGrid outputGrid = new TwoDimensionalGrid(1, 2);
        outputGrid.get(0,0).setContents("1");
        outputGrid.get(0,1).setContents("2");
        table.getVariableOutputs().add(outputGrid);
        table.getVariableOutputs().put(outputVar, outputGrid);

        return table;
    }

    public static Table makeTwoLayerTable() {
        Table table = initialize("twoLayerTable", "x,z,output");
        Variable outputVar = new Variable("output", new RealVariableType());
        Table table = initialize("twoLayerTable", "x,z", outputVar);
        HierarchicalGrid leftGrid = table.getLeftGrid();

        List<HierarchicalCell> cells = leftGrid.getSubHierarchy();
@@ -134,22 +133,21 @@ public class ParameterizedEventBTableGeneratorTest {
        nextGrid.add(new HierarchicalCell("z == 0"));
        nextGrid.add(new HierarchicalCell("z < 0"));

        List<Variable> outputVariables = table.getOutputVariables();
        outputVariables.add(new Variable("output", new RealVariableType()));

        TwoDimensionalGrid outputGrid = new TwoDimensionalGrid(1, 5);
        outputGrid.get(0,0).setContents("1");
        outputGrid.get(0,1).setContents("1+1");
        outputGrid.get(0,2).setContents("3");
        outputGrid.get(0,3).setContents("4");
        outputGrid.get(0,4).setContents("5");
        table.getVariableOutputs().add(outputGrid);
        table.getVariableOutputs().put(outputVar, outputGrid);

        return table;
    }

    public static Table makeThreeLayerTable() {
        Table table = initialize("threeLayerTable", "x,y,z,w,output");
        Variable outputVar = new Variable("output", new RealVariableType());
        Table table = initialize("threeLayerTable", "x,y,z,w", outputVar);

        HierarchicalGrid leftGrid = table.getLeftGrid();

        List<HierarchicalCell> cells = leftGrid.getSubHierarchy();
@@ -169,9 +167,6 @@ public class ParameterizedEventBTableGeneratorTest {
        nextGrid.add(new HierarchicalCell("w == 1"));
        nextGrid.add(new HierarchicalCell("w < 1"));

        List<Variable> outputVariables = table.getOutputVariables();
        outputVariables.add(new Variable("output", new RealVariableType()));

        TwoDimensionalGrid outputGrid = new TwoDimensionalGrid(1, 8);
        outputGrid.get(0,0).setContents("1");
        outputGrid.get(0,1).setContents("2");
@@ -181,13 +176,17 @@ public class ParameterizedEventBTableGeneratorTest {
        outputGrid.get(0,5).setContents("6");
        outputGrid.get(0,6).setContents("7");
        outputGrid.get(0,7).setContents("8");
        table.getVariableOutputs().add(outputGrid);
        table.getVariableOutputs().put(outputVar, outputGrid);

        return table;
    }

    public static Table makeIIPTable() {
        Table table = initialize("IIP", "cPwrStatus,cPwrConfirm");
        //C_pwrConfirm is treated as enumerate here. It can choose values from
        //False:0 True:1
        Variable outputVar = new Variable("cPwrConfirm", new RealVariableType());

        Table table = initialize("IIP", "cPwrStatus", outputVar);
        HierarchicalGrid leftGrid = table.getLeftGrid();

        //C_pwrStatus is treated as enumerate here. It can choose values from
@@ -196,21 +195,19 @@ public class ParameterizedEventBTableGeneratorTest {
        cells.add(new HierarchicalCell("cPwrStatus == 4"));
        cells.add(new HierarchicalCell("cPwrStatus ~= 4"));

        //C_pwrConfirm is treated as enumerate here. It can choose values from
        //False:0 True:1
        List<Variable> outputVariables = table.getOutputVariables();
        outputVariables.add(new Variable("cPwrConfirm", new RealVariableType()));

        TwoDimensionalGrid outputGrid = new TwoDimensionalGrid(1, 2);
        outputGrid.get(0,0).setContents("0");
        outputGrid.get(0,1).setContents("1");
        table.getVariableOutputs().add(outputGrid);
        table.getVariableOutputs().put(outputVar, outputGrid);

        return table;
    }

    public static Table initialize(String tableName, String variables) {
        VariableCollection variableCollection = new VariableCollection(m_variableParser.parseVariables(variables));
    public static Table initialize(String tableName, String inputVariables, Variable outputVariable) {
        Map<String, Variable> outputVariables = new HashMap<String, Variable>(1);
        outputVariables.put(outputVariable.name(), outputVariable);

        VariableCollection variableCollection = new VariableCollection(m_variableParser.parseVariables(inputVariables), new PartialVariableCollection(outputVariables));
        return new Table(tableName, variableCollection);
    }

Loading