Changeset a031dbb in subsurface


Ignore:
Timestamp:
Feb 2, 2017, 12:36:08 PM (8 weeks ago)
Author:
Dirk Hohndel <dirk@…>
Branches:
master
Children:
1d86620
Parents:
9959554
git-author:
Robert C. Helling <helling@…> (02/02/17 06:31:52)
git-committer:
Dirk Hohndel <dirk@…> (02/02/17 12:36:08)
Message:

When merging planned dives keep all cylinders

When merging a real dive with a planned dive (for comparison),
we should not try to be clever in merging similar cylinders,
rather keep the union of both cylinder sets as the two versions
of the dive might differ in exctly which gas and how much of it
was used.

Increase MAX_CYLINDERS to 20 to make room for this.

Signed-off-by: Robert C. Helling <helling@…>

Location:
core
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • core/dive.c

    rc1dc0c9 ra031dbb  
    20292029        memset(a->cylinder, 0, sizeof(a->cylinder));
    20302030
    2031         for (i = 0; i < MAX_CYLINDERS; i++) {
    2032                 int j;
    2033                 cylinder_t *cyl = b->cylinder + i;
    2034 
    2035                 j = find_cylinder_match(cyl, res->cylinder, used);
    2036                 mapping[i] = j;
    2037                 if (j < 0)
    2038                         continue;
    2039                 used |= 1 << j;
    2040                 merge_cylinder_info(cyl, res->cylinder + j);
    2041 
    2042                 /* If that renumbered the cylinders, fix it up! */
    2043                 if (i != j)
    2044                         renumber = 1;
    2045         }
    2046         if (renumber)
     2031        if (strcmp(b->dc.model, "planned dive")) {
     2032                // We merge two actual dive
     2033                for (i = 0; i < MAX_CYLINDERS; i++) {
     2034                        int j;
     2035                        cylinder_t *cyl = b->cylinder + i;
     2036
     2037                        j = find_cylinder_match(cyl, res->cylinder, used);
     2038                        mapping[i] = j;
     2039                        if (j < 0)
     2040                                continue;
     2041                        used |= 1 << j;
     2042                        merge_cylinder_info(cyl, res->cylinder + j);
     2043
     2044                        /* If that renumbered the cylinders, fix it up! */
     2045                        if (i != j)
     2046                                renumber = 1;
     2047                }
     2048                if (renumber)
     2049                        cylinder_renumber(b, mapping);
     2050        } else {
     2051                int j=0;
     2052                for (i = 0; i < MAX_CYLINDERS && j < MAX_CYLINDERS; i++) {
     2053                        if (is_cylinder_used(res, i))
     2054                                continue;
     2055
     2056                        while (!is_cylinder_used(b, j) && j < MAX_CYLINDERS - 1) {
     2057                                mapping[j] = 0;
     2058                                ++j;
     2059                        }
     2060                        memcpy(&res->cylinder[i], &b->cylinder[j], sizeof (b->cylinder[j]));
     2061                        mapping[j] = i;
     2062                        ++j;
     2063                }
     2064                while (j < MAX_CYLINDERS)
     2065                        mapping[j++] = 0;
    20472066                cylinder_renumber(b, mapping);
     2067        }
    20482068}
    20492069
     
    30013021        }
    30023022
     3023        if (!strcmp(a->dc.model, "planneed dive")) {
     3024                struct dive *tmp = a;
     3025                a = b;
     3026                b = tmp;
     3027        }
    30033028        res->when = dl ? dl->when : a->when;
    30043029        res->selected = a->selected || b->selected;
  • core/dive.h

    rc1dc0c9 ra031dbb  
    291291};
    292292
    293 #define MAX_CYLINDERS (8)
     293#define MAX_CYLINDERS (20)
    294294#define MAX_WEIGHTSYSTEMS (6)
    295295#define W_IDX_PRIMARY 0
Note: See TracChangeset for help on using the changeset viewer.