mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Do better cylinder information management
Instead of just tracking gasmix, track the size and workng pressure of the cylinder too. And use "cylinder" instead of "tank" throughout. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
c1bed52a77
commit
b176daf6d6
5 changed files with 183 additions and 89 deletions
41
dive.c
41
dive.c
|
|
@ -42,7 +42,7 @@ struct dive *fixup_dive(struct dive *dive)
|
|||
struct sample *sample = dive->sample + i;
|
||||
int time = sample->time.seconds;
|
||||
int depth = sample->depth.mm;
|
||||
int press = sample->tankpressure.mbar;
|
||||
int press = sample->cylinderpressure.mbar;
|
||||
int temp = sample->temperature.mkelvin;
|
||||
|
||||
if (lastdepth)
|
||||
|
|
@ -168,10 +168,10 @@ add_sample_b:
|
|||
sample.depth = as->depth;
|
||||
if (as->temperature.mkelvin)
|
||||
sample.temperature = as->temperature;
|
||||
if (as->tankpressure.mbar)
|
||||
sample.tankpressure = as->tankpressure;
|
||||
if (as->tankindex)
|
||||
sample.tankindex = as->tankindex;
|
||||
if (as->cylinderpressure.mbar)
|
||||
sample.cylinderpressure = as->cylinderpressure;
|
||||
if (as->cylinderindex)
|
||||
sample.cylinderindex = as->cylinderindex;
|
||||
|
||||
res = add_sample(&sample, at, res);
|
||||
|
||||
|
|
@ -199,6 +199,27 @@ static char *merge_text(const char *a, const char *b)
|
|||
return res;
|
||||
}
|
||||
|
||||
/* Pick whichever has any info (if either). Prefer 'a' */
|
||||
static void merge_cylinder_type(cylinder_type_t *res, cylinder_type_t *a, cylinder_type_t *b)
|
||||
{
|
||||
if (a->size.mliter)
|
||||
b = a;
|
||||
*res = *b;
|
||||
}
|
||||
|
||||
static void merge_cylinder_mix(gasmix_t *res, gasmix_t *a, gasmix_t *b)
|
||||
{
|
||||
if (a->o2.permille)
|
||||
b = a;
|
||||
*res = *b;
|
||||
}
|
||||
|
||||
static void merge_cylinder_info(cylinder_t *res, cylinder_t *a, cylinder_t *b)
|
||||
{
|
||||
merge_cylinder_type(&res->type, &a->type, &b->type);
|
||||
merge_cylinder_mix(&res->gasmix, &a->gasmix, &b->gasmix);
|
||||
}
|
||||
|
||||
/*
|
||||
* This could do a lot more merging. Right now it really only
|
||||
* merges almost exact duplicates - something that happens easily
|
||||
|
|
@ -230,12 +251,8 @@ struct dive *try_to_merge(struct dive *a, struct dive *b)
|
|||
MERGE_MIN(res, a, b, watertemp.mkelvin);
|
||||
MERGE_MAX(res, a, b, beginning_pressure.mbar);
|
||||
MERGE_MAX(res, a, b, end_pressure.mbar);
|
||||
for (i = 0; i < MAX_MIXES; i++) {
|
||||
if (a->gasmix[i].o2.permille) {
|
||||
res->gasmix[i] = a->gasmix[i];
|
||||
continue;
|
||||
}
|
||||
res->gasmix[i] = b->gasmix[i];
|
||||
}
|
||||
for (i = 0; i < MAX_CYLINDERS; i++)
|
||||
merge_cylinder_info(res->cylinder+i, a->cylinder + i, b->cylinder + i);
|
||||
|
||||
return merge_samples(res, a, b, 0);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue