コード例 #1
0
ファイル: code_generator.c プロジェクト: bputigny/mbench
void write_run (run_t run) {
    if (run.timer) {
#ifdef USE_PAPI
	fprintf (outfile, "    mbench_start_hwcounters ();\n");
#endif
	fprintf (outfile, "            tmp.bytes = 0;\n");
	fprintf (outfile, "            tmp.instructions = 0;\n");
	fprintf (outfile, "            #pragma omp barrier\n");
	fprintf (outfile, "            TIMER_START;\n");
	generate_run (run.l);
	fprintf (outfile, "            TIMER_STOP;\n");
#ifdef USE_PAPI
	fprintf (outfile, "    mbench_stop_hwcounters (omp_id, r);\n");
#endif
	fprintf (outfile, "            #pragma omp barrier\n");
    }
    else {
	write_binding (run.binding);
	write_function_call (run.func);
    }
}
コード例 #2
0
ファイル: write_field.c プロジェクト: huilang22/Projects
/*=== write_field_filter =====================================================
 * <Description Text> 
 *
 * Assumes:    ?
 *
 * Returns:    (value) when X
 *             (value) when Y
 *
 * Modifies:   ?
 *
 * Calls:      nothing
 *
 * Called By:  ?
 *
 * History:    MM/DD/YY  MRH  Created initial version based on function
 *                            'func()' in motif/csr/file.c
 */
void
write_field_filter(FILE  *file,
                   FIELD *field,
                   FUNCTION_TYPE function_type)
{
  char function_proto[80];
  char field_name[80];
  char table_name[80];
  char filter_type_string[80];
  int  num_pointer;
  
  if (IsDateStruct(field->field_type) ||
      IsMoney(field->field_type))
    num_pointer = 1;
  else
    num_pointer = 0;
  sprintf(function_proto, FORMAT_FILTER, gAPINameCAP, ((field->has_alias)
                                                       ? field->alias_lc
                                                       : field->name_lc));
  sprintf(filter_type_string, "const %s", type_string[field->field_type]);
  write_prototype(file, function_type,
                  EXPORT_STRING, STATUS_STRING, function_proto,
                  FSC_STRING,                     0, FSC_TYPE,
                  filter_type_string,   num_pointer, INPUT_TYPE,
                  FILTER_OP_STRING,               0, FILTER_OP_TYPE,
                  ERROR_STRING,                   1, ERROR_TYPE,
                  NULL);

  switch (function_type)
  {
  case FUNCTION:
    fprintf(file, "\n{\n");
    /*
     * First, verify that we are getting from the proper object type.
     */
    fprintf(file, "  if (%s->iType != %s_TYPE)\n  {\n",
            FSC_TYPE, gAPIType);
    fprintf(file, "    lpError->error_type = GAL_ERROR_TYPE;\n");
    fprintf(file, "    lpError->error_code = GAL_ARGUMENT_TYPE_ERROR;\n");
    fprintf(file, "    return GAL_FAILURE;\n");
    fprintf(file, "  }\n\n");
    
    /*
     * If we make it this far, allocate and initialize a new filter item.
     */
    fprintf(file, "  if (");
    sprintf(field_name, FIELD_NAME_INDEX,
            gAPIType, gAPIType, ((field->has_alias)
                                 ? field->alias_uc
                                 : field->name_uc));
    sprintf(table_name, TABLE_NAME_INDEX,
            gAPIType, gAPIType, field->table->name_uc);
    if (IsString(field->field_type))
    {
      write_function_call(file, 6, 16, NEW_FILTER_STRING_FUNCTION,
                          FSC_TYPE, field_name, table_name,
                          INPUT_TYPE, FILTER_OP_TYPE,
                          NULL);
    }
    else if (IsDateStruct(field->field_type))
    {
      write_function_call(file, 6, 16, NEW_FILTER_DATE_FUNCTION,
                          FSC_TYPE, field_name, table_name,
                          INPUT_TYPE, FILTER_OP_TYPE,
                          NULL);      
    }
    else if (IsMoney(field->field_type))
    {
      write_function_call(file, 6, 16, NEW_FILTER_NUMERIC_FUNCTION,
                          FSC_TYPE, field_name, table_name,
                          INPUT_TYPE, FILTER_OP_TYPE,
                          NULL);      
    }

    else 
    {
      write_function_call(file, 6, 16, NEW_FILTER_INT_FUNCTION,
                          FSC_TYPE, field_name, table_name,
                          INPUT_TYPE, FILTER_OP_TYPE,
                          NULL);
    }
    fprintf(file, " == GAL_FAILURE)\n");
    fprintf(file, "  {\n");
    fprintf(file, "    lpError->error_type = GAL_ERROR_TYPE;\n");
    fprintf(file, "    lpError->error_code = GAL_ALLOCATION_ERROR;\n");
    fprintf(file, "    return GAL_FAILURE;\n");
    fprintf(file, "  }\n\n");
    
    fprintf(file, "  return GAL_SUCCESS;\n");
    
    fprintf(file, "}\n\n");
    break;

  case PROTOTYPE:
    fprintf(file, ";\n");
    break;

  default:
    break;
  }
}
コード例 #3
0
ファイル: write_field.c プロジェクト: huilang22/Projects
/*=== write_field_sort =======================================================
 * <Description Text> 
 *
 * Assumes:    ?
 *
 * Returns:    (value) when X
 *             (value) when Y
 *
 * Modifies:   ?
 *
 * Calls:      nothing
 *
 * Called By:  ?
 *
 * History:    MM/DD/YY  MRH  Created initial version based on function
 *                            'func()' in motif/csr/file.c
 */
