+++ /dev/null
-package org.apache.lucene.index;
-
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.io.IOException;
-import java.util.Arrays;
-
-import org.apache.lucene.store.IndexInput;
-
-/**
- * Implements the skip list reader for the default posting list format
- * that stores positions and payloads.
- *
- */
-class DefaultSkipListReader extends MultiLevelSkipListReader {
- private boolean currentFieldStoresPayloads;
- private long freqPointer[];
- private long proxPointer[];
- private int payloadLength[];
-
- private long lastFreqPointer;
- private long lastProxPointer;
- private int lastPayloadLength;
-
-
- DefaultSkipListReader(IndexInput skipStream, int maxSkipLevels, int skipInterval) {
- super(skipStream, maxSkipLevels, skipInterval);
- freqPointer = new long[maxSkipLevels];
- proxPointer = new long[maxSkipLevels];
- payloadLength = new int[maxSkipLevels];
- }
-
- void init(long skipPointer, long freqBasePointer, long proxBasePointer, int df, boolean storesPayloads) {
- super.init(skipPointer, df);
- this.currentFieldStoresPayloads = storesPayloads;
- lastFreqPointer = freqBasePointer;
- lastProxPointer = proxBasePointer;
-
- Arrays.fill(freqPointer, freqBasePointer);
- Arrays.fill(proxPointer, proxBasePointer);
- Arrays.fill(payloadLength, 0);
- }
-
- /** Returns the freq pointer of the doc to which the last call of
- * {@link MultiLevelSkipListReader#skipTo(int)} has skipped. */
- long getFreqPointer() {
- return lastFreqPointer;
- }
-
- /** Returns the prox pointer of the doc to which the last call of
- * {@link MultiLevelSkipListReader#skipTo(int)} has skipped. */
- long getProxPointer() {
- return lastProxPointer;
- }
-
- /** Returns the payload length of the payload stored just before
- * the doc to which the last call of {@link MultiLevelSkipListReader#skipTo(int)}
- * has skipped. */
- int getPayloadLength() {
- return lastPayloadLength;
- }
-
- @Override
- protected void seekChild(int level) throws IOException {
- super.seekChild(level);
- freqPointer[level] = lastFreqPointer;
- proxPointer[level] = lastProxPointer;
- payloadLength[level] = lastPayloadLength;
- }
-
- @Override
- protected void setLastSkipData(int level) {
- super.setLastSkipData(level);
- lastFreqPointer = freqPointer[level];
- lastProxPointer = proxPointer[level];
- lastPayloadLength = payloadLength[level];
- }
-
-
- @Override
- protected int readSkipData(int level, IndexInput skipStream) throws IOException {
- int delta;
- if (currentFieldStoresPayloads) {
- // the current field stores payloads.
- // if the doc delta is odd then we have
- // to read the current payload length
- // because it differs from the length of the
- // previous payload
- delta = skipStream.readVInt();
- if ((delta & 1) != 0) {
- payloadLength[level] = skipStream.readVInt();
- }
- delta >>>= 1;
- } else {
- delta = skipStream.readVInt();
- }
- freqPointer[level] += skipStream.readVInt();
- proxPointer[level] += skipStream.readVInt();
-
- return delta;
- }
-}