Пример #1
0
/**
 * 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);
}
Пример #2
0
/**
 * 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);
}
Пример #3
0
/**
 * 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);
}
Пример #4
0
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);
    }
}
Пример #5
0
/** 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");
	}
}