void
write_field_sort(FILE  *file,
                 FIELD *field,
                 FUNCTION_TYPE function_type)
{
  char function_proto[80];
  char field_name[80];
  char field_query_pos[80];
  char table_name[80];
  char sort_string[80];
  
  sprintf(function_proto, FORMAT_SORTBY, gAPINameCAP, ((field->has_alias)
                                                       ? field->alias_lc
                                                       : field->name_lc));
  sprintf(sort_string, "const %s", SORT_ASCENDING_STRING);
  write_prototype(file, function_type,
                  EXPORT_STRING, STATUS_STRING, function_proto,
                  FSC_STRING,            0, FSC_TYPE,
                  sort_string,           0, SORT_ASCENDING_TYPE,
                  ERROR_STRING,          1, ERROR_TYPE,
                  NULL);

  switch (function_type)
  {
  case FUNCTION:
    fprintf(file, "\n{\n");
    /*
     * First, verify that we are getting from the proper object type.
     */
    fprintf(file, "  if (%s->iType != %s_TYPE)\n  {\n",
            FSC_TYPE, gAPIType);
    fprintf(file, "    lpError->error_type = GAL_ERROR_TYPE;\n");
    fprintf(file, "    lpError->error_code = GAL_ARGUMENT_TYPE_ERROR;\n");
    fprintf(file, "    return GAL_FAILURE;\n");
    fprintf(file, "  }\n\n");
    
    /*
     * If we make it this far, allocate and initialize a new sort item.
     */
    fprintf(file, "  if (");
    sprintf(field_name, FIELD_NAME_INDEX,
            gAPIType, gAPIType, ((field->has_alias)
                                 ? field->alias_uc
                                 : field->name_uc));
    sprintf(table_name, TABLE_NAME_INDEX,
            gAPIType, gAPIType, field->table->name_uc);
    sprintf(field_query_pos, FIELD_POS_INDEX,
            gAPIType, ((field->has_alias)
                       ? field->alias_uc
                       : field->name_uc));
    write_function_call(file, 6, 16, NEW_SORT_FUNCTION,
                        FSC_TYPE, field_name, table_name,
                        field_query_pos,SORT_ASCENDING_TYPE,
                        NULL);
    fprintf(file, " == GAL_FAILURE)\n");
    fprintf(file, "  {\n");
    fprintf(file, "    lpError->error_type = GAL_ERROR_TYPE;\n");
    fprintf(file, "    lpError->error_code = GAL_ALLOCATION_ERROR;\n");
    fprintf(file, "    return GAL_FAILURE;\n");
    fprintf(file, "  }\n\n");
    
    fprintf(file, "  return GAL_SUCCESS;\n");
    
    fprintf(file, "}\n\n");
    break;

  case PROTOTYPE:
    fprintf(file, ";\n");
    break;

  default:
    break;
  }
}
コード例 #4
0
ファイル: write_field.c プロジェクト: huilang22/Projects
/*=== write_field_set =======================================================
 * <Description Text> 
 *
 * Assumes:    ?
 *
 * Returns:    (value) when X
 *             (value) when Y
 *
 * Modifies:   ?
 *
 * Calls:      nothing
 *
 * Called By:  ?
 *
 * History:    MM/DD/YY  MRH  Created initial version based on function
 *                            'func()' in motif/csr/file.c
 */
