mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 05:00:20 +00:00
Dive list: implement trip_less_than function
As a step towards proper sorting, introduce a trip_less_than() function in core. It simply sorts by the first dive, which should be unique as dives may belong to only one trip. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
6b283e598a
commit
9d3a5fa997
2 changed files with 22 additions and 1 deletions
|
@ -556,6 +556,7 @@ 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 bool trip_less_than(const struct dive_trip *a, const struct dive_trip *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);
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
* int unsaved_changes()
|
||||
* void remove_autogen_trips()
|
||||
* bool dive_less_than(const struct dive *a, const struct dive *b)
|
||||
* bool trip_less_than(const struct dive_trip *a, const struct dive_trip *b)
|
||||
* void sort_table(struct dive_table *table)
|
||||
* bool is_trip_before_after(const struct dive *dive, bool before)
|
||||
* void delete_dive_from_table(struct dive_table *table, int idx)
|
||||
|
@ -758,7 +759,7 @@ void insert_trip(dive_trip_t *dive_trip)
|
|||
dive_trip_t *trip;
|
||||
|
||||
/* Walk the dive trip list looking for the right location.. */
|
||||
while ((trip = *p) != NULL && trip->when < dive_trip->when)
|
||||
while ((trip = *p) != NULL && trip_less_than(trip, dive_trip))
|
||||
p = &trip->next;
|
||||
|
||||
dive_trip->next = trip;
|
||||
|
@ -1741,6 +1742,25 @@ bool dive_less_than(const struct dive *a, const struct dive *b)
|
|||
return comp_dives(a, b) < 0;
|
||||
}
|
||||
|
||||
/* Trips are compared according to the first dive in the trip.
|
||||
* Even though it shouldn't happen, take care about "empty" trips.
|
||||
* Since a dive can only belong to one trip, no two trips should
|
||||
* compare as equal
|
||||
*/
|
||||
static int comp_trips(const struct dive_trip *a, const struct dive_trip *b)
|
||||
{
|
||||
if (a->dives.nr <= 0)
|
||||
return b->dives.nr <= 0 ? 0 : -1;
|
||||
if (b->dives.nr <= 0)
|
||||
return 1;
|
||||
return comp_dives(a->dives.dives[0], b->dives.dives[0]);
|
||||
}
|
||||
|
||||
bool trip_less_than(const struct dive_trip *a, const struct dive_trip *b)
|
||||
{
|
||||
return comp_trips(a, b) < 0;
|
||||
}
|
||||
|
||||
static int sortfn(const void *_a, const void *_b)
|
||||
{
|
||||
const struct dive *a = (const struct dive *)*(const void **)_a;
|
||||
|
|
Loading…
Reference in a new issue