summaryrefslogtreecommitdiff
path: root/src/mp-serializer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mp-serializer.c')
-rw-r--r--src/mp-serializer.c62
1 files changed, 20 insertions, 42 deletions
diff --git a/src/mp-serializer.c b/src/mp-serializer.c
index 3967cbc..4c04f64 100644
--- a/src/mp-serializer.c
+++ b/src/mp-serializer.c
@@ -41,7 +41,6 @@ struct MpSerializerPrivate
gint tsep_count; /* Number of digits between separator. */
};
-
G_DEFINE_TYPE_WITH_PRIVATE (MpSerializer, mp_serializer, G_TYPE_OBJECT);
MpSerializer *
@@ -54,7 +53,6 @@ mp_serializer_new(MpDisplayFormat format, int base, int trailing_digits)
return serializer;
}
-
static void
mp_to_string_real(MpSerializer *serializer, const MPNumber *x, int base, gboolean force_sign, int *n_digits, GString *string)
{
@@ -63,7 +61,8 @@ mp_to_string_real(MpSerializer *serializer, const MPNumber *x, int base, gboolea
MPNumber integer_component = mp_new();
MPNumber fractional_component = mp_new();
MPNumber temp = mp_new();
- int i, last_non_zero;
+ int i;
+ gsize last_non_zero;
if (mp_is_negative(x))
mp_abs(x, &number);
@@ -88,11 +87,11 @@ mp_to_string_real(MpSerializer *serializer, const MPNumber *x, int base, gboolea
/* Write out the integer component least significant digit to most */
mp_set_from_mp(&integer_component, &temp);
i = 0;
+ MPNumber t = mp_new();
+ MPNumber t2 = mp_new();
+ MPNumber t3 = mp_new();
do {
- MPNumber t = mp_new();
- MPNumber t2 = mp_new();
- MPNumber t3 = mp_new();
- int64_t d;
+ long d;
if (serializer->priv->base == 10 && serializer->priv->show_tsep && i == serializer->priv->tsep_count) {
g_string_prepend_unichar(string, serializer->priv->tsep);
@@ -118,10 +117,10 @@ mp_to_string_real(MpSerializer *serializer, const MPNumber *x, int base, gboolea
(*n_digits)++;
mp_set_from_mp(&t, &temp);
- mp_clear(&t);
- mp_clear(&t2);
- mp_clear(&t3);
} while (!mp_is_zero(&temp));
+ mp_clear(&t);
+ mp_clear(&t2);
+ mp_clear(&t3);
last_non_zero = string->len;
@@ -129,9 +128,9 @@ mp_to_string_real(MpSerializer *serializer, const MPNumber *x, int base, gboolea
/* Write out the fractional component */
mp_set_from_mp(&fractional_component, &temp);
+ MPNumber digit = mp_new();
for (i = serializer->priv->trailing_digits; i > 0 && !mp_is_zero(&temp); i--) {
int d;
- MPNumber digit = mp_new();
mp_multiply_integer(&temp, base, &temp);
mp_floor(&temp, &digit);
@@ -142,8 +141,8 @@ mp_to_string_real(MpSerializer *serializer, const MPNumber *x, int base, gboolea
if(d != 0)
last_non_zero = string->len;
mp_subtract(&temp, &digit, &temp);
- mp_clear(&digit);
}
+ mp_clear(&digit);
/* Strip trailing zeroes */
if (!serializer->priv->show_zeroes || serializer->priv->trailing_digits == 0)
@@ -179,7 +178,6 @@ mp_to_string_real(MpSerializer *serializer, const MPNumber *x, int base, gboolea
mp_clear(&temp);
}
-
static gchar *
mp_to_string(MpSerializer *serializer, const MPNumber *x, int *n_digits)
{
@@ -242,7 +240,6 @@ mp_to_string(MpSerializer *serializer, const MPNumber *x, int *n_digits)
return result;
}
-
static int
mp_to_exponential_string_real(MpSerializer *serializer, const MPNumber *x, GString *string, gboolean eng_format, int *n_digits)
{
@@ -306,7 +303,6 @@ mp_to_exponential_string_real(MpSerializer *serializer, const MPNumber *x, GStri
return exponent;
}
-
static void
append_exponent(GString *string, int exponent)
{
@@ -328,7 +324,6 @@ append_exponent(GString *string, int exponent)
g_free (super_value);
}
-
static gchar *
mp_to_exponential_string(MpSerializer *serializer, const MPNumber *x, gboolean eng_format, int *n_digits)
{
@@ -391,7 +386,6 @@ mp_to_exponential_string(MpSerializer *serializer, const MPNumber *x, gboolean e
return result;
}
-
gchar *
mp_serializer_to_string(MpSerializer *serializer, const MPNumber *x)
{
@@ -417,133 +411,114 @@ mp_serializer_to_string(MpSerializer *serializer, const MPNumber *x)
}
}
-
gboolean
mp_serializer_from_string(MpSerializer *serializer, const gchar *str, MPNumber *z)
{
return mp_set_from_string(str, serializer->priv->base, z);
}
-
void
mp_serializer_set_base(MpSerializer *serializer, gint base)
{
serializer->priv->base = base;
}
-
int
mp_serializer_get_base(MpSerializer *serializer)
{
return serializer->priv->base;
}
-
void
mp_serializer_set_radix(MpSerializer *serializer, gunichar radix)
{
serializer->priv->radix = radix;
}
-
gunichar
mp_serializer_get_radix(MpSerializer *serializer)
{
return serializer->priv->radix;
}
-
void
mp_serializer_set_thousands_separator(MpSerializer *serializer, gunichar separator)
{
serializer->priv->tsep = separator;
}
-
gunichar
mp_serializer_get_thousands_separator(MpSerializer *serializer)
{
return serializer->priv->tsep;
}
-
gint
mp_serializer_get_thousands_separator_count(MpSerializer *serializer)
{
return serializer->priv->tsep_count;
}
-
void
mp_serializer_set_show_thousands_separators(MpSerializer *serializer, gboolean visible)
{
serializer->priv->show_tsep = visible;
}
-
gboolean
mp_serializer_get_show_thousands_separators(MpSerializer *serializer)
{
return serializer->priv->show_tsep;
}
-
void
mp_serializer_set_show_trailing_zeroes(MpSerializer *serializer, gboolean visible)
{
serializer->priv->show_zeroes = visible;
}
-
gboolean
mp_serializer_get_show_trailing_zeroes(MpSerializer *serializer)
{
return serializer->priv->show_zeroes;
}
-
int
mp_serializer_get_leading_digits(MpSerializer *serializer)
{
return serializer->priv->leading_digits;
}
-
void
mp_serializer_set_leading_digits(MpSerializer *serializer, int leading_digits)
{
serializer->priv->leading_digits = leading_digits;
}
-
int
mp_serializer_get_trailing_digits(MpSerializer *serializer)
{
return serializer->priv->trailing_digits;
}
-
void
mp_serializer_set_trailing_digits(MpSerializer *serializer, int trailing_digits)
{
serializer->priv->trailing_digits = trailing_digits;
}
-
MpDisplayFormat
mp_serializer_get_number_format(MpSerializer *serializer)
{
return serializer->priv->format;
}
-
void
mp_serializer_set_number_format(MpSerializer *serializer, MpDisplayFormat format)
{
serializer->priv->format = format;
}
-
static void
mp_serializer_set_property(GObject *object,
guint prop_id,
@@ -568,7 +543,6 @@ mp_serializer_set_property(GObject *object,
}
}
-
static void
mp_serializer_get_property(GObject *object,
guint prop_id,
@@ -593,7 +567,6 @@ mp_serializer_get_property(GObject *object,
}
}
-
static void
mp_serializer_class_init(MpSerializerClass *klass)
{
@@ -632,18 +605,23 @@ mp_serializer_class_init(MpSerializerClass *klass)
G_PARAM_READWRITE));
}
-
static void
mp_serializer_init(MpSerializer *serializer)
{
- gchar *radix, *tsep;
+ gchar *radix, *utf8_radix, *tsep;
serializer->priv = mp_serializer_get_instance_private (serializer);
radix = nl_langinfo(RADIXCHAR);
- serializer->priv->radix = radix ? g_utf8_get_char(g_locale_to_utf8(radix, -1, NULL, NULL, NULL)) : '.';
+ utf8_radix = g_locale_to_utf8(radix, -1, NULL, NULL, NULL);
+ serializer->priv->radix = radix ? g_utf8_get_char(utf8_radix) : '.';
+ g_free(utf8_radix);
tsep = nl_langinfo(THOUSEP);
if (tsep && tsep[0] != '\0')
- serializer->priv->tsep = g_utf8_get_char(g_locale_to_utf8(tsep, -1, NULL, NULL, NULL));
+ {
+ gchar *utf8_tsep = g_locale_to_utf8(tsep, -1, NULL, NULL, NULL);
+ serializer->priv->tsep = g_utf8_get_char(utf8_tsep);
+ g_free(utf8_tsep);
+ }
else
serializer->priv->tsep = ' ';
serializer->priv->tsep_count = 3;