mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-03-03 14:42:10 +01:00
Fix new strfuncs back up (again) - No, incrementing pointers in a loop is
Fix new strfuncs back up (again) - No, incrementing pointers in a loop is not any faster than indexing an array in a loop with a good compiler, but it is harder to read. - strconcat doesn't allow a separator - added g_str_array_join, renamed g_str_array_join to g_str_array_joinv - join routines take separator as first argument, as is customary.
This commit is contained in:
parent
634e4a58c6
commit
daf46f9550
8
glib.h
8
glib.h
@ -1377,15 +1377,17 @@ gchar* g_strconcat (const gchar *string1,
|
||||
/* NULL terminated string arrays.
|
||||
* g_str_array_split() splits up string into max_tokens tokens at delim and
|
||||
* returns a newly allocated string array.
|
||||
* g_str_array_join() concatenates all of str_array's strings, sliding in an
|
||||
* g_str_array_joinv() concatenates all of str_array's strings, sliding in an
|
||||
* optional separator, the returned string is newly allocated.
|
||||
* g_str_array_free() frees the array itself and all of its strings.
|
||||
*/
|
||||
gchar** g_str_array_split (const gchar *string,
|
||||
const gchar *delimiter,
|
||||
gint max_tokens);
|
||||
gchar* g_str_array_join (gchar **str_array,
|
||||
const gchar *separator);
|
||||
gchar* g_str_array_joinv (const gchar *separator,
|
||||
const gchar **str_array);
|
||||
gchar* g_str_array_join (const gchar *separator,
|
||||
...);
|
||||
void g_str_array_free (gchar **str_array);
|
||||
|
||||
|
||||
|
@ -1377,15 +1377,17 @@ gchar* g_strconcat (const gchar *string1,
|
||||
/* NULL terminated string arrays.
|
||||
* g_str_array_split() splits up string into max_tokens tokens at delim and
|
||||
* returns a newly allocated string array.
|
||||
* g_str_array_join() concatenates all of str_array's strings, sliding in an
|
||||
* g_str_array_joinv() concatenates all of str_array's strings, sliding in an
|
||||
* optional separator, the returned string is newly allocated.
|
||||
* g_str_array_free() frees the array itself and all of its strings.
|
||||
*/
|
||||
gchar** g_str_array_split (const gchar *string,
|
||||
const gchar *delimiter,
|
||||
gint max_tokens);
|
||||
gchar* g_str_array_join (gchar **str_array,
|
||||
const gchar *separator);
|
||||
gchar* g_str_array_joinv (const gchar *separator,
|
||||
const gchar **str_array);
|
||||
gchar* g_str_array_join (const gchar *separator,
|
||||
...);
|
||||
void g_str_array_free (gchar **str_array);
|
||||
|
||||
|
||||
|
@ -1026,8 +1026,8 @@ g_str_array_split (const gchar *string,
|
||||
gint max_tokens)
|
||||
{
|
||||
GSList *string_list = NULL, *slist;
|
||||
gchar **str_array, **as, *s;
|
||||
guint n = 1;
|
||||
gchar **str_array, *s;
|
||||
guint i, n = 1;
|
||||
|
||||
g_return_val_if_fail (string != NULL, NULL);
|
||||
g_return_val_if_fail (delimiter != NULL, NULL);
|
||||
@ -1063,10 +1063,13 @@ g_str_array_split (const gchar *string,
|
||||
}
|
||||
|
||||
str_array = g_new (gchar*, n);
|
||||
as = str_array + n - 1;
|
||||
*(as--) = NULL;
|
||||
|
||||
i = n - 1;
|
||||
|
||||
str_array[i--] = NULL;
|
||||
for (slist = string_list; slist; slist = slist->next)
|
||||
*(as--) = slist->data;
|
||||
str_array[i--] = slist->data;
|
||||
|
||||
g_slist_free (string_list);
|
||||
|
||||
return str_array;
|
||||
@ -1077,41 +1080,43 @@ g_str_array_free (gchar **str_array)
|
||||
{
|
||||
if (str_array)
|
||||
{
|
||||
gchar **as;
|
||||
int i;
|
||||
|
||||
for(i = 0; str_array[i] != NULL; i++)
|
||||
g_free(str_array[i]);
|
||||
|
||||
for (as = str_array; *as; as++)
|
||||
g_free (*as);
|
||||
g_free (str_array);
|
||||
}
|
||||
}
|
||||
|
||||
gchar*
|
||||
g_str_array_join (gchar **str_array,
|
||||
const gchar *separator)
|
||||
g_str_array_joinv (const gchar *separator,
|
||||
const gchar **str_array)
|
||||
{
|
||||
gchar *string;
|
||||
|
||||
g_return_val_if_fail (str_array != NULL, NULL);
|
||||
g_return_val_if_fail (separator != NULL, NULL);
|
||||
|
||||
if(separator == NULL)
|
||||
separator = "";
|
||||
|
||||
if (*str_array)
|
||||
{
|
||||
guint len;
|
||||
guint seperator_len;
|
||||
gchar **as;
|
||||
guint i, len;
|
||||
guint separator_len;
|
||||
|
||||
seperator_len = strlen (separator);
|
||||
len = 1 + strlen (*str_array);
|
||||
for (as = str_array + 1; *as; as++)
|
||||
len += seperator_len + strlen (*as);
|
||||
separator_len = strlen (separator);
|
||||
len = 1 + strlen (str_array[0]);
|
||||
for(i = 1; str_array[i] != NULL; i++)
|
||||
len += separator_len + strlen(str_array[i]);
|
||||
|
||||
string = g_new (gchar, len);
|
||||
*string = 0;
|
||||
strcat (string, *str_array);
|
||||
for (as = str_array + 1; *as; as++)
|
||||
for (i = 1; str_array[i] != NULL; i++)
|
||||
{
|
||||
strcat (string, separator);
|
||||
strcat (string, *as);
|
||||
strcat (string, str_array[i]);
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -1119,3 +1124,52 @@ g_str_array_join (gchar **str_array,
|
||||
|
||||
return string;
|
||||
}
|
||||
|
||||
gchar*
|
||||
g_str_array_join (const gchar *separator,
|
||||
...)
|
||||
{
|
||||
gchar *string, *s;
|
||||
va_list args;
|
||||
guint len;
|
||||
guint separator_len;
|
||||
|
||||
if(separator == NULL)
|
||||
separator = "";
|
||||
|
||||
separator_len = strlen (separator);
|
||||
|
||||
va_start(args, separator);
|
||||
|
||||
s = va_arg(args, gchar *);
|
||||
|
||||
if(s) {
|
||||
len = strlen(s) + 1;
|
||||
|
||||
while((s = va_arg(args, gchar*)))
|
||||
{
|
||||
len += separator_len + strlen(s);
|
||||
}
|
||||
va_end(args);
|
||||
|
||||
string = g_new (gchar, len);
|
||||
|
||||
va_start(args, separator);
|
||||
|
||||
*string = 0;
|
||||
s = va_arg(args, gchar*);
|
||||
strcat (string, s);
|
||||
|
||||
while((s = va_arg(args, gchar*)))
|
||||
{
|
||||
strcat(string, separator);
|
||||
strcat(string, s);
|
||||
}
|
||||
|
||||
} else
|
||||
string = g_strdup("");
|
||||
|
||||
va_end(args);
|
||||
|
||||
return string;
|
||||
}
|
||||
|
94
gstrfuncs.c
94
gstrfuncs.c
@ -1026,8 +1026,8 @@ g_str_array_split (const gchar *string,
|
||||
gint max_tokens)
|
||||
{
|
||||
GSList *string_list = NULL, *slist;
|
||||
gchar **str_array, **as, *s;
|
||||
guint n = 1;
|
||||
gchar **str_array, *s;
|
||||
guint i, n = 1;
|
||||
|
||||
g_return_val_if_fail (string != NULL, NULL);
|
||||
g_return_val_if_fail (delimiter != NULL, NULL);
|
||||
@ -1063,10 +1063,13 @@ g_str_array_split (const gchar *string,
|
||||
}
|
||||
|
||||
str_array = g_new (gchar*, n);
|
||||
as = str_array + n - 1;
|
||||
*(as--) = NULL;
|
||||
|
||||
i = n - 1;
|
||||
|
||||
str_array[i--] = NULL;
|
||||
for (slist = string_list; slist; slist = slist->next)
|
||||
*(as--) = slist->data;
|
||||
str_array[i--] = slist->data;
|
||||
|
||||
g_slist_free (string_list);
|
||||
|
||||
return str_array;
|
||||
@ -1077,41 +1080,43 @@ g_str_array_free (gchar **str_array)
|
||||
{
|
||||
if (str_array)
|
||||
{
|
||||
gchar **as;
|
||||
int i;
|
||||
|
||||
for(i = 0; str_array[i] != NULL; i++)
|
||||
g_free(str_array[i]);
|
||||
|
||||
for (as = str_array; *as; as++)
|
||||
g_free (*as);
|
||||
g_free (str_array);
|
||||
}
|
||||
}
|
||||
|
||||
gchar*
|
||||
g_str_array_join (gchar **str_array,
|
||||
const gchar *separator)
|
||||
g_str_array_joinv (const gchar *separator,
|
||||
const gchar **str_array)
|
||||
{
|
||||
gchar *string;
|
||||
|
||||
g_return_val_if_fail (str_array != NULL, NULL);
|
||||
g_return_val_if_fail (separator != NULL, NULL);
|
||||
|
||||
if(separator == NULL)
|
||||
separator = "";
|
||||
|
||||
if (*str_array)
|
||||
{
|
||||
guint len;
|
||||
guint seperator_len;
|
||||
gchar **as;
|
||||
guint i, len;
|
||||
guint separator_len;
|
||||
|
||||
seperator_len = strlen (separator);
|
||||
len = 1 + strlen (*str_array);
|
||||
for (as = str_array + 1; *as; as++)
|
||||
len += seperator_len + strlen (*as);
|
||||
separator_len = strlen (separator);
|
||||
len = 1 + strlen (str_array[0]);
|
||||
for(i = 1; str_array[i] != NULL; i++)
|
||||
len += separator_len + strlen(str_array[i]);
|
||||
|
||||
string = g_new (gchar, len);
|
||||
*string = 0;
|
||||
strcat (string, *str_array);
|
||||
for (as = str_array + 1; *as; as++)
|
||||
for (i = 1; str_array[i] != NULL; i++)
|
||||
{
|
||||
strcat (string, separator);
|
||||
strcat (string, *as);
|
||||
strcat (string, str_array[i]);
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -1119,3 +1124,52 @@ g_str_array_join (gchar **str_array,
|
||||
|
||||
return string;
|
||||
}
|
||||
|
||||
gchar*
|
||||
g_str_array_join (const gchar *separator,
|
||||
...)
|
||||
{
|
||||
gchar *string, *s;
|
||||
va_list args;
|
||||
guint len;
|
||||
guint separator_len;
|
||||
|
||||
if(separator == NULL)
|
||||
separator = "";
|
||||
|
||||
separator_len = strlen (separator);
|
||||
|
||||
va_start(args, separator);
|
||||
|
||||
s = va_arg(args, gchar *);
|
||||
|
||||
if(s) {
|
||||
len = strlen(s) + 1;
|
||||
|
||||
while((s = va_arg(args, gchar*)))
|
||||
{
|
||||
len += separator_len + strlen(s);
|
||||
}
|
||||
va_end(args);
|
||||
|
||||
string = g_new (gchar, len);
|
||||
|
||||
va_start(args, separator);
|
||||
|
||||
*string = 0;
|
||||
s = va_arg(args, gchar*);
|
||||
strcat (string, s);
|
||||
|
||||
while((s = va_arg(args, gchar*)))
|
||||
{
|
||||
strcat(string, separator);
|
||||
strcat(string, s);
|
||||
}
|
||||
|
||||
} else
|
||||
string = g_strdup("");
|
||||
|
||||
va_end(args);
|
||||
|
||||
return string;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user