aboutsummaryrefslogtreecommitdiff
path: root/slice/slice.go
diff options
context:
space:
mode:
authorn-peugnet <n.peugnet@free.fr>2021-09-21 17:33:03 +0200
committern-peugnet <n.peugnet@free.fr>2021-09-21 17:33:03 +0200
commit91bdaf7ffa76dee079a07fd54fcaf1d0f84428f0 (patch)
tree9f851e6d6d17785a74633ebad821bd21b105b462 /slice/slice.go
parentc6d2be5823e643f1392a970daca3743fef00fde2 (diff)
downloaddna-backup-91bdaf7ffa76dee079a07fd54fcaf1d0f84428f0.tar.gz
dna-backup-91bdaf7ffa76dee079a07fd54fcaf1d0f84428f0.zip
store recipes incrementally
Diffstat (limited to 'slice/slice.go')
-rw-r--r--slice/slice.go28
1 files changed, 14 insertions, 14 deletions
diff --git a/slice/slice.go b/slice/slice.go
index 15be5dd..6d7cf10 100644
--- a/slice/slice.go
+++ b/slice/slice.go
@@ -4,25 +4,25 @@ import "reflect"
type Slice []interface{}
-type SliceDel int
+type Del int
-type SliceIns struct {
+type Ins struct {
Idx int
Value []interface{}
}
-type SlicePatch struct {
- Del []SliceDel
- Ins []SliceIns
+type Delta struct {
+ Del []Del
+ Ins []Ins
}
-func PatchSlice(source Slice, patch SlicePatch) (target Slice) {
+func Patch(source Slice, delta Delta) (target Slice) {
// apply Del part from patch to source into temp
- size := len(source) - len(patch.Del)
+ size := len(source) - len(delta.Del)
temp := make(Slice, size)
fill := 0
prev := 0
- for _, del := range patch.Del {
+ for _, del := range delta.Del {
di := int(del)
copy(temp[fill:], source[prev:di])
fill += di - prev
@@ -30,14 +30,14 @@ func PatchSlice(source Slice, patch SlicePatch) (target Slice) {
}
copy(temp[fill:], source[prev:])
// apply Ins part from patch to temp into target
- for _, ins := range patch.Ins {
+ for _, ins := range delta.Ins {
size += len(ins.Value)
}
target = make(Slice, size)
fill = 0
prev = 0
tpos := 0
- for _, ins := range patch.Ins {
+ for _, ins := range delta.Ins {
offset := ins.Idx - prev
copy(target[fill:], temp[tpos:tpos+offset])
fill += offset
@@ -49,7 +49,7 @@ func PatchSlice(source Slice, patch SlicePatch) (target Slice) {
return
}
-func DiffSlice(source Slice, target Slice) (patch SlicePatch) {
+func Diff(source Slice, target Slice) (delta Delta) {
var si, ti int
var found bool
for ; si < len(source); si++ {
@@ -57,18 +57,18 @@ func DiffSlice(source Slice, target Slice) (patch SlicePatch) {
found = reflect.DeepEqual(target[i], source[si])
if found {
if i != ti {
- patch.Ins = append(patch.Ins, SliceIns{ti, target[ti:i]})
+ delta.Ins = append(delta.Ins, Ins{ti, target[ti:i]})
}
ti = i + 1
break
}
}
if !found {
- patch.Del = append(patch.Del, SliceDel(si))
+ delta.Del = append(delta.Del, Del(si))
}
}
if ti < len(target) {
- patch.Ins = append(patch.Ins, SliceIns{ti, target[ti:]})
+ delta.Ins = append(delta.Ins, Ins{ti, target[ti:]})
}
return
}