public Object getValue(){ return val(); }
public Object getValue(){ return val(); }
private void tryAdvance() { while ((iterator == null || !iterator.hasNext()) && parentIterator.hasNext()) { MapEntry entry = (MapEntry) parentIterator.next(); ISet set = (ISet) entry.val(); long fullOffset = offset + ((Long)entry.key()) << log2LeafSize; iterator = set == null ? null : set.elements(fullOffset, reverse); } }
public ISet intersection(final long epoch, ISet sv) { IntSet s = (IntSet) sv; Iterator i1 = map.iterator(INode.IterationType.ENTRIES, false); Iterator i2 = s.map.iterator(INode.IterationType.ENTRIES, false); // one is empty, so is the intersection if (!i1.hasNext() || !i2.hasNext()) { return new IntSet(leafSize); } INode node = Nodes.Empty.EMPTY; MapEntry e1 = (MapEntry) i1.next(); MapEntry e2 = (MapEntry) i2.next(); while (true) { long k1 = (Long) e1.key(); long k2 = (Long) e2.key(); if (k1 == k2 && e1.val() != null && e2.val() != null) { node = node.assoc(k1, epoch, null, ((ISet)e1.val()).intersection(epoch, (ISet)e2.val())); if (!i1.hasNext() || !i2.hasNext()) break; e1 = (MapEntry) i1.next(); e2 = (MapEntry) i2.next(); } else if (k1 < k2) { if (!i1.hasNext()) break; e1 = (MapEntry) i1.next(); } else { if (!i2.hasNext()) break; e2 = (MapEntry) i2.next(); } } return new IntSet(leafSize, log2LeafSize, node); }
long k2 = (Long) e2.key(); if (k1 == k2 && e1.val() != null && e2.val() != null) { node = node.assoc(k1, epoch, null, ((ISet)e1.val()).difference(epoch, (ISet) e2.val())); if (!i1.hasNext() || !i2.hasNext()) break; e1 = (MapEntry) i1.next(); e2 = (MapEntry) i2.next(); } else if (k1 <= k2 && e1.val() != null) { node = node.assoc(k1, epoch, null, e1.val()); if (!i1.hasNext()) break; e1 = (MapEntry) i1.next(); } else { if (!i2.hasNext()) { node = node.assoc(k1, epoch, null, e1.val()); break; node = node.assoc((Long)e1.key(), epoch, null, e1.val());
MapEntry me = (MapEntry)kv; name = me.key().toString(); val = me.val(); } else { throw new ArgumentException("Map element of invalid datatype: " + kv.getClass());