Esempio n. 1
0
  /*
   * When generating (no) code for init routine, also generate File*
   * and close() for file.
   */
  private static void genFileReaderInit(
      SIRFileReader fr,
      CType return_type,
      String function_name,
      int selfID,
      List /*String*/ cleanupCode,
      CodegenPrintWriter p) {

    int id = NodeEnumerator.getSIROperatorId(fr);
    String theType = "" + fr.getOutputType();
    // dispatch to special routine for bit type
    if (theType.equals("bit")) {
      p.print("FILE* " + fpName(fr) + ";");
      p.newLine();
      p.newLine();
    }

    startParameterlessFunction(CommonUtils.CTypeToStringA(return_type, true), function_name, p);

    if (theType.equals("bit")) {
      p.print(fpName(fr) + " = fopen(\"" + fr.getFileName() + "\", \"r\");");
      p.newLine();
      p.print("assert (" + fpName(fr) + ");");
      p.newLine();
    } else {
      p.print("__file_descr__" + id + " = FileReader_open(\"" + fr.getFileName() + "\");");
      p.newLine();
      p.print("assert (__file_descr__" + id + ");");
      p.newLine();
    }

    endFunction(p);

    String closeName = ClusterUtils.getWorkName(fr, selfID) + "__close";

    startParameterlessFunction("void", closeName, p);

    if (theType.equals("bit")) {
      p.println("fclose(" + fpName(fr) + ");");
    } else {
      p.println("FileReader_close(__file_descr__" + id + ");");
    }

    endFunction(p);

    cleanupCode.add(closeName + "();\n");
  }