/** An alias for {@link #length()}. * @return the interval length. */ public long size64() { return length(); }
/** An alias for {@link #length()} miminised with {@link Integer#MAX_VALUE}. * @return the interval length minimised with {@link Integer#MAX_VALUE}. */ @Override public int size() { return (int)Math.min(length(), Integer.MAX_VALUE); }
/** Returns an iterator over the integers in this interval larger than or equal to a given integer. * * @param from the starting integer. * @return an integer iterator over the elements in this interval. */ @Override public LongBidirectionalIterator iterator(final long from) { if (this == EMPTY_INTERVAL) return LongIterators.EMPTY_ITERATOR; // Note that fromTo() does NOT include the last integer. final LongBidirectionalIterator i = LongIterators.fromTo(left, right + 1); if (from >= left) { long toSkip = Math.min(length(), from + 1 - left); while(toSkip > 0) toSkip -= i.skip((int)Math.min(1 << 30, toSkip)); } return i; }
else if (o instanceof LongSortedSet) { // For sorted sets, we require the same order LongSortedSet s = (LongSortedSet) o; if (s.size() != length()) return false; long n = length(); LongIterator i = iterator(), j = s.iterator(); while(n-- != 0) if (i.nextLong() != j.nextLong()) return false; if (s.size() != length()) return false; long n = length(); LongIterator i = iterator(); while(n-- != 0) if (! s.contains(i.nextLong())) return false;
/** Returns a {@link MultiTermIndexIterator} over all terms starting with the given prefix, * provided their number does not exceed the given limit and that this index has a {@link #prefixMap}. */ public IndexIterator documents( final CharSequence prefix, final int limit ) throws IOException, TooManyTermsException { if ( prefixMap != null ) { final LongInterval interval = prefixMap.rangeMap().get( prefix ); if ( interval == LongIntervals.EMPTY_INTERVAL ) return new Index.EmptyIndexIterator(); final IndexIterator result; if ( interval.length() > limit ) throw new TooManyTermsException( interval.length() ); if ( interval.length() == 1 ) result = documents( interval.left ); else { IndexIterator[] baseIterator = new IndexIterator[ (int)interval.length() ]; int k = 0; for( LongIterator i = interval.iterator(); i.hasNext(); ) baseIterator[ k++ ] = documents( i.nextLong() ); result = MultiTermIndexIterator.getInstance( this, baseIterator ); } result.term( prefix + "*" ); return result; } else throw new UnsupportedOperationException( "Index " + this + " has no prefix map" ); }
final IndexIterator result; if ( interval.length() > limit ) throw new TooManyTermsException( interval.length() ); if ( interval.length() == 1 ) result = documents( interval.left ); else { IndexIterator[] baseIterator = new IndexIterator[ (int)interval.length()]; int k = 0; for( LongIterator i = interval.iterator(); i.hasNext(); ) baseIterator[ k++ ] = documents( i.nextLong() );
@Override public MutableString get(final Object o) { final LongInterval interval = (LongInterval)o; final MutableString prefix = new MutableString(); if (interval == LongIntervals.EMPTY_INTERVAL || interval.left < 0 || interval.right < 0) throw new IllegalArgumentException(); getTerm(interval.left, prefix); if (interval.length() == 1) return prefix; final MutableString s = getTerm(interval.right, new MutableString()); final int l = Math.min(prefix.length(), s.length()); int i; for(i = 0; i < l; i++) if (s.charAt(i) != prefix.charAt(i)) break; return prefix.length(i); }