Search in sources :

Example 11 with Visitor

use of gov.sandia.n2a.language.Visitor in project n2a by frothga.

the class JobC method prepareStaticObjects.

public void prepareStaticObjects(Operator op, final CRenderer context, final String pad) throws Exception {
    Visitor visitor = new Visitor() {

        public boolean visit(Operator op) {
            if (op instanceof Output) {
                Output o = (Output) op;
                if (// column name is generated
                o.operands.length < 3) {
                    String stringName = stringNames.get(op);
                    BackendDataC bed = (BackendDataC) context.part.backendData;
                    if (context.global ? bed.needGlobalPath : bed.needLocalPath) {
                        context.result.append(pad + "path (" + stringName + ");\n");
                        context.result.append(pad + stringName + " += \"." + o.variableName + "\";\n");
                    } else {
                        context.result.append(pad + stringName + " = \"" + o.variableName + "\";\n");
                    }
                } else if (// mode flags are present
                o.operands.length > 3) {
                    if (o.operands[0] instanceof Constant) {
                        // Detect raw flag
                        Operator op3 = o.operands[3];
                        if (op3 instanceof Constant) {
                            if (op3.toString().contains("raw")) {
                                String outputName = outputNames.get(o.operands[0].toString());
                                context.result.append(pad + outputName + "->raw = true;\n");
                            }
                        }
                    }
                }
                // Continue to drill down, because I/O functions can be nested.
                return true;
            }
            if (op instanceof Input) {
                Input i = (Input) op;
                if (i.operands[0] instanceof Constant) {
                    String inputName = inputNames.get(i.operands[0].toString());
                    if (!context.global) {
                        context.result.append(pad + inputName + "->epsilon = " + resolve(context.bed.dt.reference, context, false) + " / 1000;\n");
                    }
                    // Detect time flag
                    String mode = "";
                    if (i.operands.length > 3) {
                        // just assuming it's a constant string
                        mode = i.operands[3].toString();
                    } else if (i.operands[1] instanceof Constant) {
                        Constant c = (Constant) i.operands[1];
                        if (c.value instanceof Text)
                            mode = c.toString();
                    }
                    if (mode.contains("time")) {
                        context.result.append(pad + inputName + "->time = true;\n");
                    }
                }
                return true;
            }
            return true;
        }
    };
    op.visit(visitor);
}
Also used : Operator(gov.sandia.n2a.language.Operator) Input(gov.sandia.n2a.language.function.Input) Visitor(gov.sandia.n2a.language.Visitor) Constant(gov.sandia.n2a.language.Constant) Output(gov.sandia.n2a.language.function.Output) Text(gov.sandia.n2a.language.type.Text)

Aggregations

Operator (gov.sandia.n2a.language.Operator)11 Visitor (gov.sandia.n2a.language.Visitor)11 AccessVariable (gov.sandia.n2a.language.AccessVariable)9 Variable (gov.sandia.n2a.eqset.Variable)7 Output (gov.sandia.n2a.language.function.Output)6 Constant (gov.sandia.n2a.language.Constant)5 Text (gov.sandia.n2a.language.type.Text)5 EquationSet (gov.sandia.n2a.eqset.EquationSet)4 VariableReference (gov.sandia.n2a.eqset.VariableReference)3 Input (gov.sandia.n2a.language.function.Input)3 Symbol (gov.sandia.n2a.backend.xyce.netlist.Symbol)2 EquationEntry (gov.sandia.n2a.eqset.EquationEntry)2 ConnectionBinding (gov.sandia.n2a.eqset.EquationSet.ConnectionBinding)2 BuildMatrix (gov.sandia.n2a.language.BuildMatrix)2 Type (gov.sandia.n2a.language.Type)2 Event (gov.sandia.n2a.language.function.Event)2 ReadMatrix (gov.sandia.n2a.language.function.ReadMatrix)2 Add (gov.sandia.n2a.language.operator.Add)2 Scalar (gov.sandia.n2a.language.type.Scalar)2 ArrayList (java.util.ArrayList)2