Changeset 14236


Ignore:
Timestamp:
Nov 29, 2019 4:36:18 PM (12 days ago)
Author:
Jonathan Kämpe
Message:

#1753 Refactoring

Location:
branches/dev-jk-2733/Compiler/ModelicaCBackEnd/src/jastadd/CCodeGen
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/dev-jk-2733/Compiler/ModelicaCBackEnd/src/jastadd/CCodeGen/CCodeGenBlocks.jrag

    r13168 r14236  
    2727    public CodePrinter AbstractEquationBlock.blockPrinter() {
    2828        return new CPrettyPrinter(this);
     29    }
     30
     31    public void FClass.generateEquationBlocks_C(CodePrinter p, CodeStream str, String indent, String functionName) {
     32        Collection<AbstractEquationBlock> blocks;
     33        if (p.inInitialSystem()) {
     34            blocks = myOptions().getBooleanOption("generate_ode") ?
     35                getDAEInitBLT().getAllBlocks() : Collections.<AbstractEquationBlock>emptySet();
     36        } else {
     37            blocks = !onlyInitBLT() && myOptions().getBooleanOption("generate_ode") ?
     38                getDAEStructuredBLT().getAllBlocks() : Collections.<AbstractEquationBlock>emptySet();
     39        }
     40        generateEquationBlocks_C(p, str, indent, functionName, blocks);
     41    }
     42   
     43    public void FClass.generateEquationBlocks_C(CodePrinter p, CodeStream str, String indent, String functionName,
     44            Collection<AbstractEquationBlock> blocks) {
     45        final String next = p.indent(indent);
     46       
     47        CodeSplitter<AbstractEquationBlock> cs = new CodeSplitter<AbstractEquationBlock>(p, str, next, true, functionName, myOptions()) {
     48            @Override
     49            public void genDecl(AbstractEquationBlock element) {
     50                element.genVarDecls(p, str, indent);
     51            }
     52            @Override
     53            public void genPre(AbstractEquationBlock element) {
     54                element.genReinitTempInits_C(p, str, indent);
     55            }
     56            @Override
     57            public void gen(AbstractEquationBlock element) {
     58                element.genSolvedInBLT(p, str, indent);
     59            }
     60            @Override
     61            public void genPost(AbstractEquationBlock element) {
     62                //element.genReinitWritebacks_C(p, indent, str);
     63            }
     64        };
     65       
     66        cs.add(blocks);
     67       
     68        cs.genFuncImpls();
     69       
     70        cs.genFuncHeads();
     71       
     72        str.print("int " + functionName + "_base(jmi_t* jmi) {\n");
     73        cs.printStatusDecl();
     74        if (!p.inInitialSystem() && onlyInitBLT()) {
     75            str.print(next + "ef = model_ode_initialize(jmi);\n");
     76        } else {
     77            cs.genFuncCalls();
     78        }
     79        cs.printStatusReturn();
     80        str.print("}\n");
    2981    }
    3082
  • branches/dev-jk-2733/Compiler/ModelicaCBackEnd/src/jastadd/CCodeGen/CGenerator.jrag

    r14004 r14236  
    707707            CodePrinter p = ASTNode.printer_C;
    708708            String indent = "";
    709             String next = p.indent(indent);
    710            
    711             CodeSplitter<AbstractEquationBlock> cs = new CodeSplitter<AbstractEquationBlock>(p, str, next, true,
    712                     "model_ode_derivatives", fclass.myOptions()) {
    713                 @Override
    714                 public void genDecl(AbstractEquationBlock element) {
    715                     element.genVarDecls(p, str, indent);
    716                 }
    717                 @Override
    718                 public void genPre(AbstractEquationBlock element) {
    719                     element.genReinitTempInits_C(p, str, indent);
    720                 }
    721                 @Override
    722                 public void gen(AbstractEquationBlock element) {
    723                     element.genSolvedInBLT(p, str, indent);
    724                 }
    725                 @Override
    726                 public void genPost(AbstractEquationBlock element) {
    727                     //element.genReinitWritebacks_C(p, indent, str);
    728                 }
    729             };
    730            
    731             if (!fclass.onlyInitBLT() && fclass.myOptions().getBooleanOption("generate_ode")) {
    732                 cs.add(fclass.getDAEStructuredBLT().getAllBlocks());
    733             }
    734            
    735             cs.genFuncImpls();
    736            
    737             cs.genFuncHeads();
    738            
    739             str.print("int model_ode_derivatives_base(jmi_t* jmi) {\n");
    740             cs.printStatusDecl();
    741             if (fclass.onlyInitBLT()) {
    742                 str.print(next + "ef = model_ode_initialize(jmi);\n");
    743             } else {
    744                 cs.genFuncCalls();
    745             }
    746             cs.printStatusReturn();
    747             str.print("}\n");
     709            fclass.generateEquationBlocks_C(p, str, indent, "model_ode_derivatives");
    748710        }
    749711    }
     
    762724
    763725        public void generate(CodeStream str) {
    764            
    765726            CodePrinter p = ASTNode.printer_C.initialSystemPrinter();
    766727            String indent = "";
    767             String next = p.indent(indent);
    768            
    769             CodeSplitter<AbstractEquationBlock> cs = new CodeSplitter<AbstractEquationBlock>(p, str, next, true,
    770                     "model_ode_initialize", fclass.myOptions()) {
    771                 @Override
    772                 public void genDecl(AbstractEquationBlock element) {
    773                     element.genVarDecls(p, str, indent);
    774                 }
    775                 @Override
    776                 public void genPre(AbstractEquationBlock element) {
    777                     element.genReinitTempInits_C(p, str, indent);
    778                 }
    779                 @Override
    780                 public void gen(AbstractEquationBlock element) {
    781                     element.genSolvedInBLT(p, str, indent);
    782                 }
    783                 @Override
    784                 public void genPost(AbstractEquationBlock element) {
    785                     //element.genReinitWritebacks_C(p, indent, str);
    786                 }
    787             };
    788            
    789             if (fclass.myOptions().getBooleanOption("generate_ode")) {
    790                 cs.add(fclass.getDAEInitBLT());
    791             }
    792            
    793             cs.genFuncImpls();
    794            
    795             cs.genFuncHeads();
    796            
    797             str.print("int model_ode_initialize_base(jmi_t* jmi) {\n");
    798             cs.printStatusDecl();
    799             cs.genFuncCalls();
    800             cs.printStatusReturn();
    801             str.print("}\n");
     728            fclass.generateEquationBlocks_C(p, str, indent, "model_ode_initialize");
    802729        }
    803730    }
Note: See TracChangeset for help on using the changeset viewer.