Bladeren bron

Merge pull request #145 from vmarkovtsev/master

Use RBTree iterators safely
Vadim Markovtsev 6 jaren geleden
bovenliggende
commit
9ec8a943c6
2 gewijzigde bestanden met toevoegingen van 5 en 2 verwijderingen
  1. 2 2
      internal/burndown/file.go
  2. 3 0
      internal/rbtree/rbtree.go

+ 2 - 2
internal/burndown/file.go

@@ -209,7 +209,7 @@ func (file *File) Update(time int, pos int, insLength int, delLength int) {
 		// insert our new interval
 		if iter.Item().Value == time && iter.Item().Key-delLength == pos {
 			prev := iter.Prev()
-			if prev.Item().Value != time {
+			if prev.NegativeLimit() || prev.Item().Value != time {
 				iter.Item().Key = pos
 			} else {
 				tree.DeleteWithIterator(iter)
@@ -245,7 +245,7 @@ func (file *File) Update(time int, pos int, insLength int, delLength int) {
 			// recover the beginning
 			tree.Insert(rbtree.Item{Key: pos, Value: time})
 		}
-	} else if (pos > origin.Key && previous.Value != origin.Value) ||
+	} else if (pos > origin.Key && previous != nil && previous.Value != origin.Value) ||
 		(pos == origin.Key && origin.Value != prevOrigin.Value) ||
 		pos == 0 {
 		// continue the original interval

+ 3 - 0
internal/rbtree/rbtree.go

@@ -257,6 +257,9 @@ func (iter Iterator) NegativeLimit() bool {
 //
 // REQUIRES: !iter.Limit() && !iter.NegativeLimit()
 func (iter Iterator) Item() *Item {
+	if iter.Limit() || iter.NegativeLimit() {
+		return nil
+	}
 	return &iter.node.item
 }