summaryrefslogtreecommitdiffstats
path: root/dive.c
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2015-02-10 06:31:37 -0800
committerGravatar Dirk Hohndel <dirk@hohndel.org>2015-02-10 15:04:29 -0800
commitd449ac3208a0e923aa5500295d2f4ab842dc84cc (patch)
tree9913fa043e48a93fee86f05b21f0c16bdea27e6c /dive.c
parent47dd0a1ec5230c30bdb809b0c61521ac8bd22fca (diff)
downloadsubsurface-d449ac3208a0e923aa5500295d2f4ab842dc84cc.tar.gz
Only update tags in the selected dives if they were changed
If current_dive and displayed_dive still have the same tags then we shouldn't touch the tags of other selected dives. Fixes #826 Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'dive.c')
-rw-r--r--dive.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/dive.c b/dive.c
index c120dde0e..aebeeca2e 100644
--- a/dive.c
+++ b/dive.c
@@ -2618,6 +2618,24 @@ bool taglist_contains(struct tag_entry *tag_list, const char *tag)
return false;
}
+// check if all tags in subtl are included in supertl (so subtl is a subset of supertl)
+static bool taglist_contains_all(struct tag_entry *subtl, struct tag_entry *supertl)
+{
+ while (subtl) {
+ if (!taglist_contains(supertl, subtl->tag->name))
+ return false;
+ subtl = subtl->next;
+ }
+ return true;
+
+}
+
+// if tl1 is both a subset and superset of tl2 they must be the same
+bool taglist_equal(struct tag_entry *tl1, struct tag_entry *tl2)
+{
+ return taglist_contains_all(tl1, tl2) && taglist_contains_all(tl2, tl1);
+}
+
// count the dives where the tag list contains the given tag
int count_dives_with_tag(const char *tag)
{