From 51b16ad57dddc0c111c59e23af9cdcffcd9ecd32 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Mon, 1 Aug 2016 18:35:13 +0200 Subject: [PATCH] Add handy functions to backend.IDSet --- src/restic/backend/idset.go | 41 +++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/restic/backend/idset.go b/src/restic/backend/idset.go index 12307219c..4bfe52ca2 100644 --- a/src/restic/backend/idset.go +++ b/src/restic/backend/idset.go @@ -60,6 +60,47 @@ func (s IDSet) Equals(other IDSet) bool { return true } +// Merge adds the blobs in other to the current set. +func (s IDSet) Merge(other IDSet) { + for id := range other { + s.Insert(id) + } +} + +// Intersect returns a new set containing the IDs that are present in both sets. +func (s IDSet) Intersect(other IDSet) (result IDSet) { + result = NewIDSet() + + set1 := s + set2 := other + + // iterate over the smaller set + if len(set2) < len(set1) { + set1, set2 = set2, set1 + } + + for id := range set1 { + if set2.Has(id) { + result.Insert(id) + } + } + + return result +} + +// Sub returns a new set containing all IDs that are present in s but not in +// other. +func (s IDSet) Sub(other IDSet) (result IDSet) { + result = NewIDSet() + for id := range s { + if !other.Has(id) { + result.Insert(id) + } + } + + return result +} + func (s IDSet) String() string { str := s.List().String() if len(str) < 2 {