@Override public View viewGt(byte[] key) { keyCheck(key); if (startRangeCompare(key) < 0) { return this; } return new BoundedView(mSource, key, mEnd, mMode | START_EXCLUSIVE); }
@Override public LockResult random(byte[] lowKey, byte[] highKey) throws IOException { LockResult result = mSource.random (mView.adjustLowKey(lowKey),mView.adjustHighKey(highKey)); mOutOfBounds = false; return result; }
@Override public View viewLt(byte[] key) { keyCheck(key); if (endRangeCompare(key) > 0) { return this; } return new BoundedView(mSource, mStart, key, mMode | END_EXCLUSIVE); }
@Override boolean inRange(byte[] key) { return startRangeCompare(key) >= 0 && endRangeCompare(key) <= 0; }
private View nonView() { return new TransformedView (new BoundedView(mSource, Utils.EMPTY_BYTES, Utils.EMPTY_BYTES, BoundedView.START_EXCLUSIVE | BoundedView.END_EXCLUSIVE), mTransformer); }
/** * @param key must not be null * @return {@literal <0 if less than end (in range), 0 if equal (in range), >0 if higher} */ int endRangeCompare(byte[] key) { byte[] end = mEnd; return end == null ? -1 : endRangeCompare(end, key); }
/** * @param key must not be null * @return <0 if less than start, 0 if equal (in range), >0 if higher (in range) */ int startRangeCompare(byte[] key) { byte[] start = mStart; return start == null ? 1 : startRangeCompare(start, key); }
@Override public View viewGe(byte[] key) { return BoundedView.viewGe(this, key); }
static View viewPrefix(View view, byte[] prefix, int trim) { prefixCheck(prefix, trim); byte[] end = prefix.clone(); int mode; if (increment(end, 0, end.length)) { mode = END_EXCLUSIVE; } else { // Prefix is highest possible, so no need for an end bound. end = null; mode = 0; } view = new BoundedView(view, prefix, end, mode); if (trim > 0) { view = new TrimmedView(view, prefix, trim); } return view; }
@Override public View viewGt(byte[] key) { return BoundedView.viewGt(this, key); }
@Override public View viewLe(byte[] key) { return BoundedView.viewLe(this, key); }
@Override public LockResult find(byte[] key) throws IOException { if (mView.inRange(key)) { return mSource.find(key); } reset(); return LockResult.UNOWNED; }
@Override boolean inRange(byte[] key) { return startRangeCompare(key) >= 0 && endRangeCompare(key) <= 0; }
private View nonView() { return new TransformedView (new BoundedView(mSource, Utils.EMPTY_BYTES, Utils.EMPTY_BYTES, BoundedView.START_EXCLUSIVE | BoundedView.END_EXCLUSIVE), mTransformer); }
/** * @param key must not be null * @return <0 if less than end (in range), 0 if equal (in range), >0 if higher */ int endRangeCompare(byte[] key) { byte[] end = mEnd; return end == null ? -1 : endRangeCompare(end, key); }
/** * @param key must not be null * @return <0 if less than start, 0 if equal (in range), >0 if higher (in range) */ int startRangeCompare(byte[] key) { byte[] start = mStart; return start == null ? 1 : startRangeCompare(start, key); }
@Override public View viewGe(byte[] key) { return BoundedView.viewGe(this, key); }
static View viewPrefix(View view, byte[] prefix, int trim) { prefixCheck(prefix, trim); byte[] end = prefix.clone(); int mode; if (increment(end, 0, end.length)) { mode = END_EXCLUSIVE; } else { // Prefix is highest possible, so no need for an end bound. end = null; mode = 0; } view = new BoundedView(view, prefix, end, mode); if (trim > 0) { view = new TrimmedView(view, prefix, trim); } return view; }
@Override public View viewGt(byte[] key) { return BoundedView.viewGt(this, key); }
@Override public View viewLe(byte[] key) { return BoundedView.viewLe(this, key); }