[gnumeric] Value: code cleanup.



commit fb94ca0bef39560cf26491a12354c1ad1f5a8230
Author: Morten Welinder <terra gnome org>
Date:   Fri Mar 21 15:38:05 2014 -0400

    Value: code cleanup.
    
    Most code should not know about boolean value's internals.

 plugins/excel/ms-excel-write.c      |    4 ++--
 plugins/excel/ms-formula-write.c    |    4 ++--
 plugins/excel/xls-write-pivot.c     |    5 +++--
 plugins/excel/xlsx-write-pivot.c    |    2 +-
 plugins/excel/xlsx-write.c          |   31 +++++++++++++++++++++----------
 plugins/excelplugins/excelplugins.c |    4 ++--
 plugins/perl-loader/perl-gnumeric.c |    2 +-
 plugins/python-loader/py-gnumeric.c |    4 ++--
 src/collect.c                       |    2 +-
 9 files changed, 35 insertions(+), 23 deletions(-)
---
diff --git a/plugins/excel/ms-excel-write.c b/plugins/excel/ms-excel-write.c
index 65c76a2..0ffe399 100644
--- a/plugins/excel/ms-excel-write.c
+++ b/plugins/excel/ms-excel-write.c
@@ -3382,7 +3382,7 @@ excel_write_value (ExcelWriteState *ewb, GnmValue *v, guint32 col, guint32 row,
                        GSF_LE_SET_GUINT8 (data + 6, excel_write_map_errcode (v));
                        GSF_LE_SET_GUINT8 (data + 7, 1); /* Mark as a err */
                } else {
-                       GSF_LE_SET_GUINT8 (data + 6, v->v_bool.val ? 1 : 0);
+                       GSF_LE_SET_GUINT8 (data + 6, value_get_as_int (v));
                        GSF_LE_SET_GUINT8 (data + 7, 0); /* Mark as a bool */
                }
                ms_biff_put_commit (ewb->bp);
@@ -3507,7 +3507,7 @@ excel_write_FORMULA (ExcelWriteState *ewb, ExcelWriteSheet *esheet, GnmCell cons
 
        case VALUE_BOOLEAN:
                GSF_LE_SET_GUINT32 (data +  6,
-                                   v->v_bool.val ? 0x10001 : 0x1);
+                                   value_get_as_checked_bool (v) ? 0x10001 : 0x1);
                GSF_LE_SET_GUINT32 (data + 10, 0xffff0000);
                break;
 
