summary |
shortlog |
log |
commit | commitdiff |
review |
tree
raw |
patch |
inline | side by side (from parent 1:
13352e4)
Reorder arguments being passed in so we can use variadic
arguments for nodes. This allows us to make the code more
concise by leaving array allocation up to the compiler.
For root nodes reuse an empty array instance, hosted in
CNode instead of allocating a new one for each new TrieMap.
Change-Id: Ic0574917d5d38c62b94594d1bce27a731c90838c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
package org.opendaylight.yangtools.triemap;
final class CNode<K, V> extends CNodeBase<K, V> {
package org.opendaylight.yangtools.triemap;
final class CNode<K, V> extends CNodeBase<K, V> {
+ private static final BasicNode[] EMPTY_ARRAY = new BasicNode[0];
final int bitmap;
final BasicNode[] array;
final Gen gen;
final int bitmap;
final BasicNode[] array;
final Gen gen;
- CNode(final int bitmap, final BasicNode[] array, final Gen gen) {
+ CNode(final Gen gen) {
+ this(gen, 0, EMPTY_ARRAY);
+ }
+
+ private CNode(final Gen gen, final int bitmap, final BasicNode... array) {
this.bitmap = bitmap;
this.array = array;
this.gen = gen;
this.bitmap = bitmap;
this.array = array;
this.gen = gen;
BasicNode[] narr = new BasicNode[len];
System.arraycopy(array, 0, narr, 0, len);
narr[pos] = nn;
BasicNode[] narr = new BasicNode[len];
System.arraycopy(array, 0, narr, 0, len);
narr[pos] = nn;
- return new CNode<>(bitmap, narr, gen);
+ return new CNode<>(gen, bitmap, narr);
}
CNode<K, V> removedAt(final int pos, final int flag, final Gen gen) {
}
CNode<K, V> removedAt(final int pos, final int flag, final Gen gen) {
BasicNode[] narr = new BasicNode[len - 1];
System.arraycopy(arr, 0, narr, 0, pos);
System.arraycopy(arr, pos + 1, narr, pos, len - pos - 1);
BasicNode[] narr = new BasicNode[len - 1];
System.arraycopy(arr, 0, narr, 0, pos);
System.arraycopy(arr, pos + 1, narr, pos, len - pos - 1);
- return new CNode<>(bitmap ^ flag, narr, gen);
+ return new CNode<>(gen, bitmap ^ flag, narr);
}
CNode<K, V> insertedAt(final int pos, final int flag, final BasicNode nn, final Gen gen) {
}
CNode<K, V> insertedAt(final int pos, final int flag, final BasicNode nn, final Gen gen) {
System.arraycopy(array, 0, narr, 0, pos);
narr [pos] = nn;
System.arraycopy(array, pos, narr, pos + 1, len - pos);
System.arraycopy(array, 0, narr, 0, pos);
narr [pos] = nn;
System.arraycopy(array, pos, narr, pos + 1, len - pos);
- return new CNode<>(bmp | flag, narr, gen);
+ return new CNode<>(gen, bmp | flag, narr);
- return new CNode<>(bitmap, narr, ngen);
+ return new CNode<>(ngen, bitmap, narr);
}
private BasicNode resurrect(final INode<K, V> inode, final Object inodemain) {
}
private BasicNode resurrect(final INode<K, V> inode, final Object inodemain) {
- return new CNode<K, V> (bmp, tmparray, gen).toContracted (lev);
+ return new CNode<K, V>(gen, bmp, tmparray).toContracted(lev);
if (xidx == yidx) {
INode<K, V> subinode = new INode<>(gen, dual(x, xhc, y, yhc, lev + 5, gen));
if (xidx == yidx) {
INode<K, V> subinode = new INode<>(gen, dual(x, xhc, y, yhc, lev + 5, gen));
- return new CNode<>(bmp, new BasicNode[] { subinode }, gen);
+ return new CNode<>(gen, bmp, subinode);
} else {
if (xidx < yidx) {
} else {
if (xidx < yidx) {
- return new CNode<>(bmp, new BasicNode[] { x, y }, gen);
+ return new CNode<>(gen, bmp, x, y);
- return new CNode<>(bmp, new BasicNode[] { y, x }, gen);
+ return new CNode<>(gen, bmp, y, x);
// } while (obj != TrieMapSerializationEnd);
// }
// } while (obj != TrieMapSerializationEnd);
// }
private static <K,V> INode<K,V> newRootNode() {
final Gen gen = new Gen();
private static <K,V> INode<K,V> newRootNode() {
final Gen gen = new Gen();
- final CNode<K, V> cn = new CNode<>(0, new BasicNode[] {}, gen);
- return new INode<>(gen, cn);
+ return new INode<>(gen, new CNode<>(gen));
}
final boolean CAS_ROOT (final Object ov, final Object nv) {
}
final boolean CAS_ROOT (final Object ov, final Object nv) {