From c32c8cda842dc81a11ec3c9cd46caed2a96920ad Mon Sep 17 00:00:00 2001 From: Matt Jaffee Date: Thu, 28 Feb 2019 14:16:56 -0600 Subject: [PATCH] only write changed values to op log --- roaring/roaring.go | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/roaring/roaring.go b/roaring/roaring.go index 7a61bab1f..1e0f36886 100644 --- a/roaring/roaring.go +++ b/roaring/roaring.go @@ -182,25 +182,25 @@ func (b *Bitmap) AddN(a ...uint64) (changed int, err error) { if len(a) == 0 { return 0, nil } - if b.OpWriter != nil { - op := &op{ - typ: opTypeAddBatch, - values: a, - } - if err := b.writeOp(op); err != nil { - return 0, errors.Wrap(err, "writing to op log") - } - } - // TODO consider applying changes in-memory first and then only writing the - // changed bits to op log? for _, v := range a { // Apply to the in-memory bitmap. if b.DirectAdd(v) { + a[changed] = v changed++ } } + if b.OpWriter != nil { + op := &op{ + typ: opTypeAddBatch, + values: a[:changed], + } + if err := b.writeOp(op); err != nil { + return 0, errors.Wrap(err, "writing to op log") + } + } + return changed, nil } @@ -243,25 +243,25 @@ func (b *Bitmap) RemoveN(a ...uint64) (changed int, err error) { if len(a) == 0 { return 0, nil } - if b.OpWriter != nil { - op := &op{ - typ: opTypeRemoveBatch, - values: a, - } - if err := b.writeOp(op); err != nil { - return 0, errors.Wrap(err, "writing to op log") - } - } - // TODO consider applying changes in-memory first and then only writing the - // changed bits to op log? for _, v := range a { // Apply to the in-memory bitmap. if b.remove(v) { + a[changed] = v changed++ } } + if b.OpWriter != nil { + op := &op{ + typ: opTypeRemoveBatch, + values: a[:changed], + } + if err := b.writeOp(op); err != nil { + return 0, errors.Wrap(err, "writing to op log") + } + } + return changed, nil }