void
write_field_set(FILE  *file,
                FIELD *field,
                FUNCTION_TYPE function_type)
{
  char function_proto[80];
  char field_name[80];
  char field_type_string[80];
  char field_out[80];
  char field_in[80];
  char field_size[80];
  int  num_pointer;
  
  if (IsDateStruct(field->field_type)||
      IsMoney(field->field_type))
    num_pointer = 1;
  else
    num_pointer = 0;
  sprintf(function_proto, FORMAT_SET, gAPINameCAP, ((field->has_alias)
                                                    ? field->alias_lc
                                                    : field->name_lc));
  sprintf(field_type_string, "const %s", type_string[field->field_type]);
  write_prototype(file, function_type,
                  EXPORT_STRING, STATUS_STRING, function_proto,
                  gAPIType,                       0, OBJECT_TYPE,
                  field_type_string,              num_pointer, INPUT_TYPE,
                  ERROR_STRING,                   1, ERROR_TYPE,
                  NULL);

  switch (function_type)
  {
  case FUNCTION:
    fprintf(file, "\n{\n");

    /*
     * First, verify that we are getting from the proper object type.
     */
    fprintf(file, "  if (GAL_OBJECT_TYPE(%s) != %s_TYPE)\n  {\n",
            OBJECT_TYPE, gAPIType);
    fprintf(file, "    lpError->error_type = GAL_ERROR_TYPE;\n");
    fprintf(file, "    lpError->error_code = GAL_ARGUMENT_TYPE_ERROR;\n");
    fprintf(file, "    return GAL_FAILURE;\n");
    fprintf(file, "  }\n\n");
    
    /*
     * If we make it this far, copy, set bits and return.
     */
    if (field->is_key)
      sprintf(field_name, "%s->ObjectKey.%s", OBJECT_TYPE, ((field->has_alias)
                                                            ? field->alias_lc
                                                            : field->name_lc));
    else
      sprintf(field_name, "%s->%s", OBJECT_TYPE, ((field->has_alias)
                                                  ? field->alias_lc
                                                  : field->name_lc));
    if (IsString(field->field_type))
      fprintf(file, "  strncpy(%s, %s, GAL_%s_%s_LEN);\n",
              field_name, INPUT_TYPE, gAPINameUC, ((field->has_alias)
                                                   ? field->alias_uc
                                                   : field->name_uc));
    else if (IsDateStruct(field->field_type) ||
             IsMoney(field->field_type))
    {
      sprintf(field_in,   "(void *)(&(%s))", field_name);
      sprintf(field_out,  "(const void *)%s", INPUT_TYPE);
      sprintf(field_size, "sizeof(%s)", type_string[field->field_type]);
      write_function_call(file, 0, 5, "  memcpy",
                          field_in,
                          field_out,
                          field_size,
                          NULL);
      fprintf(file, ";\n");
    }
    else
      fprintf(file, "  %s = %s;\n", field_name, INPUT_TYPE);
    
    fprintf(file, "  Set(GAL_CONTROL_BITS(%s, %s_%s_FPOS));\n\n",
            OBJECT_TYPE, gAPIType, ((field->has_alias)
                                    ? field->alias_uc
                                    : field->name_uc));
    
    /* MRH -- take care of joins if they are in multiple locations? */

    fprintf(file, "  return GAL_SUCCESS;\n");
    
    fprintf(file, "}\n\n");
    break;

  case PROTOTYPE:
    fprintf(file, ";\n");
    break;

  default:
    break;
  }
}
コード例 #5
0
ファイル: write_field.c プロジェクト: huilang22/Projects
/*=== write_field_get =======================================================
 * <Description Text> 
 *
 * Assumes:    ?
 *
 * Returns:    (value) when X
 *             (value) when Y
 *
 * Modifies:   ?
 *
 * Calls:      nothing
 *
 * Called By:  ?
 *
 * History:    MM/DD/YY  MRH  Created initial version based on function
 *                            'func()' in motif/csr/file.c
 */