diff --git a/plugins/excel/ms-formula-write.c b/plugins/excel/ms-formula-write.c
index 3f1b3bc..b3615db 100644
--- a/plugins/excel/ms-formula-write.c
+++ b/plugins/excel/ms-formula-write.c
@@ -774,7 +774,7 @@ write_node (PolishData *pd, GnmExpr const *expr, int paren_level,
                case VALUE_BOOLEAN : {
                        guint8 data[2];
                        GSF_LE_SET_GUINT8 (data, FORMULA_PTG_BOOL);
-                       GSF_LE_SET_GUINT8 (data+1, v->v_bool.val ? 1 : 0);
+                       GSF_LE_SET_GUINT8 (data+1, value_get_as_int (v));
                        ms_biff_put_var_write (pd->ewb->bp, data, 2);
                        break;
                }
@@ -955,7 +955,7 @@ write_arrays (PolishData *pd)
                                        push_guint32 (pd, 0);
                                } else if (VALUE_IS_BOOLEAN (v)) {
                                        push_guint8 (pd, 4);
-                                       push_guint32 (pd, v->v_bool.val ? 1 : 0);
+                                       push_guint32 (pd, value_get_as_int (v));
                                        push_guint32 (pd, 0);
                                } else if (VALUE_IS_ERROR (v)) {
                                        push_guint8 (pd, 16);
diff --git a/plugins/excel/xls-write-pivot.c b/plugins/excel/xls-write-pivot.c
index db6fd34..3501c09 100644
--- a/plugins/excel/xls-write-pivot.c
+++ b/plugins/excel/xls-write-pivot.c
@@ -117,7 +117,7 @@ xls_write_pivot_cache_value (ExcelWriteState *ewb, GOVal const *v)
                        break;
 
                case VALUE_BOOLEAN:
-                       ms_biff_put_2byte (ewb->bp, BIFF_SXBOOL, v->v_bool.val);
+                       ms_biff_put_2byte (ewb->bp, BIFF_SXBOOL, value_get_as_int (v));
                        break;
 
                case VALUE_FLOAT: {
@@ -126,7 +126,8 @@ xls_write_pivot_cache_value (ExcelWriteState *ewb, GOVal const *v)
                                xls_write_pivot_cache_date_value (ewb, v);
                        else {
                                guint8 *data = ms_biff_put_len_next (ewb->bp, BIFF_SXNUM, 8);
-                               GSF_LE_SET_DOUBLE (data, v->v_float.val);
+                               double d = value_get_as_float (v);
+                               GSF_LE_SET_DOUBLE (data, d);
                                ms_biff_put_commit (ewb->bp);
                        }
                        break;
diff --git a/plugins/excel/xlsx-write-pivot.c b/plugins/excel/xlsx-write-pivot.c
index a133df4..a0daf21 100644
--- a/plugins/excel/xlsx-write-pivot.c
+++ b/plugins/excel/xlsx-write-pivot.c
@@ -49,7 +49,7 @@ xlsx_write_pivot_val (XLSXWriteState *state, GsfXMLOut *xml,
 
        case VALUE_BOOLEAN:
                gsf_xml_out_start_element (xml, "b");
-               xlsx_add_bool (xml, "v", v->v_bool.val);
+               xlsx_add_bool (xml, "v", value_get_as_int (v));
                gsf_xml_out_end_element (xml);
                break;
 
diff --git a/plugins/excel/xlsx-write.c b/plugins/excel/xlsx-write.c
index 211b37d..a264f52 100644
--- a/plugins/excel/xlsx-write.c
+++ b/plugins/excel/xlsx-write.c
@@ -1458,11 +1458,19 @@ xlsx_write_cells (XLSXWriteState *state, GsfXMLOut *xml,
 
                                switch (val->type) {
                                default :
-                               case VALUE_EMPTY :      type = NULL; break; /* FIXME : what to do ? */
-                               case VALUE_BOOLEAN :    type = "b"; break;
-                               case VALUE_FLOAT :      type = ""; break; /* "n" is the default */
-                               case VALUE_ERROR :      type = "e"; break;
-                               case VALUE_STRING :
+                               case VALUE_EMPTY:
+                                       type = NULL; /* FIXME : what to do ? */
+                                       break;
+                               case VALUE_BOOLEAN:
+                                       type = "b";
+                                       break;
+                               case VALUE_FLOAT:
+                                       type = ""; /* "n" is the default */
+                                       break;
+                               case VALUE_ERROR:
+                                       type = "e";
+                                       break;
+                               case VALUE_STRING:
                                        /* A reasonable approximation of * 'is_shared'.  It can get spoofed by
                                         * rich text references to a base * string */
                                        if (go_string_get_ref_count (val->v_str.val) > 1) {
@@ -1476,8 +1484,10 @@ xlsx_write_cells (XLSXWriteState *state, GsfXMLOut *xml,
                                        } else
                                                type = "str";
                                        break;
-                               case VALUE_CELLRANGE :
-                               case VALUE_ARRAY :      type = NULL; break;     /* FIXME */
+                               case VALUE_CELLRANGE:
+                               case VALUE_ARRAY:
+                                       type = NULL; /* FIXME */
+                                       break;
                                }
 
                                if (NULL != type && *type)
@@ -1509,13 +1519,14 @@ xlsx_write_cells (XLSXWriteState *state, GsfXMLOut *xml,
                                        if (str_id >= 0) {
                                                gsf_xml_out_add_int (xml, NULL, str_id);
                                                str_id = -1;
-                                       } else if (val->type != VALUE_BOOLEAN) {
+                                       } else if (VALUE_IS_BOOLEAN (val)) {
+                                               xlsx_add_bool (xml, NULL, value_get_as_int (val));
+                                       } else {
                                                GString *str = g_string_new (NULL);
                                                value_get_as_gstring (cell->value, str, state->convs);
                                                gsf_xml_out_add_cstr (xml, NULL, str->str);
                                                g_string_free (str, TRUE);
-                                       } else
-                                               xlsx_add_bool (xml, NULL, val->v_bool.val);
+                                       }
                                        gsf_xml_out_end_element (xml); /* </v> */
                                }
 
diff --git a/plugins/excelplugins/excelplugins.c b/plugins/excelplugins/excelplugins.c
index 52ffdb0..e7fe124 100644
--- a/plugins/excelplugins/excelplugins.c
+++ b/plugins/excelplugins/excelplugins.c
@@ -283,7 +283,7 @@ copy_construct_xloper_from_gnm_value (XLOPER*out, const GnmValue*in,
                        break;
                case VALUE_BOOLEAN:
                        out->xltype = xltypeBool;
-                       out->val.boolean = (WORD)in->v_bool.val;
+                       out->val.boolean = (WORD)value_get_as_checked_bool (in);
                        break;
                case VALUE_FLOAT:
                        out->xltype = xltypeNum;
@@ -295,7 +295,7 @@ copy_construct_xloper_from_gnm_value (XLOPER*out, const GnmValue*in,
                        break;
                case VALUE_STRING:
                        out->xltype = xltypeStr;
-                       out->val.str = pascal_string_from_c_string (in->v_str.val->str);
+                       out->val.str = pascal_string_from_c_string (value_peek_string (in));
                        break;
                case VALUE_CELLRANGE: {
                        GnmSheetRange sr;
diff --git a/plugins/perl-loader/perl-gnumeric.c b/plugins/perl-loader/perl-gnumeric.c
index d341f63..e512bc5 100644
--- a/plugins/perl-loader/perl-gnumeric.c
+++ b/plugins/perl-loader/perl-gnumeric.c
@@ -7,7 +7,7 @@ value2perl(const GnmValue *v)
 
        switch (v->type) {
        case VALUE_BOOLEAN:
-               sv = newSViv(v->v_bool.val);
+               sv = newSViv(value_get_as_int (v));
                break;
 
        case VALUE_FLOAT:
diff --git a/plugins/python-loader/py-gnumeric.c b/plugins/python-loader/py-gnumeric.c
index f9e75fa..23c0d9f 100644
--- a/plugins/python-loader/py-gnumeric.c
+++ b/plugins/python-loader/py-gnumeric.c
@@ -327,13 +327,13 @@ gnm_value_to_py_obj (const GnmEvalPos *eval_pos, const GnmValue *val)
 
     switch (val->type) {
        case VALUE_BOOLEAN:
-               py_val = py_new_Boolean_object (val->v_bool.val);
+               py_val = py_new_Boolean_object (value_get_as_checked_bool (val));
                break;
        case VALUE_FLOAT:
                py_val = PyFloat_FromDouble (value_get_as_float (val));
                break;
        case VALUE_STRING:
-               py_val = PyString_FromString (val->v_str.val->str);
+               py_val = PyString_FromString (value_peek_string (val));
                break;
        case VALUE_CELLRANGE:
                py_val = py_new_RangeRef_object (&val->v_range.cell);
diff --git a/src/collect.c b/src/collect.c
index 03f1b9e..2cfbf48 100644
--- a/src/collect.c
+++ b/src/collect.c
@@ -335,7 +335,7 @@ callback_function_collect (GnmEvalPos const *ep, GnmValue const *value,
                if (cl->flags & COLLECT_IGNORE_BOOLS)
                        ignore = TRUE;
                else if (cl->flags & COLLECT_ZEROONE_BOOLS)
-                       x = (value->v_bool.val) ? 1. : 0.;
+                       x = value_get_as_float (value);
                else
                        return value_new_error_VALUE (ep);
                break;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]