Update Spanish translation
[gnumeric.git] / src / value.h
blobae7c9ea0e9c19a3f7e59f879ef2f55a0a8e74c9d
1 #ifndef _GNM_VALUE_H_
2 # define _GNM_VALUE_H_
4 #include <gnumeric.h>
5 #include <position.h>
6 #include <numbers.h>
7 #include <parse-util.h>
8 #include <glib-object.h>
10 G_BEGIN_DECLS
12 typedef enum {
13 /* Use magic values to act as a signature
14 * DO NOT CHANGE THESE NUMBERS
15 * As of version 0.57 they are using as keys
16 * in the xml
18 VALUE_EMPTY = 10,
19 VALUE_BOOLEAN = 20,
20 VALUE_FLOAT = 40,
21 VALUE_ERROR = 50,
22 VALUE_STRING = 60,
23 VALUE_CELLRANGE = 70,
24 VALUE_ARRAY = 80
25 } GnmValueType;
28 * This one lives only in old XML files and is understood by
29 * value_new_from_string.
31 #define VALUE_INTEGER ((GnmValueType)30)
34 typedef struct {
35 GnmValueType const type;
36 GOFormat const *fmt;
37 } GnmValueAny;
38 struct _GnmValueBool {
39 GnmValueType const type;
40 GOFormat *fmt;
41 gboolean val;
43 struct _GnmValueFloat {
44 GnmValueType const type;
45 GOFormat *fmt;
46 gnm_float val;
48 struct _GnmValueErr {
49 GnmValueType const type;
50 GOFormat *fmt;
51 GOString *mesg;
53 struct _GnmValueStr {
54 GnmValueType const type;
55 GOFormat *fmt;
56 GOString *val;
58 struct _GnmValueRange {
59 GnmValueType const type;
60 GOFormat *fmt;
61 GnmRangeRef cell;
63 struct _GnmValueArray {
64 GnmValueType const type;
65 GOFormat *fmt;
66 int x, y;
67 GnmValue ***vals; /* Array [x][y] */
70 union _GnmValue {
71 GnmValueAny v_any;
72 GnmValueBool v_bool;
73 GnmValueFloat v_float;
74 GnmValueErr v_err;
75 GnmValueStr v_str;
76 GnmValueRange v_range;
77 GnmValueArray v_array;
80 #define VALUE_FMT(v) ((v)->v_any.fmt)
81 #define VALUE_IS_EMPTY(v) (((v) == NULL) || ((v)->v_any.type == VALUE_EMPTY))
82 #define VALUE_IS_EMPTY_OR_ERROR(v) (VALUE_IS_EMPTY(v) || (v)->v_any.type == VALUE_ERROR)
83 #define VALUE_IS_STRING(v) ((v)->v_any.type == VALUE_STRING)
84 #define VALUE_IS_BOOLEAN(v) ((v)->v_any.type == VALUE_BOOLEAN)
85 #define VALUE_IS_ERROR(v) ((v)->v_any.type == VALUE_ERROR)
86 #define VALUE_IS_NUMBER(v) (((v)->v_any.type == VALUE_FLOAT) || \
87 ((v)->v_any.type == VALUE_BOOLEAN))
88 #define VALUE_IS_FLOAT(v) ((v)->v_any.type == VALUE_FLOAT)
89 #define VALUE_IS_ARRAY(v) ((v)->v_any.type == VALUE_ARRAY)
90 #define VALUE_IS_CELLRANGE(v) ((v)->v_any.type == VALUE_CELLRANGE)
92 typedef enum {
93 IS_EQUAL,
94 IS_LESS,
95 IS_GREATER,
96 TYPE_MISMATCH
97 } GnmValDiff;
99 GType gnm_value_get_type (void); /* a boxed type */
101 GnmValue *value_new_empty (void);
102 GnmValue *value_new_bool (gboolean b);
103 GnmValue *value_new_int (int i);
104 GnmValue *value_new_float (gnm_float f);
105 GnmValue *value_new_error (GnmEvalPos const *pos, char const *mesg);
106 GnmValue *value_new_error_str (GnmEvalPos const *pos, GOString *mesg);
107 GnmValue *value_new_error_std (GnmEvalPos const *pos, GnmStdError err);
108 GnmValue *value_new_error_NULL (GnmEvalPos const *pos);
109 GnmValue *value_new_error_DIV0 (GnmEvalPos const *pos);
110 GnmValue *value_new_error_VALUE (GnmEvalPos const *pos);
111 GnmValue *value_new_error_REF (GnmEvalPos const *pos);
112 GnmValue *value_new_error_NAME (GnmEvalPos const *pos);
113 GnmValue *value_new_error_NUM (GnmEvalPos const *pos);
114 GnmValue *value_new_error_NA (GnmEvalPos const *pos);
115 GnmValue *value_new_string (char const *str);
116 GnmValue *value_new_string_nocopy (char *str);
117 GnmValue *value_new_string_str (GOString *str);
118 GnmValue *value_new_cellrange_unsafe (GnmCellRef const *a, GnmCellRef const *b);
119 GnmValue *value_new_cellrange (GnmCellRef const *a, GnmCellRef const *b,
120 int eval_col, int eval_row);
121 GnmValue *value_new_cellrange_r (Sheet *sheet, GnmRange const *r);
122 GnmValue *value_new_cellrange_str (Sheet *sheet, char const *str);
123 GnmValue *value_new_cellrange_parsepos_str (GnmParsePos const *pp,
124 char const *str,
125 GnmExprParseFlags flags);
126 GnmValue *value_new_array (guint cols, guint rows);
127 GnmValue *value_new_array_empty (guint cols, guint rows);
128 GnmValue *value_new_array_non_init (guint cols, guint rows);
129 GnmValue *value_new_from_string (GnmValueType t, char const *str,
130 GOFormat *sf, gboolean translated);
132 void value_release (GnmValue *v);
133 void value_set_fmt (GnmValue *v, GOFormat const *fmt);
134 void value_dump (GnmValue const *v);
135 GnmValue *value_dup (GnmValue const *v);
137 gnm_float value_diff (GnmValue const *a, GnmValue const *b);
138 GnmValDiff value_compare (GnmValue const *a, GnmValue const *b,
139 gboolean case_sensitive);
140 GnmValDiff value_compare_no_cache (GnmValue const *a, GnmValue const *b,
141 gboolean case_sensitive);
142 int value_cmp (void const *ptr_a, void const *ptr_b);
143 int value_cmp_reverse (void const *ptr_a, void const *ptr_b);
144 gboolean value_equal (GnmValue const *a, GnmValue const *b);
145 guint value_hash (GnmValue const *v);
147 char const *value_peek_string (GnmValue const *v);
148 char *value_get_as_string (GnmValue const *v);
149 void value_get_as_gstring (GnmValue const *v, GString *target,
150 GnmConventions const *conv);
151 char *value_stringify (GnmValue const *v);
153 GnmValueType value_type_of (GnmValue const *v);
154 int value_get_as_int (GnmValue const *v);
155 gnm_float value_get_as_float (GnmValue const *v);
156 gboolean value_is_zero (GnmValue const *v);
157 GnmValue *value_coerce_to_number (GnmValue *v, gboolean *valid,
158 GnmEvalPos const *ep);
160 GnmValue *value_error_set_pos (GnmValueErr *err, GnmEvalPos const *pos);
161 GnmStdError value_error_classify (GnmValue const *v);
162 char const *value_error_name (GnmStdError err, gboolean translated);
164 gboolean value_get_as_bool (GnmValue const *v, gboolean *err);
165 gboolean value_get_as_checked_bool (GnmValue const *v);
166 GnmRangeRef const *value_get_rangeref (GnmValue const *v);
168 typedef struct {
169 GnmValue const *v; /* value at position */
170 int x, y; /* coordinates within input region */
171 GnmValue const *region; /* input region */
172 GnmEvalPos const *ep; /* context for region */
173 GnmCellIter const *cell_iter; /* non-NULL for ranges */
174 } GnmValueIter;
175 typedef GnmValue *(*GnmValueIterFunc) (GnmValueIter const *iter, gpointer user_data);
177 /* Area functions ( for VALUE_RANGE or VALUE_ARRAY ) */
178 GnmValue *value_area_foreach (GnmValue const *v, GnmEvalPos const *ep,
179 CellIterFlags flags,
180 GnmValueIterFunc func, gpointer user_data);
181 int value_area_get_width (GnmValue const *v, GnmEvalPos const *ep);
182 int value_area_get_height (GnmValue const *v, GnmEvalPos const *ep);
183 GnmValue const *value_area_fetch_x_y (GnmValue const *v, int x, int y,
184 GnmEvalPos const *ep);
185 GnmValue const *value_area_get_x_y (GnmValue const *v, int x, int y,
186 GnmEvalPos const *ep);
188 /* A zero integer, not to be freed or changed. */
189 extern GnmValue const *value_zero;
190 extern GnmValueErr const value_terminate_err;
191 #define VALUE_TERMINATE ((GnmValue *)&value_terminate_err)
193 void value_array_set (GnmValue *array, int col, int row, GnmValue *v);
196 /* Protected */
197 void value_init (void);
198 void value_shutdown (void);
200 G_END_DECLS
202 #endif /* _GNM_VALUE_H_ */