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); } }
/*=== 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; } }
/*=== 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; } }
/*=== 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; } }
/*=== 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; } }