7 #include <parse-util.h>
8 #include <glib-object.h>
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
28 * This one lives only in old XML files and is understood by
29 * value_new_from_string.
31 #define VALUE_INTEGER ((GnmValueType)30)
35 GnmValueType
const type
;
38 struct _GnmValueBool
{
39 GnmValueType
const type
;
43 struct _GnmValueFloat
{
44 GnmValueType
const type
;
49 GnmValueType
const type
;
54 GnmValueType
const type
;
58 struct _GnmValueRange
{
59 GnmValueType
const type
;
63 struct _GnmValueArray
{
64 GnmValueType
const type
;
67 GnmValue
***vals
; /* Array [x][y] */
73 GnmValueFloat v_float
;
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)
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
,
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
);
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 */
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
,
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
);
197 void value_init (void);
198 void value_shutdown (void);
202 #endif /* _GNM_VALUE_H_ */