ssdiff: move comparison engine into its own file.
[gnumeric.git] / src / ranges.h
blob35bd5be3667c07feac1a9c40bea2d02b01c1382d
1 /* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
2 #ifndef _GNM_RANGES_H_
3 # define _GNM_RANGES_H_
5 #include "gnumeric.h"
6 #include <glib-object.h>
8 G_BEGIN_DECLS
10 /**
11 * range_equal:
12 * @a: First range
13 * @b: Second range
15 * NB. commutative, symmetric, and transitive.
17 * Returns: True if both ranges are equal.
18 **/
19 #define range_equal(a,b) ((a)->start.row == (b)->start.row && \
20 (a)->end.row == (b)->end.row && \
21 (a)->start.col == (b)->start.col && \
22 (a)->end.col == (b)->end.col)
24 GType gnm_range_get_type (void); /* GBoxedType */
25 GnmRange *gnm_range_dup (GnmRange const *r);
26 gboolean gnm_range_equal (GnmRange const *a, GnmRange const *b);
27 int gnm_range_compare (GnmRange const *a, GnmRange const *b);
29 /**
30 * range_overlap:
31 * @a: First range
32 * @b: Second range
34 * NB. commutative, symmetric, but not transitive.
36 * Returns: True if the ranges overlap at all.
37 **/
38 #define range_overlap(a,b) (((a)->end.row >= (b)->start.row) && \
39 ((b)->end.row >= (a)->start.row) && \
40 ((a)->end.col >= (b)->start.col) && \
41 ((b)->end.col >= (a)->start.col))
43 /**
44 * range_contains:
45 * @r: range to operate on
46 * @x: column,
47 * @y: row co-ordinate
49 * Determine if a range contains a col,row co-ordinate.
51 * Return value: TRUE if co-ordinate contained.
52 **/
53 #define range_contains(r,x,y) (((y) <= (r)->end.row) && \
54 ((y) >= (r)->start.row) && \
55 ((x) >= (r)->start.col) && \
56 ((x) <= (r)->end.col))
59 * Quickly Test if a range is valid
61 #define range_valid(r) ((r)->start.col <= (r)->end.col && \
62 (r)->start.row <= (r)->end.row)
64 #define range_fragment_free(f) g_slist_free_full ((f), g_free)
66 GnmRange *range_init_full_sheet (GnmRange *r, Sheet const *sheet);
67 GnmRange *range_init_cols (GnmRange *r, Sheet const *sheet,
68 int start_col, int end_col);
69 GnmRange *range_init_rows (GnmRange *r, Sheet const *sheet,
70 int start_row, int end_row);
71 GnmRange *range_init_invalid (GnmRange *r);
72 GnmRange *range_init_rangeref (GnmRange *r, GnmRangeRef const *rr);
73 GnmRange *range_init_value (GnmRange *r, GnmValue const *v);
74 GnmRange *range_init_cellpos (GnmRange *r, GnmCellPos const *pos);
75 GnmRange *range_init_cellpos_size (GnmRange *r, GnmCellPos const *start,
76 int cols, int rows);
77 GnmRange *range_init (GnmRange *r, int start_col, int start_row,
78 int end_col, int end_row);
79 gboolean range_parse (GnmRange *r, char const *text,
80 GnmSheetSize const *ss);
82 void range_list_destroy (GSList *ranges);
84 int range_width (GnmRange const *r);
85 int range_height (GnmRange const *r);
86 gboolean range_is_singleton (GnmRange const *r);
87 gboolean range_is_full (GnmRange const *r, Sheet const *sheet, gboolean horiz);
88 void range_clip_to_finite(GnmRange *range, Sheet *sheet);
89 gboolean range_contained (GnmRange const *a, GnmRange const *b);
90 gboolean range_intersection (GnmRange *r,
91 GnmRange const *a,
92 GnmRange const *b);
93 void range_normalize (GnmRange *src);
94 GnmRange range_union (GnmRange const *a, GnmRange const *b);
95 void range_ensure_sanity (GnmRange *range, Sheet const *sheet);
96 gboolean range_is_sane (GnmRange const *range);
97 gboolean range_translate (GnmRange *range, Sheet const *sheet,
98 int col_offset, int row_offset);
99 gboolean range_transpose (GnmRange *range, Sheet const *sheet,
100 GnmCellPos const *origin);
102 char const *range_as_string (GnmRange const *r);
103 void range_dump (GnmRange const *r, char const *suffix);
105 GSList *range_split_ranges (GnmRange const *hard, GnmRange const *soft);
106 GSList *range_fragment (GnmRange const *a, GnmRange const *b);
108 GType gnm_sheet_range_get_type (void); /* GBoxedType */
109 GnmSheetRange *gnm_sheet_range_new (Sheet *sheet, GnmRange const *r);
110 void gnm_sheet_range_free (GnmSheetRange *r);
111 gboolean gnm_sheet_range_from_value (GnmSheetRange *r, GnmValue const *v);
112 gboolean gnm_sheet_range_overlap (GnmSheetRange const *a, GnmSheetRange const *b);
113 GnmSheetRange *gnm_sheet_range_dup (GnmSheetRange const *sr);
114 gboolean gnm_sheet_range_equal (GnmSheetRange const *a,
115 GnmSheetRange const *b);
117 char *global_range_name (Sheet const *sheet, GnmRange const *r);
118 char *undo_cell_pos_name (Sheet const *sheet, GnmCellPos const *pos);
119 char *undo_range_name (Sheet const *sheet, GnmRange const *r);
120 char *undo_range_list_name (Sheet const *sheet, GSList const *ranges);
122 GSList *global_range_list_parse (Sheet *sheet, char const *str);
123 GnmValue *global_range_list_foreach (GSList *gr_list, GnmEvalPos const *ep,
124 CellIterFlags flags,
125 CellIterFunc handler,
126 gpointer closure);
127 gboolean global_range_contained (Sheet const *sheet,
128 GnmValue const *a, GnmValue const *b);
130 G_END_DECLS
132 #endif /* _GNM_RANGES_H_ */