提交 d6b7a8d9 authored 作者: Andrei Tokar's avatar Andrei Tokar

style, code de-duplication

上级 c245dccc
...@@ -48,8 +48,8 @@ public class MVMap<K, V> extends AbstractMap<K, V> ...@@ -48,8 +48,8 @@ public class MVMap<K, V> extends AbstractMap<K, V>
private final DataType valueType; private final DataType valueType;
private final int keysPerPage; private final int keysPerPage;
private final boolean singleWriter; private final boolean singleWriter;
private final K keysBuffer[]; private final K[] keysBuffer;
private final V valuesBuffer[]; private final V[] valuesBuffer;
/** /**
...@@ -618,16 +618,7 @@ public class MVMap<K, V> extends AbstractMap<K, V> ...@@ -618,16 +618,7 @@ public class MVMap<K, V> extends AbstractMap<K, V>
return 0; return 0;
} }
assert p.getKeyCount() > 0; assert p.getKeyCount() > 0;
@SuppressWarnings("unchecked") return rewritePage(p) ? 0 : 1;
K key = (K) p.getKey(0);
V value = get(key);
if (value != null) {
if (isClosed()) {
return 0;
}
replace(key, value, value);
}
return 1;
} }
int writtenPageCount = 0; int writtenPageCount = 0;
for (int i = 0; i < getChildPageCount(p); i++) { for (int i = 0; i < getChildPageCount(p); i++) {
...@@ -657,14 +648,8 @@ public class MVMap<K, V> extends AbstractMap<K, V> ...@@ -657,14 +648,8 @@ public class MVMap<K, V> extends AbstractMap<K, V>
while (!p2.isLeaf()) { while (!p2.isLeaf()) {
p2 = p2.getChildPage(0); p2 = p2.getChildPage(0);
} }
@SuppressWarnings("unchecked") if (rewritePage(p2)) {
K key = (K) p2.getKey(0); return 0;
V value = get(key);
if (value != null) {
if (isClosed()) {
return 0;
}
replace(key, value, value);
} }
writtenPageCount++; writtenPageCount++;
} }
...@@ -672,6 +657,19 @@ public class MVMap<K, V> extends AbstractMap<K, V> ...@@ -672,6 +657,19 @@ public class MVMap<K, V> extends AbstractMap<K, V>
return writtenPageCount; return writtenPageCount;
} }
private boolean rewritePage(Page p) {
@SuppressWarnings("unchecked")
K key = (K) p.getKey(0);
V value = get(key);
if (value != null) {
if (isClosed()) {
return true;
}
replace(key, value, value);
}
return false;
}
/** /**
* Get a cursor to iterate over a number of keys and values. * Get a cursor to iterate over a number of keys and values.
* *
...@@ -1221,8 +1219,8 @@ public class MVMap<K, V> extends AbstractMap<K, V> ...@@ -1221,8 +1219,8 @@ public class MVMap<K, V> extends AbstractMap<K, V>
if (p.getKeyCount() == 0) { if (p.getKeyCount() == 0) {
p = page; p = page;
} else { } else {
Object keys[] = new Object[] { key }; Object[] keys = new Object[] { key };
Page.PageReference children[] = new Page.PageReference[] { Page.PageReference[] children = new Page.PageReference[] {
new Page.PageReference(p), new Page.PageReference(p),
new Page.PageReference(page)}; new Page.PageReference(page)};
p = Page.createNode(this, keys, children, p.getTotalCount() + page.getTotalCount(), 0); p = Page.createNode(this, keys, children, p.getTotalCount() + page.getTotalCount(), 0);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论