void
write_field_get(FILE  *file,
                FIELD *field,
                FUNCTION_TYPE function_type)
{
  char function_proto[80];
  char field_name[80];
  int  num_pointer;
  char field_out[80];
  char field_in[80];
  char field_size[80];
  
  sprintf(function_proto, FORMAT_GET, gAPINameCAP, ((field->has_alias)
                                                    ? field->alias_lc
                                                    : field->name_lc));
  if (IsString(field->field_type))
    num_pointer = 0;
  else
    num_pointer = 1;
#ifndef USE_MACROS
  write_prototype(file, function_type,
                  EXPORT_STRING, STATUS_STRING, function_proto,
                  gAPITypeConst,                  0, OBJECT_TYPE,
                  type_string[field->field_type], num_pointer, OUTPUT_TYPE,
                  ERROR_STRING,                   1, ERROR_TYPE,
                  NULL);
#endif

  switch (function_type)
  {
  case FUNCTION:
#ifndef USE_MACROS
    fprintf(file, "\n{\n");

    /*
     * First, verify that we are getting from the proper object type.
     */
    fprintf(file, "  if (GAL_OBJECT_TYPE(%s) != %s_TYPE)\n  {\n",
            OBJECT_TYPE, gAPIType);
    fprintf(file, "    lpError->error_type = GAL_ERROR_TYPE;\n");
    fprintf(file, "    lpError->error_code = GAL_ARGUMENT_TYPE_ERROR;\n");
    fprintf(file, "    return GAL_FAILURE;\n");
    fprintf(file, "  }\n\n");
    
    /*
     * Now, make sure the field is set.
     */
    fprintf(file, "  if (! IsSet(GAL_CONTROL_BITS(%s, %s_%s_FPOS)))\n  {\n",
            OBJECT_TYPE, gAPIType, ((field->has_alias)
                                    ? field->alias_uc
                                    : field->name_uc));
    fprintf(file, "    lpError->error_type = GAL_ERROR_TYPE;\n");
    fprintf(file, "    lpError->error_code = GAL_FIELD_NOT_SET_ERROR;\n");
    fprintf(file, "    return GAL_FAILURE;\n");
    fprintf(file, "  }\n\n");
    
    /*
     * If we make it this far, copy and return success.
     */
    if (field->is_key)
      sprintf(field_name, "%s->ObjectKey.%s", OBJECT_TYPE, ((field->has_alias)
                                                            ? field->alias_lc
                                                            : field->name_lc));
    else
      sprintf(field_name, "%s->%s", OBJECT_TYPE, ((field->has_alias)
                                                  ? field->alias_lc
                                                  : field->name_lc));
    if (IsString(field->field_type))
      fprintf(file, "  strcpy(%s, %s);\n", OUTPUT_TYPE, field_name);
    else if (IsDateStruct(field->field_type) ||
             IsMoney(field->field_type))
    {
      /* for dates and money, just do a memcpy, since we don't know
         exactly what these are in terms of structure */
      sprintf(field_out,  "(void *)%s", OUTPUT_TYPE);
      sprintf(field_in,   "(const void *)(&(%s))", field_name);
      sprintf(field_size, "sizeof(%s)", type_string[field->field_type]);
      write_function_call(file, 0, 5, "  memcpy",
                          field_out,
                          field_in,
                          field_size,
                          NULL);
      fprintf(file, ";\n");
    }
    else
      fprintf(file, "  *%s = %s;\n", OUTPUT_TYPE, field_name);
    
    fprintf(file, "\n  return GAL_SUCCESS;\n");
    
    fprintf(file, "}\n\n");
#endif
    break;

  case PROTOTYPE:
#ifndef USE_MACROS
    fprintf(file, ";\n");
#else
    fprintf(file, "#define %s(%s, %s, %s) \\\n",
            function_proto,
            OBJECT_TYPE,
            OUTPUT_TYPE,
            ERROR_TYPE);
    fprintf(file, "%s((%s), \\\n",
            GAL_GET_FIELD_FUNCTION,
            OBJECT_TYPE);

    for (i=0; i <= strlen(GAL_GET_FIELD_FUNCTION); i++)
      fputc(' ', file);
    fprintf(file, "%s_TYPE, \\\n", gAPIType);
    
    for (i=0; i <= strlen(GAL_GET_FIELD_FUNCTION); i++)
      fputc(' ', file);
    fprintf(file, "GAL_CONTROL_BITS(%s, %s_%s_FPOS), \\\n",
            OBJECT_TYPE, gAPIType, ((field->has_alias)
                                    ? field->alias_uc
                                    : field->name_uc);

    for (i=0; i <= strlen(GAL_GET_FIELD_FUNCTION); i++)
      fputc(' ', file);
    if (field->is_key)
      fprintf(file, "(void *) (&((%s)->ObjectKey.%s)), \\\n",
              OBJECT_TYPE,
              field->name_lc);
    else
      fprintf(file, "(void *) (&((%s)->%s)), \\\n",
              OBJECT_TYPE, ((field->has_alias)
                            ? field->alias_lc
                            : field->name_lc));

    for (i=0; i <= strlen(GAL_GET_FIELD_FUNCTION); i++)
      fputc(' ', file);
    if (IsString(field->field_type))
      fprintf(file, "GAL_%s_%s_LEN, \\\n", gAPINameUC, ((field->has_alias)
                                                        ? field->alias_uc
                                                        : field->name_uc));
    else
      fprintf(file, "sizeof(%s), \\\n", type_string[field->field_type]);

    for (i=0; i <= strlen(GAL_GET_FIELD_FUNCTION); i++)
      fputc(' ', file);
    fprintf(file, "(void *) (%s), \\\n", OUTPUT_TYPE);
      
    for (i=0; i <= strlen(GAL_GET_FIELD_FUNCTION); i++)
      fputc(' ', file);
    fprintf(file, "(%s))\n", ERROR_TYPE);
#endif
    break;

  default:
    break;
  }
}