mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Dive list: unify sorting in core and Qt-model
Ultimately, we want to use a single dive-list and not replicate it in the Qt-model code. To this goal, let's start with using the same sort function. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
0cca36377b
commit
f836b9ae97
4 changed files with 58 additions and 7 deletions
|
|
@ -563,6 +563,7 @@ extern struct sample *add_sample(const struct sample *sample, int time, struct d
|
|||
extern void add_sample_pressure(struct sample *sample, int sensor, int mbar);
|
||||
extern int legacy_format_o2pressures(const struct dive *dive, const struct divecomputer *dc);
|
||||
|
||||
extern bool dive_less_than(const struct dive *a, const struct dive *b);
|
||||
extern void sort_table(struct dive_table *table);
|
||||
extern struct dive *fixup_dive(struct dive *dive);
|
||||
extern void fixup_dc_duration(struct divecomputer *dc);
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@
|
|||
* void mark_divelist_changed(int changed)
|
||||
* int unsaved_changes()
|
||||
* void remove_autogen_trips()
|
||||
* bool dive_less_than(const struct dive *a, const struct dive *b)
|
||||
* void sort_table(struct dive_table *table)
|
||||
* bool is_trip_before_after(const struct dive *dive, bool before)
|
||||
<<<<<<< HEAD
|
||||
|
|
@ -1682,16 +1683,42 @@ void clear_dive_file_data()
|
|||
saved_git_id = "";
|
||||
}
|
||||
|
||||
static int sortfn(const void *_a, const void *_b)
|
||||
/* This function defines the sort ordering of dives. The core
|
||||
* and the UI models should use the same sort function, which
|
||||
* should be stable. This is not crucial at the moment, as the
|
||||
* indices in core and UI are independent, but ultimately we
|
||||
* probably want to unify the models.
|
||||
* After editing a key used in this sort-function, the order of
|
||||
* the dives must be re-astablished.
|
||||
* Currently, this does a lexicographic sort on the (start-time, id)
|
||||
* tuple. "id" is a stable, strictly increasing unique number, that
|
||||
* is handed out when a dive is added to the system.
|
||||
* We might also consider sorting by end-time and other criteria,
|
||||
* but see the caveat above (editing means rearrangement of the dives).
|
||||
*/
|
||||
static int comp_dives(const struct dive *a, const struct dive *b)
|
||||
{
|
||||
const struct dive *a = (const struct dive *)*(void **)_a;
|
||||
const struct dive *b = (const struct dive *)*(void **)_b;
|
||||
|
||||
if (a->when < b->when)
|
||||
return -1;
|
||||
if (a->when > b->when)
|
||||
return 1;
|
||||
return 0;
|
||||
if (a->id < b->id)
|
||||
return -1;
|
||||
if (a->id > b->id)
|
||||
return 1;
|
||||
return 0; /* this should not happen for a != b */
|
||||
}
|
||||
|
||||
bool dive_less_than(const struct dive *a, const struct dive *b)
|
||||
{
|
||||
return comp_dives(a, b) < 0;
|
||||
}
|
||||
|
||||
static int sortfn(const void *_a, const void *_b)
|
||||
{
|
||||
const struct dive *a = (const struct dive *)*(const void **)_a;
|
||||
const struct dive *b = (const struct dive *)*(const void **)_b;
|
||||
return comp_dives(a, b);
|
||||
}
|
||||
|
||||
void sort_table(struct dive_table *table)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue