From 4fdcf51467a1af895483b4d29dde54432c286c39 Mon Sep 17 00:00:00 2001 From: "Paul W. Homer" Date: Thu, 30 Mar 2017 11:51:11 -0400 Subject: [PATCH] Refactored the iterator to follow Go constructor conventions. --- mem_db.go | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/mem_db.go b/mem_db.go index 5307d1a7a..c80060526 100644 --- a/mem_db.go +++ b/mem_db.go @@ -77,21 +77,8 @@ type memDBIterator struct { db *MemDB } -func (it *memDBIterator) Create(db *MemDB) *memDBIterator { - db.mtx.Lock() - defer db.mtx.Unlock() - - if it == nil { - it = &memDBIterator{} - } - it.db = db - it.last = -1 - - // unfortunately we need a copy of all of the keys - for key, _ := range db.db { - it.keys = append(it.keys, key) - } - return it +func newMemDBIterator() *memDBIterator { + return &memDBIterator{} } func (it *memDBIterator) Next() bool { @@ -114,8 +101,18 @@ func (it *memDBIterator) Value() []byte { } func (db *MemDB) Iterator() Iterator { - var it *memDBIterator - return it.Create(db) + it := newMemDBIterator() + it.db = db + it.last = -1 + + db.mtx.Lock() + defer db.mtx.Unlock() + + // unfortunately we need a copy of all of the keys + for key, _ := range db.db { + it.keys = append(it.keys, key) + } + return it } func (db *MemDB) NewBatch() Batch {