?? gsegyformatwizard.c
字號(hào):
case G_SEGY_HEADER_FIELD_ARRAY_OF_INT16: case G_SEGY_HEADER_FIELD_ARRAY_OF_UINT32: case G_SEGY_HEADER_FIELD_ARRAY_OF_INT32: case G_SEGY_HEADER_FIELD_ARRAY_OF_IEEE_FLOAT: case G_SEGY_HEADER_FIELD_ARRAY_OF_IBM_FLOAT: case G_SEGY_HEADER_FIELD_ARRAY_OF_GAIN_CODE: case G_SEGY_HEADER_FIELD_ARRAY_OF_CHAR: case G_SEGY_HEADER_FIELD_UNASSIGNED: break; } return;}void g_segy_format_wizard_get_labels_for_sorting_field (GSEGYFormatWizard *self, guint16 field_number, GArray *traces_indices, GArray *sorting_content, GStringChunk **chunk, GPtrArray **labels) { GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self); GSEGYSortingField *sort_field; gchar gbuffer[G_ASCII_DTOSTR_BUF_SIZE]; guint i; if (NULL == chunk || NULL == labels) return; *chunk = NULL; *labels = NULL; if (0 == field_number || field_number >= private->sorting_fields_desc->len) return; sort_field = g_ptr_array_index (private->sorting_fields_desc, field_number - 1); guint8 *data; switch (sort_field->field_desc->type) { case G_SEGY_HEADER_FIELD_UINT8: *chunk = g_string_chunk_new (1 << 12); *labels = g_ptr_array_new (); for (i = 0; i < traces_indices->len; i++) { data = &(g_array_index (sorting_content, guint8, g_array_index (traces_indices, guint32, i) * private->sorting_desc_size)); g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%hhu", *(guint8*)&data[sort_field->offset]); g_ptr_array_add (*labels, g_string_chunk_insert_const (*chunk, gbuffer)); } break; case G_SEGY_HEADER_FIELD_INT8: *chunk = g_string_chunk_new (1 << 12); *labels = g_ptr_array_new (); for (i = 0; i < traces_indices->len; i++) { data = &(g_array_index (sorting_content, guint8, g_array_index (traces_indices, guint32, i) * private->sorting_desc_size)); g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%hhd", *(gint8*)&data[sort_field->offset]); g_ptr_array_add (*labels, g_string_chunk_insert_const (*chunk, gbuffer)); } break; case G_SEGY_HEADER_FIELD_UINT16: *chunk = g_string_chunk_new (1 << 12); *labels = g_ptr_array_new (); for (i = 0; i < traces_indices->len; i++) { data = &(g_array_index (sorting_content, guint8, g_array_index (traces_indices, guint32, i) * private->sorting_desc_size)); g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%"G_GINT16_MODIFIER"u", *(guint16*)&data[sort_field->offset]); g_ptr_array_add (*labels, g_string_chunk_insert_const (*chunk, gbuffer)); } break; case G_SEGY_HEADER_FIELD_INT16: *chunk = g_string_chunk_new (1 << 12); *labels = g_ptr_array_new (); for (i = 0; i < traces_indices->len; i++) { data = &(g_array_index (sorting_content, guint8, g_array_index (traces_indices, guint32, i) * private->sorting_desc_size)); g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%"G_GINT16_MODIFIER"d", *(gint16*)&data[sort_field->offset]); g_ptr_array_add (*labels, g_string_chunk_insert_const (*chunk, gbuffer)); } break; case G_SEGY_HEADER_FIELD_UINT32: *chunk = g_string_chunk_new (1 << 12); *labels = g_ptr_array_new (); for (i = 0; i < traces_indices->len; i++) { data = &(g_array_index (sorting_content, guint8, g_array_index (traces_indices, guint32, i) * private->sorting_desc_size)); g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%"G_GINT32_MODIFIER"u", *(guint32*)&data[sort_field->offset]); g_ptr_array_add (*labels, g_string_chunk_insert_const (*chunk, gbuffer)); } break; case G_SEGY_HEADER_FIELD_INT32: *chunk = g_string_chunk_new (1 << 12); *labels = g_ptr_array_new (); for (i = 0; i < traces_indices->len; i++) { data = &(g_array_index (sorting_content, guint8, g_array_index (traces_indices, guint32, i) * private->sorting_desc_size)); g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%"G_GINT32_MODIFIER"d", *(guint32*)&data[sort_field->offset]); g_ptr_array_add (*labels, g_string_chunk_insert_const (*chunk, gbuffer)); } break; case G_SEGY_HEADER_FIELD_IEEE_FLOAT: *chunk = g_string_chunk_new (1 << 12); *labels = g_ptr_array_new (); for (i = 0; i < traces_indices->len; i++) { data = &(g_array_index (sorting_content, guint8, g_array_index (traces_indices, guint32, i) * private->sorting_desc_size)); g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%f", *(gfloat*)&data[sort_field->offset]); g_ptr_array_add (*labels, g_string_chunk_insert_const (*chunk, gbuffer)); } break; case G_SEGY_HEADER_FIELD_IBM_FLOAT: case G_SEGY_HEADER_FIELD_GAIN_CODE: case G_SEGY_HEADER_FIELD_ARRAY_OF_UINT8: case G_SEGY_HEADER_FIELD_ARRAY_OF_INT8: case G_SEGY_HEADER_FIELD_ARRAY_OF_UINT16: case G_SEGY_HEADER_FIELD_ARRAY_OF_INT16: case G_SEGY_HEADER_FIELD_ARRAY_OF_UINT32: case G_SEGY_HEADER_FIELD_ARRAY_OF_INT32: case G_SEGY_HEADER_FIELD_ARRAY_OF_IEEE_FLOAT: case G_SEGY_HEADER_FIELD_ARRAY_OF_IBM_FLOAT: case G_SEGY_HEADER_FIELD_ARRAY_OF_GAIN_CODE: case G_SEGY_HEADER_FIELD_ARRAY_OF_CHAR: case G_SEGY_HEADER_FIELD_UNASSIGNED: break; } return;}void g_segy_format_wizard_decode_trace (GSEGYFormatWizard *self, guint8 sample_id, guint32 samples_num, guint8 *input_trace_buffer, gfloat *output_trace_buffer) { GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self); guint32 i; if (NULL == input_trace_buffer || NULL == output_trace_buffer) return; switch (sample_id) { case (G_SEGY_HEADER_FIELD_UINT8): for (i = 0; i < samples_num; i++) output_trace_buffer[i] = (gfloat)input_trace_buffer[i]; return; case (G_SEGY_HEADER_FIELD_INT8): for (i = 0; i < samples_num; i++) output_trace_buffer[i] = (gfloat)(gint8)input_trace_buffer[i]; return; case (G_SEGY_HEADER_FIELD_UINT16): g_segy_endianess_swap_guint16_array (private->endianess, (guint16*)input_trace_buffer, (guint16*)input_trace_buffer, samples_num); for (i = 0; i < samples_num; i++) output_trace_buffer[i] = (gfloat)((guint16*)input_trace_buffer)[i]; return; case (G_SEGY_HEADER_FIELD_INT16): g_segy_endianess_swap_gint16_array (private->endianess, (gint16*)input_trace_buffer, (gint16*)input_trace_buffer, samples_num); for (i = 0; i < samples_num; i++) output_trace_buffer[i] = (gfloat)((gint16*)input_trace_buffer)[i]; return; case (G_SEGY_HEADER_FIELD_UINT32): g_segy_endianess_swap_guint32_array (private->endianess, (guint32*)input_trace_buffer, (guint32*)input_trace_buffer, samples_num); for (i = 0; i < samples_num; i++) output_trace_buffer[i] = (gfloat)((guint32*)input_trace_buffer)[i]; return; case (G_SEGY_HEADER_FIELD_INT32): g_segy_endianess_swap_gint32_array (private->endianess, (gint32*)input_trace_buffer, (gint32*)input_trace_buffer, samples_num); for (i = 0; i < samples_num; i++) output_trace_buffer[i] = (gfloat)((gint32*)input_trace_buffer)[i]; return; case (G_SEGY_HEADER_FIELD_IEEE_FLOAT): g_segy_endianess_swap_ieee_float_array (private->endianess, (guint32*)input_trace_buffer, (guint32*)output_trace_buffer, samples_num); return; case (G_SEGY_HEADER_FIELD_IBM_FLOAT): g_segy_endianess_ibm_to_ieee_array (private->endianess, (guint32*)input_trace_buffer, (guint32*)output_trace_buffer, samples_num); return; case (G_SEGY_HEADER_FIELD_GAIN_CODE): g_segy_endianess_gain_code_to_float_array (private->endianess, (guint32*)input_trace_buffer, (guint32*)output_trace_buffer, samples_num); return; } return;}static void g_segy_format_wizard_init (GSEGYFormatWizard *self) { GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self); private->endianess = NULL; private->format_name = NULL; private->short_format_name = NULL; private->files_name = NULL; private->files_extensions = g_ptr_array_new (); private->binary_header_desc = g_ptr_array_new (); private->trace_header_desc = g_ptr_array_new (); private->bin_fields_desc = g_ptr_array_new (); private->fields_desc = g_ptr_array_new (); private->fields_names = g_ptr_array_new (); private->sorting_fields_names = g_ptr_array_new (); private->sorting_fields_desc = g_ptr_array_new (); private->free_ptr_arrays = TRUE;#ifdef DEBUG g_print ("<GSEGYFormatWizard is inited>\n");#endif}static void g_segy_format_wizard_finalize (GObject *object) { GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (G_SEGY_FORMAT_WIZARD (object)); guint i; if (private->format_name) g_free ((gchar*)private->format_name); if (private->short_format_name) g_free ((gchar*)private->short_format_name); if (private->files_name) g_free ((gchar*)private->files_name); for (i = 0; i < private->files_extensions->len; i++) g_free (g_ptr_array_index (private->files_extensions, i)); g_ptr_array_free (private->files_extensions, TRUE); for (i = 0; i < private->sorting_fields_desc->len - 1; i++) g_free (g_ptr_array_index (private->sorting_fields_desc, i));/* To be implemented when we have cusomizeable file formats *//* if (private->free_ptr_arrays) { }*/ g_ptr_array_free (private->binary_header_desc, TRUE); g_ptr_array_free (private->trace_header_desc, TRUE); g_ptr_array_free (private->bin_fields_desc, TRUE); g_ptr_array_free (private->fields_desc, TRUE); g_ptr_array_free (private->fields_names, TRUE); g_ptr_array_free (private->sorting_fields_names, TRUE); g_ptr_array_free (private->sorting_fields_desc, TRUE); if (private->endianess) g_object_unref (G_OBJECT (private->endianess));#ifdef DEBUG g_print ("<GSEGYFormatWizard is finalized>\n");#endif if (G_OBJECT_CLASS (g_segy_format_wizard_parent_class)->finalize) G_OBJECT_CLASS (g_segy_format_wizard_parent_class)->finalize (object);}enum { PROP_0, PROP_ENDIANESS};static void g_segy_format_wizard_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (G_SEGY_FORMAT_WIZARD (object)); switch (prop_id) { case PROP_ENDIANESS: { GSEGYEndianess *endianess = G_SEGY_ENDIANESS (g_value_get_object (value)); private->endianess = endianess; g_object_ref (G_OBJECT (private->endianess)); g_segy_format_wizard_setup (G_SEGY_FORMAT_WIZARD (object)); g_object_notify (object, "endianess"); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; }}static void g_segy_format_wizard_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (G_SEGY_FORMAT_WIZARD (object)); switch (prop_id) { case PROP_ENDIANESS: g_value_set_object (value, private->endianess); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; }}static void g_segy_format_wizard_class_init (GSEGYFormatWizardClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); gobject_class->finalize = (GObjectFinalizeFunc) g_segy_format_wizard_finalize; gobject_class->set_property = g_segy_format_wizard_set_property; gobject_class->get_property = g_segy_format_wizard_get_property; g_type_class_add_private (klass, sizeof (GSEGYFormatWizardPrivate)); g_object_class_install_property (gobject_class, PROP_ENDIANESS, g_param_spec_object ("endianess", "Endianess", "Object responsible for byte swapping", G_SEGY_TYPE_ENDIANESS, G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));#ifdef DEBUG g_print ("<GSEGYFormatWizard class is inited>\n");#endif}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -