mirror of https://github.com/Gnucash/gnucash
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
4.4 KiB
117 lines
4.4 KiB
#ifndef GNUMERIC_RANGES_H
|
|
#define GNUMERIC_RANGES_H
|
|
|
|
#include "gnumeric.h"
|
|
|
|
/**
|
|
* range_equal:
|
|
* @a: First range
|
|
* @b: Second range
|
|
*
|
|
* NB. commutative, symmetric, and transitive.
|
|
*
|
|
* Returns: True if both ranges are equal.
|
|
**/
|
|
#define range_equal(a,b) ((a)->start.row == (b)->start.row && \
|
|
(a)->end.row == (b)->end.row && \
|
|
(a)->start.col == (b)->start.col && \
|
|
(a)->end.col == (b)->end.col)
|
|
|
|
/**
|
|
* range_overlap:
|
|
* @a: First range
|
|
* @b: Second range
|
|
*
|
|
* NB. commutative, symmetric, but not transitive.
|
|
*
|
|
* Returns: True if the ranges overlap at all.
|
|
**/
|
|
#define range_overlap(a,b) (((a)->end.row >= (b)->start.row) && \
|
|
((b)->end.row >= (a)->start.row) && \
|
|
((a)->end.col >= (b)->start.col) && \
|
|
((b)->end.col >= (a)->start.col))
|
|
|
|
/**
|
|
* range_contains:
|
|
* @r: range to operate on
|
|
* @x: column,
|
|
* @y: row co-ordinate
|
|
*
|
|
* Determine if a range contains a col,row co-ordinate.
|
|
*
|
|
* Return value: TRUE if co-ordinate contained.
|
|
**/
|
|
#define range_contains(r,x,y) (((y) <= (r)->end.row) && \
|
|
((y) >= (r)->start.row) && \
|
|
((x) >= (r)->start.col) && \
|
|
((x) <= (r)->end.col))
|
|
|
|
/*
|
|
* Quickly Test if a range is valid
|
|
*/
|
|
#define range_valid(r) ((r)->start.col <= (r)->end.col && \
|
|
(r)->start.row <= (r)->end.row)
|
|
|
|
GnmRange *range_init_full_sheet (GnmRange *r);
|
|
GnmRange *range_init_rangeref (GnmRange *range, GnmRangeRef const *rr);
|
|
GnmRange *range_init_value (GnmRange *range, GnmValue const *v);
|
|
GnmRange *range_init_cellpos (GnmRange *r, GnmCellPos const *start, GnmCellPos const *end);
|
|
|
|
GnmRange *range_init (GnmRange *r, int start_col, int start_row,
|
|
int end_col, int end_row);
|
|
GnmValue *range_parse (Sheet *sheet, char const *range, gboolean strict);
|
|
gboolean parse_range (char const *text, GnmRange *r);
|
|
void range_list_destroy (GSList *ranges);
|
|
|
|
int range_width (GnmRange const *r);
|
|
int range_height (GnmRange const *r);
|
|
gboolean range_is_singleton (GnmRange const *r);
|
|
gboolean range_is_infinite (GnmRange const *r);
|
|
gboolean range_is_full (GnmRange const *r, gboolean is_cols);
|
|
void range_clip_to_finite(GnmRange *range, Sheet *sheet);
|
|
gboolean range_contained (GnmRange const *a, GnmRange const *b);
|
|
gboolean range_adjacent (GnmRange const *a, GnmRange const *b);
|
|
GnmRange range_merge (GnmRange const *a, GnmRange const *b);
|
|
gboolean range_intersection (GnmRange *r,
|
|
GnmRange const *a,
|
|
GnmRange const *b);
|
|
void range_normalize (GnmRange *src);
|
|
GnmRange range_union (GnmRange const *a, GnmRange const *b);
|
|
void range_ensure_sanity (GnmRange *range);
|
|
gboolean range_is_sane (GnmRange const *range);
|
|
gboolean range_translate (GnmRange *range, int col_offset, int row_offset);
|
|
gboolean range_transpose (GnmRange *range, GnmCellPos const *origin);
|
|
|
|
/* TODO : Do these 2 belong here ? or in sheet.h
|
|
* Probably sheet.h but that is overfull.
|
|
*/
|
|
gboolean range_trim (Sheet const *sheet, GnmRange *r,
|
|
gboolean cols);
|
|
gboolean range_has_header (Sheet const *sheet, GnmRange const *src,
|
|
gboolean top, gboolean ignore_styles);
|
|
|
|
char const *range_name (GnmRange const *src);
|
|
void range_dump (GnmRange const *src, char const *suffix);
|
|
GnmRange *range_dup (GnmRange const *src);
|
|
|
|
GSList *range_split_ranges (GnmRange const *hard, GnmRange const *soft);
|
|
GSList *range_fragment (GnmRange const *a, GnmRange const *b);
|
|
void range_fragment_free (GSList *fragments);
|
|
|
|
GnmSheetRange *global_range_new (Sheet *sheet, GnmRange const *r);
|
|
GnmSheetRange *global_range_dup (GnmSheetRange const *src);
|
|
gboolean value_to_global_range (GnmValue const *v, GnmSheetRange *res);
|
|
void global_range_free (GnmSheetRange *gr);
|
|
gboolean global_range_overlap (GnmSheetRange const *a, GnmSheetRange const *b);
|
|
GnmValue *global_range_parse (Sheet *sheet, char const *range);
|
|
char *global_range_name (Sheet *sheet, GnmRange const *r);
|
|
gboolean global_range_contained (Sheet const *sheet,
|
|
GnmValue const *a, GnmValue const *b);
|
|
GSList *global_range_list_parse (Sheet *sheet, char const *str);
|
|
GnmValue *global_range_list_foreach (GSList *gr_list, GnmEvalPos const *ep,
|
|
CellIterFlags flags,
|
|
CellIterFunc handler,
|
|
gpointer closure);
|
|
|
|
#endif /* GNUMERIC_RANGES_H */
|