/** * g_byte_array_sort_with_data: * @array: a #GByteArray * @compare_func: comparison function * @user_data: data to pass to @compare_func * * Like g_byte_array_sort(), but the comparison function takes an extra * user data argument. */ void g_byte_array_sort_with_data (GByteArray *array, GCompareDataFunc compare_func, gpointer user_data) { g_array_sort_with_data ((GArray *)array, compare_func, user_data); }
/** * gwy_inventory_restore_order: * @inventory: An inventory. * * Assures an inventory is sorted. **/ void gwy_inventory_restore_order(GwyInventory *inventory) { guint i; gint *new_order; g_return_if_fail(GWY_IS_INVENTORY(inventory)); g_return_if_fail(!inventory->is_const); g_return_if_fail(inventory->item_type.compare); if (inventory->is_sorted) return; /* Make sure old order is remembered in @idx */ if (inventory->needs_reindex) gwy_inventory_reindex(inventory); g_array_sort_with_data(inventory->ridx, (GCompareDataFunc)gwy_inventory_compare_indices, inventory); new_order = g_newa(gint, inventory->items->len); /* Fill new_order with indices: new_order[new_position] = old_position */ for (i = 0; i < inventory->ridx->len; i++) new_order[i] = g_array_index(inventory->idx, guint, g_array_index(inventory->ridx, guint, i)); inventory->needs_reindex = TRUE; inventory->is_sorted = TRUE; g_signal_emit(inventory, gwy_inventory_signals[ITEMS_REORDERED], 0, new_order); }
/** * crank_permutation_init_compare_parray_data: (skip) * @p: (out): A Permutation. * @n: Size of permutation. * @garr: (array length=n): Array of elements. * @gcmp: (scope call): Function to compare elements, to give ordering of elements. * @userdata: (closure): A userdata for data * * Initialize a permutation with ordering of elements in array. This function is * similar to crank_permutation_init_compare_parray(), but it receives * @userdata. */ void crank_permutation_init_compare_parray_data (CrankPermutation *p, const guint n, gpointer *garr, GCompareDataFunc gcmp, gpointer userdata) { struct _CrankPermutationSortData sdata = {garr, sizeof(gpointer),gcmp, userdata}; GArray *arr; guint *data; guint i; g_return_if_fail (p != NULL); arr = g_array_sized_new (FALSE, FALSE, sizeof (gint), n); data = g_new (guint, n); for (i = 0; i < n; i++) g_array_append_val (arr, i); g_array_sort_with_data (arr, crank_permutation_sortpf, &sdata); crank_permutation_init_arr_take (p, n, (guint*)arr->data); g_array_free (arr, FALSE); }
void sort_item_array(){ for ( int i = 1; i < MAX_PHRASE_LENGTH + 1; ++i){ g_array_sort_with_data(g_item_array[i], phrase_array_compare , &i); } }
/** helper funcation to add note to formatted stats_tree */ WS_DLL_PUBLIC void stats_tree_format_node_as_str(const stat_node *node, GString *s, st_format_type format_type, guint indent, const gchar *path, gint maxnamelen, gint sort_column, gboolean sort_descending) { int count; int num_columns= node->st->num_columns; gchar **values= stats_tree_get_values_from_node(node); stat_node *child; sortinfo si; gchar *full_path; char fmt[16]; switch(format_type) { case ST_FORMAT_YAML: if (indent) { g_sprintf(fmt, "%%%ds%%s%%s", indent*4-2); } else { strcpy(fmt, "%s%s%s"); } g_string_append_printf(s, fmt, "", indent?"- ":"", "Description"); g_string_append_printf(s, ": \"%s\"\n", values[0]); for (count = 1; count<num_columns; count++) { if (*values[count]) { g_string_append_printf(s, fmt, "", indent?" ":"", stats_tree_get_column_name(count)); g_string_append_printf(s, ": %s\n", values[count]); } } if (node->children) { g_string_append_printf(s, fmt, "", indent?" ":"", "Items:\n"); } break; case ST_FORMAT_XML: { char *itemname = xml_escape(values[0]); g_string_append_printf(s,"<stat-node name=\"%s\"%s>\n",itemname, node->rng?" isrange=\"true\"":""); g_free(itemname); for (count = 1; count<num_columns; count++) { gchar *colname= g_strdup(stats_tree_get_column_name(count)); g_string_append_printf(s,"<%s>",clean_for_xml_tag(colname)); g_string_append_printf(s,"%s</%s>\n",values[count],colname); g_free(colname); } } break; case ST_FORMAT_CSV: g_string_append_printf(s,"%d,\"%s\",\"%s\"",indent,path,values[0]); for (count = 1; count<num_columns; count++) { g_string_append_printf(s,",%s",values[count]); } g_string_append (s,"\n"); break; case ST_FORMAT_PLAIN: g_sprintf (fmt,"%%%ds%%-%us",indent,maxnamelen-indent); g_string_append_printf(s,fmt,"",values[0]); for (count = 1; count<num_columns; count++) { g_sprintf (fmt," %%-%us",stats_tree_get_column_size(count)+1); g_string_append_printf(s,fmt,values[count]); } g_string_append (s,"\n"); break; } indent++; indent = indent > INDENT_MAX ? INDENT_MAX : indent; full_path= g_strdup_printf ("%s/%s",path,values[0]); for (count = 0; count<num_columns; count++) { g_free(values[count]); } g_free(values); if (node->children) { GArray *Children= g_array_new(FALSE,FALSE,sizeof(child)); for (child = node->children; child; child = child->next ) { g_array_append_val(Children,child); } si.sort_column = sort_column; si.sort_descending = sort_descending; g_array_sort_with_data(Children,stat_node_array_sortcmp,&si); for (count = 0; count<((int)Children->len); count++) { stats_tree_format_node_as_str(g_array_index(Children,stat_node*,count), s, format_type, indent, full_path, maxnamelen, sort_column, sort_descending); } g_array_free(Children,FALSE); } g_free(full_path); if (format_type==ST_FORMAT_XML) { g_string_append(s,"</stat-node>\n"); } }