public byte[] filter(byte[] buffer,int offset,int len){
  byte[] slices=getSlices(buffer,offset,len);
  if (null == slices) {
    return null;
  }
  int insertionPoint=findInsertionPoint(slices);
  if (insertionPoint >= 0) {
    return buffer;
  }
  if (-1 == insertionPoint) {
    if (hasHinting) {
      return Arrays.copyOf(this.rangekeys,this.bounds[1]);
    }
 else {
      return null;
    }
  }
  if (-nranges - 1 == insertionPoint) {
    if (hasHinting) {
      return EMPTY_BYTE_ARRAY;
    }
 else {
      return null;
    }
  }
  if (-(insertionPoint + 1) % 2 == 0) {
    if (hasHinting) {
      int hintOffset=this.slicesLength * (-(insertionPoint + 1));
      return Arrays.copyOfRange(this.rangekeys,hintOffset,this.bounds[1]);
    }
 else {
      return null;
    }
  }
  return buffer;
}

public byte [ ] filter ( byte [ ] buffer , int offset , int len ) { byte [ ] slices = getSlices ( buffer , offset , len ) ; if ( null == slices ) { return null ; } int insertionPoint = findInsertionPoint ( slices ) ; if ( insertionPoint >= 0 ) { return buffer ; } if ( - 1 == insertionPoint ) { if ( hasHinting ) { return Arrays . copyOf ( this . rangekeys , this . bounds [ 1 ] ) ; } else { return null ; } } if ( - nranges - 1 == insertionPoint ) { if ( hasHinting ) { return EMPTY_BYTE_ARRAY ; } else { return null ; } } if ( - ( insertionPoint + 1 ) % 2 == 0 ) { if ( hasHinting ) { int hintOffset = this . slicesLength * ( - ( insertionPoint + 1 ) ) ; return Arrays . copyOfRange ( this . rangekeys , hintOffset , this . bounds [ 1 ] ) ; } else { return null ; } } return buffer ; }
determine if a key should be filtered or not . this method returns a byte array which indicates how the key should be dealt with . if the return value is ' buffer ' , the key should be include . if the return value is null , the key should be skipped and no next key hint is available if the return value is a non empty byte array ( different from ' buffer ' ) , the key should be skipped and the return value used as the next key hint . if the return value is an empty byte array , the key is passed the last range and scanning should end
