blob: b948b836252836d00eb69b2c03f35dfdcc7126aa [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package interfaces
import (
"v.io/v23/security/access"
"v.io/x/ref/services/syncbase/common"
)
func (in Knowledge) DeepCopy() Knowledge {
out := make(Knowledge)
for p, inpgv := range in {
out[p] = inpgv.DeepCopy()
}
return out
}
func (in GenVector) DeepCopy() GenVector {
out := make(GenVector)
for id, gen := range in {
out[id] = gen
}
return out
}
// Compare returns an integer comparing two generation vectors. The result will
// be 0 if a==b, -1 if a < b, +1 if a > b and +2 if a and b are uncomparable.
func (a GenVector) Compare(b GenVector) int {
res := -2
if len(a) == 0 && len(b) == 0 {
return 0
}
for aid, agen := range a {
bgen, ok := b[aid]
resCur := 0
if agen > bgen || !ok {
resCur = 1
} else if agen < bgen {
resCur = -1
}
if res == -2 || res == 0 {
// Initialize/overwrite safely with the curent result.
res = resCur
} else if res != resCur && resCur != 0 {
// Uncomparable, since some elements are less and others
// are greater.
return 2
}
}
for bid := range b {
if _, ok := a[bid]; ok {
continue
}
if res == 1 {
// Missing elements. So a cannot be greater than b.
return 2
}
return -1
}
return res
}
var (
_ common.PermserData = (*CollectionPerms)(nil)
)
func (perms *CollectionPerms) GetPerms() access.Permissions {
return access.Permissions(*perms)
}