[gnumeric] Stf: minor speed-ups.
- From: Morten Welinder <mortenw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] Stf: minor speed-ups.
- Date: Fri, 26 Oct 2012 20:50:39 +0000 (UTC)
commit fc94290058e8b53591a28b5ba7432576728dddd7
Author: Morten Welinder <terra gnome org>
Date: Fri Oct 26 16:50:12 2012 -0400
Stf: minor speed-ups.
ChangeLog | 8 ++++++++
samples/formats.xls | Bin 283136 -> 394752 bytes
src/gutils.c | 20 +++++++++++++++++++-
src/stf-parse.c | 13 +++++++++----
4 files changed, 36 insertions(+), 5 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 3ee4032..3abf9cb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2012-10-26 Morten Welinder <terra gnome org>
+
+ * src/gutils.c (gnm_utf8_strto): Handle all-ascii case without
+ copying the string.
+
+ * src/stf-parse.c (my_utf8_strchr): New function wrapping
+ g_utf8_strchr and handling ascii character faster.
+
2012-10-20 Jean Brefort <jean brefort normalesup org>
* src/sheet-object-image.c (gnm_soi_get_target_list): fix trivial crasher,
diff --git a/samples/formats.xls b/samples/formats.xls
index 13767dd..f51b0fc 100755
Binary files a/samples/formats.xls and b/samples/formats.xls differ
diff --git a/src/gutils.c b/src/gutils.c
index b07d901..ad6ce77 100644
--- a/src/gutils.c
+++ b/src/gutils.c
@@ -175,6 +175,19 @@ gnm_usr_dir (gboolean versioned)
return versioned ? gnumeric_usr_dir : gnumeric_usr_dir_unversioned;
}
+
+static gboolean
+all_ascii (const char *s)
+{
+ while ((guchar)*s < 0x7f) {
+ if (*s)
+ s++;
+ else
+ return TRUE;
+ }
+ return FALSE;
+}
+
/*
* Like strto[ld], but...
* 1. handles non-ascii characters
@@ -187,7 +200,7 @@ gnm_utf8_strto (const char *s, char **end)
const char *p;
int sign;
char *dummy_end;
- GString *ascii = g_string_sized_new (100);
+ GString *ascii;
GString const *decimal = go_locale_get_decimal ();
gboolean seen_decimal = FALSE;
gboolean seen_digit = FALSE;
@@ -195,6 +208,11 @@ gnm_utf8_strto (const char *s, char **end)
gnm_float res;
int save_errno;
+ if (all_ascii (s))
+ return gnm_strto (s, end);
+
+ ascii = g_string_sized_new (100);
+
if (!end)
end = &dummy_end;
diff --git a/src/stf-parse.c b/src/stf-parse.c
index d141f1b..c9358be 100644
--- a/src/stf-parse.c
+++ b/src/stf-parse.c
@@ -86,6 +86,12 @@ my_garray_len (GArray const *a)
return (int)a->len;
}
+static char *
+my_utf8_strchr (const char *p, gunichar uc)
+{
+ return uc < 0x7f ? strchr (p, uc) : g_utf8_strchr (p, -1, uc);
+}
+
static int
compare_terminator (char const *s, StfParseOptions_t *parseoptions)
{
@@ -538,8 +544,7 @@ stf_parse_csv_is_separator (char const *character, char const *chr, GSList const
}
}
- if (chr && g_utf8_strchr (chr, -1,
- g_utf8_get_char (character)))
+ if (chr && my_utf8_strchr (chr, g_utf8_get_char (character)))
return g_utf8_next_char(character);
return NULL;
@@ -1661,7 +1666,7 @@ stf_parse_options_guess_csv (char const *data)
quoteline = line;
break;
case 2:
- if (g_utf8_strchr (line, -1, stringind))
+ if (my_utf8_strchr (line, stringind))
quoteline = line;
break;
}
@@ -1669,7 +1674,7 @@ stf_parse_options_guess_csv (char const *data)
}
if (quoteline) {
- const char *p0 = g_utf8_strchr (quoteline, -1, stringind);
+ const char *p0 = my_utf8_strchr (quoteline, stringind);
const char *p = p0;
do {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]