[gcalctool] Kill mp_serializer_to_specific_string
- From: Robert Ancell <rancell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gcalctool] Kill mp_serializer_to_specific_string
- Date: Mon, 29 Nov 2010 04:40:56 +0000 (UTC)
commit 6fb9508e6befab09ae3e076aa992ef38b2dafea0
Author: Robert Ancell <robert ancell canonical com>
Date: Mon Nov 29 14:09:03 2010 +1100
Kill mp_serializer_to_specific_string
src/gcalccmd.c | 8 ++++++--
src/gcalctool.c | 3 +--
src/math-buttons.c | 17 +++++++++++------
src/math-equation.c | 18 +++++++++---------
src/math-variables.c | 5 ++++-
src/mp-binary.c | 20 +++++++++++++++++---
src/mp-serializer.c | 41 +++++++++++++++++++++--------------------
src/mp-serializer.h | 30 +++++++++++++++++++-----------
src/unittest.c | 7 ++++++-
9 files changed, 94 insertions(+), 55 deletions(-)
---
diff --git a/src/gcalccmd.c b/src/gcalccmd.c
index 414fc60..190df8f 100644
--- a/src/gcalccmd.c
+++ b/src/gcalccmd.c
@@ -30,13 +30,15 @@
#define MAXLINE 1024
+static MpSerializer *result_serializer;
+
static void
solve(const char *equation)
{
int ret;
MPEquationOptions options;
MPNumber z;
- char *result_str;
+ gchar *result_str = NULL;
memset(&options, 0, sizeof(options));
options.base = 10;
@@ -50,7 +52,7 @@ solve(const char *equation)
else if (ret)
fprintf(stderr, "Error %d\n", ret);
else {
- mp_serializer_to_specific_string(&z, 10, 9, true, true, &result_str);
+ result_str = mp_serializer_to_string(result_serializer, &z);
printf("%s\n", result_str);
}
g_free(result_str);
@@ -85,6 +87,8 @@ main(int argc, char **argv)
g_type_init ();
setlocale(LC_ALL, "");
+ result_serializer = mp_serializer_new(10, 9);
+
equation = (char *) malloc(MAXLINE * sizeof(char));
while (1) {
printf("> ");
diff --git a/src/gcalctool.c b/src/gcalctool.c
index 146f270..8cb8f94 100644
--- a/src/gcalctool.c
+++ b/src/gcalctool.c
@@ -62,9 +62,8 @@ solve(const char *equation)
exit(1);
}
else {
- mp_serializer_to_specific_string(&result, options.base, 9, true, true, &result_str);
+ result_str = mp_serializer_to_string(mp_serializer_new(10, 9), &result);
printf("%s\n", result_str);
- g_free(result_str);
exit(0);
}
}
diff --git a/src/math-buttons.c b/src/math-buttons.c
index a0d096d..697606a 100644
--- a/src/math-buttons.c
+++ b/src/math-buttons.c
@@ -57,6 +57,7 @@ struct MathButtonsPrivate
GtkWidget *convert_from_combo;
GtkWidget *convert_to_combo;
+ MpSerializer *units_serializer;
GtkWidget *convert_result_label;
GtkWidget *base_combo;
@@ -66,6 +67,7 @@ struct MathButtonsPrivate
GtkWidget *source_currency_combo;
GtkWidget *target_currency_combo;
+ MpSerializer *currency_serializer;
GtkWidget *currency_label;
GtkWidget *character_code_dialog;
@@ -594,8 +596,8 @@ update_currency_label(MathButtons *buttons)
const char *source_symbol, *target_symbol;
int i;
- mp_serializer_to_specific_string(&x, 10, 2, false, true, &input_text);
- mp_serializer_to_specific_string(&value, 10, 2, false, true, &output_text);
+ input_text = mp_serializer_to_string(buttons->priv->currency_serializer, &x);
+ output_text = mp_serializer_to_string(buttons->priv->currency_serializer, &value);
for (i = 0; strcmp(math_equation_get_source_currency(buttons->priv->equation), currency_names[i].short_name) != 0; i++);
source_symbol = currency_names[i].symbol;
@@ -641,9 +643,9 @@ update_conversion_bar(MathButtons *buttons)
gtk_widget_set_sensitive(buttons->priv->convert_result_label, enabled);
if (!enabled)
return;
-
- mp_serializer_to_specific_string(&x, 10, 2, TRUE, TRUE, &source_value);
- mp_serializer_to_specific_string(&z, 10, 2, TRUE, TRUE, &target_value);
+
+ source_value = mp_serializer_to_string(buttons->priv->units_serializer, &x);
+ target_value = mp_serializer_to_string(buttons->priv->units_serializer, &z);
label = g_strdup_printf("%s %s = %s %s", source_value, source_units, target_value, target_units);
gtk_label_set_text(GTK_LABEL(buttons->priv->convert_result_label), label);
@@ -1028,7 +1030,7 @@ load_mode(MathButtons *buttons, ButtonMode mode)
MpSerializer *serializer = math_equation_get_serializer(buttons->priv->equation);
gchar buffer[7];
gint len;
- len = g_unichar_to_utf8(mp_serializer_get_numeric_point_text(serializer), buffer);
+ len = g_unichar_to_utf8(mp_serializer_get_radix(serializer), buffer);
buffer[len] = '\0';
gtk_button_set_label(GTK_BUTTON(widget), buffer);
}
@@ -1053,6 +1055,7 @@ load_mode(MathButtons *buttons, ButtonMode mode)
int i, j;
buttons->priv->convert_result_label = GET_WIDGET(builder, "convert_result_label");
+ buttons->priv->units_serializer = mp_serializer_new(10, 2);
buttons->priv->convert_from_combo = GET_WIDGET(builder, "convert_from_combo");
from_model = gtk_tree_store_new(3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT);
@@ -1144,6 +1147,8 @@ load_mode(MathButtons *buttons, ButtonMode mode)
buttons->priv->target_currency_combo = GET_WIDGET(builder, "target_currency_combo");
buttons->priv->currency_label = GET_WIDGET(builder, "currency_label");
+ buttons->priv->currency_serializer = mp_serializer_new(10, 2);
+
model = gtk_list_store_new(1, G_TYPE_STRING);
for (i = 0; currency_names[i].short_name != NULL; i++) {
diff --git a/src/math-equation.c b/src/math-equation.c
index d7bc7e8..2d8da54 100644
--- a/src/math-equation.c
+++ b/src/math-equation.c
@@ -197,7 +197,7 @@ count_digits(MathEquation *equation, const gchar *text)
read_iter = g_utf8_next_char(read_iter);
/* Allow a thousands separator between digits follow a digit */
- if (g_utf8_get_char(read_iter) == mp_serializer_get_thousands_separator_text(equation->priv->serializer)) {
+ if (g_utf8_get_char(read_iter) == mp_serializer_get_thousands_separator(equation->priv->serializer)) {
read_iter = g_utf8_next_char(read_iter);
if (!g_unichar_isdigit(g_utf8_get_char(read_iter)))
return count;
@@ -252,7 +252,7 @@ reformat_separators(MathEquation *equation)
gint len;
gtk_text_buffer_get_iter_at_offset(GTK_TEXT_BUFFER(equation), &iter, offset);
- len = g_unichar_to_utf8(mp_serializer_get_thousands_separator_text(equation->priv->serializer), buffer);
+ len = g_unichar_to_utf8(mp_serializer_get_thousands_separator(equation->priv->serializer), buffer);
buffer[len] = '\0';
gtk_text_buffer_insert(GTK_TEXT_BUFFER(equation), &iter, buffer, -1);
offset++;
@@ -261,10 +261,10 @@ reformat_separators(MathEquation *equation)
digit_offset--;
}
- else if (c == mp_serializer_get_numeric_point_text(equation->priv->serializer)) {
+ else if (c == mp_serializer_get_radix(equation->priv->serializer)) {
in_number = in_radix = TRUE;
}
- else if (c == mp_serializer_get_thousands_separator_text(equation->priv->serializer)) {
+ else if (c == mp_serializer_get_thousands_separator(equation->priv->serializer)) {
/* Didn't expect thousands separator - delete it */
if (!expect_tsep) {
GtkTextIter start, end;
@@ -799,10 +799,10 @@ math_equation_get_equation(MathEquation *equation)
}
/* Ignore thousands separators */
- if (c == mp_serializer_get_thousands_separator_text(equation->priv->serializer) && last_is_digit && next_is_digit)
+ if (c == mp_serializer_get_thousands_separator(equation->priv->serializer) && last_is_digit && next_is_digit)
;
/* Substitute radix character */
- else if (c == mp_serializer_get_numeric_point_text(equation->priv->serializer) && (last_is_digit || next_is_digit))
+ else if (c == mp_serializer_get_radix(equation->priv->serializer) && (last_is_digit || next_is_digit))
g_string_append_unichar(eq_text, '.');
else
g_string_append_unichar(eq_text, c);
@@ -978,7 +978,7 @@ math_equation_insert_numeric_point(MathEquation *equation)
{
gchar buffer[7];
gint len;
- len = g_unichar_to_utf8( mp_serializer_get_numeric_point_text(equation->priv->serializer), buffer);
+ len = g_unichar_to_utf8( mp_serializer_get_radix(equation->priv->serializer), buffer);
buffer[len] = '\0';
math_equation_insert(equation, buffer);
}
@@ -1719,7 +1719,7 @@ pre_insert_text_cb(MathEquation *equation,
/* Clear result on next digit entered if cursor at end of line */
// FIXME Cursor
c = g_utf8_get_char(text);
- if ((g_unichar_isdigit(c) || c == mp_serializer_get_numeric_point_text(equation->priv->serializer)) &&
+ if ((g_unichar_isdigit(c) || c == mp_serializer_get_radix(equation->priv->serializer)) &&
math_equation_is_result(equation)) {
gtk_text_buffer_set_text(GTK_TEXT_BUFFER(equation), "", -1);
clear_ans(equation, FALSE);
@@ -1853,7 +1853,7 @@ math_equation_init(MathEquation *equation)
equation->priv->target_currency = g_strdup(currency_names[0].short_name);
equation->priv->source_units = g_strdup("");
equation->priv->target_units = g_strdup("");
- equation->priv->serializer = mp_serializer_new();
+ equation->priv->serializer = mp_serializer_new(10, 9);
equation->priv->queue = g_async_queue_new();
mp_set_from_integer(0, &equation->priv->state.ans);
diff --git a/src/math-variables.c b/src/math-variables.c
index 77207b6..a57a509 100644
--- a/src/math-variables.c
+++ b/src/math-variables.c
@@ -27,6 +27,7 @@ struct MathVariablesPrivate
{
gchar *file_name;
GHashTable *registers;
+ MpSerializer *serializer;
};
G_DEFINE_TYPE (MathVariables, math_variables, G_TYPE_OBJECT);
@@ -98,7 +99,7 @@ registers_save(MathVariables *variables)
MPNumber *value = val;
char *number;
- mp_serializer_to_specific_string(value, 10, 50, true, false, &number);
+ number = mp_serializer_to_string(variables->priv->serializer, value);
fprintf(f, "%s=%s\n", name, number);
g_free(number);
}
@@ -161,5 +162,7 @@ math_variables_init(MathVariables *variables)
variables->priv = G_TYPE_INSTANCE_GET_PRIVATE (variables, math_variables_get_type(), MathVariablesPrivate);
variables->priv->registers = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
variables->priv->file_name = g_build_filename(g_get_user_data_dir(), "gcalctool", "registers", NULL);
+ variables->priv->serializer = mp_serializer_new(10, 50);
+ mp_serializer_set_radix(variables->priv->serializer, '.');
registers_load(variables);
}
diff --git a/src/mp-binary.c b/src/mp-binary.c
index f16470b..7f033db 100644
--- a/src/mp-binary.c
+++ b/src/mp-binary.c
@@ -40,14 +40,28 @@ static int hex_to_int(char digit)
}
+static gchar *
+to_hex_string(const MPNumber *x)
+{
+ MpSerializer *serializer;
+ gchar *result;
+
+ serializer = mp_serializer_new(16, 0);
+ result = mp_serializer_to_string(serializer, x);
+ g_object_unref(serializer);
+
+ return result;
+}
+
+
static void
mp_bitwise(const MPNumber *x, const MPNumber *y, int (*bitwise_operator)(int, int), MPNumber *z, int wordlen)
{
char *text1, *text2, text_out[MAX_DIGITS], text_out2[MAX_DIGITS];
int offset1, offset2, offset_out;
- mp_serializer_to_specific_string(x, 16, 0, false, false, &text1);
- mp_serializer_to_specific_string(y, 16, 0, false, false, &text2);
+ text1 = to_hex_string(x);
+ text2 = to_hex_string(y);
offset1 = strlen(text1) - 1;
offset2 = strlen(text2) - 1;
offset_out = wordlen / 4 - 1;
@@ -161,7 +175,7 @@ mp_mask(const MPNumber *x, int wordlen, MPNumber *z)
size_t len, offset;
/* Convert to a hexadecimal string and use last characters */
- mp_serializer_to_specific_string(x, 16, 0, false, false, &text);
+ text = to_hex_string(x);
len = strlen(text);
offset = wordlen / 4;
offset = len > offset ? len - offset: 0;
diff --git a/src/mp-serializer.c b/src/mp-serializer.c
index 6df3015..0dc3fdb 100644
--- a/src/mp-serializer.c
+++ b/src/mp-serializer.c
@@ -54,9 +54,12 @@ struct MpSerializerPrivate
G_DEFINE_TYPE(MpSerializer, mp_serializer, G_TYPE_OBJECT);
MpSerializer *
-mp_serializer_new()
+mp_serializer_new(int base, int accuracy)
{
- return g_object_new(mp_serializer_get_type(), NULL);
+ MpSerializer *serializer = g_object_new(mp_serializer_get_type(), NULL);
+ mp_serializer_set_base(serializer, base);
+ mp_serializer_set_accuracy(serializer, accuracy);
+ return serializer;
}
@@ -302,22 +305,6 @@ mp_serializer_to_string(MpSerializer *serializer, const MPNumber *x)
}
-void
-mp_serializer_to_specific_string(const MPNumber *x, int base, int accuracy, gboolean trim_zeroes, gboolean localize, gchar **target)
-{
- MpSerializer *serializer = mp_serializer_new();
- if (!localize) {
- serializer->priv->radix = '.';
- serializer->priv->show_tsep = FALSE;
- }
- serializer->priv->base = base;
- serializer->priv->accuracy = accuracy;
- serializer->priv->show_zeroes = !trim_zeroes;
- *target = mp_serializer_to_string(serializer, x);
- g_object_unref(serializer);
-}
-
-
gboolean
mp_serializer_from_string(MpSerializer *serializer, const gchar *str, MPNumber *z)
{
@@ -339,15 +326,29 @@ mp_serializer_get_base(MpSerializer *serializer)
}
+void
+mp_serializer_set_radix(MpSerializer *serializer, gunichar radix)
+{
+ serializer->priv->radix = radix;
+}
+
+
gunichar
-mp_serializer_get_numeric_point_text(MpSerializer *serializer)
+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_text(MpSerializer *serializer)
+mp_serializer_get_thousands_separator(MpSerializer *serializer)
{
return serializer->priv->tsep;
}
diff --git a/src/mp-serializer.h b/src/mp-serializer.h
index bee4260..2998b94 100644
--- a/src/mp-serializer.h
+++ b/src/mp-serializer.h
@@ -48,26 +48,34 @@ typedef enum {
} DisplayFormat;
GType mp_serializer_get_type(void);
-MpSerializer *mp_serializer_new(void);
-void mp_serializer_to_specific_string(const MPNumber *z, int base, int accuracy, gboolean trim_zeroes, gboolean localize, char **target);
+MpSerializer *mp_serializer_new(int base, int accuracy);
gchar *mp_serializer_to_string(MpSerializer *serializer, const MPNumber *z);
gboolean mp_serializer_from_string(MpSerializer *serializer, const gchar *str, MPNumber *z);
-gunichar mp_serializer_get_thousands_separator_text(MpSerializer *serializer);
-gint mp_serializer_get_thousands_separator_count(MpSerializer *serializer);
-gunichar mp_serializer_get_numeric_point_text(MpSerializer *serializer);
void mp_serializer_set_base(MpSerializer *serializer, int base);
int mp_serializer_get_base(MpSerializer *serializer);
-gboolean mp_serializer_get_show_trailing_zeroes(MpSerializer *serializer);
-void mp_serializer_set_show_trailing_zeroes(MpSerializer *serializer, gboolean visible);
-gboolean mp_serializer_get_show_thousands_separators(MpSerializer *serializer);
-void mp_serializer_set_show_thousands_separators(MpSerializer *serializer, gboolean visible);
-int mp_serializer_get_accuracy(MpSerializer *serializer);
+
void mp_serializer_set_accuracy(MpSerializer *serializer, int accuracy);
-DisplayFormat mp_serializer_get_number_format(MpSerializer *serializer);
+int mp_serializer_get_accuracy(MpSerializer *serializer);
+
void mp_serializer_set_number_format(MpSerializer *serializer, DisplayFormat format);
+DisplayFormat mp_serializer_get_number_format(MpSerializer *serializer);
+
+void mp_serializer_set_radix(MpSerializer *serializer, gunichar radix);
+gunichar mp_serializer_get_radix(MpSerializer *serializer);
+
+void mp_serializer_set_thousands_separator(MpSerializer *serializer, gunichar separator);
+gunichar mp_serializer_get_thousands_separator(MpSerializer *serializer);
+
+gint mp_serializer_get_thousands_separator_count(MpSerializer *serializer);
+
+void mp_serializer_set_show_trailing_zeroes(MpSerializer *serializer, gboolean visible);
+gboolean mp_serializer_get_show_trailing_zeroes(MpSerializer *serializer);
+
+void mp_serializer_set_show_thousands_separators(MpSerializer *serializer, gboolean visible);
+gboolean mp_serializer_get_show_thousands_separators(MpSerializer *serializer);
G_END_DECLS
diff --git a/src/unittest.c b/src/unittest.c
index 8701218..9251121 100644
--- a/src/unittest.c
+++ b/src/unittest.c
@@ -84,7 +84,12 @@ test(char *expression, char *expected, int expected_error)
if(error == 0) {
char *result_str;
- mp_serializer_to_specific_string(&result, options.base, 9, true, false, &result_str);
+ MpSerializer *serializer;
+
+ serializer = mp_serializer_new(options.base, 9);
+ result_str = mp_serializer_to_string(serializer, &result);
+ g_object_unref(serializer);
+
if(expected_error != 0)
fail("'%s' -> %s, expected error %s", expression, result_str, error_code_to_string(expected_error));
else if(strcmp(result_str, expected) != 0)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]