Ejemplo n.º 1
0
  private void advanceBlock() throws IOException {
    block = readBlock();
    if (block == null) {
      valid = false;
      return;
    }
    pointer = 0;
    available = block.getNumObjects();

    byte[] uncompressed = Decompression.decompress(block);

    ByteArrayInputStream bais = new ByteArrayInputStream(uncompressed);
    CompactReader reader = new InputStreamCompactReader(bais);

    switch (block.getType()) {
      case Definitions.BLOCK_TYPE_NODES:
        entityType = EntityType.Node;
        ids = ReaderUtil.parseNodeIds(reader, block);
        break;
      case Definitions.BLOCK_TYPE_WAYS:
        entityType = EntityType.Way;
        ids = ReaderUtil.parseWayIds(reader, block);
        break;
      case Definitions.BLOCK_TYPE_RELATIONS:
        entityType = EntityType.Relation;
        ids = ReaderUtil.parseRelationIds(reader, block);
        break;
    }
  }
Ejemplo n.º 2
0
  /**
   * 指定されたエンコーディングでバイト配列からライターへコピーします。
   *
   * <p>ライターはクローズされません。
   *
   * @param in バイト配列。{@literal null}であってはいけません
   * @param encoding エンコーディング。{@literal null}や空文字列であってはいけません
   * @param out ライター。{@literal null}であってはいけません
   * @return コピーした文字数
   */
  public static int copy(final byte[] in, final String encoding, final Writer out) {
    assertArgumentNotNull("in", in);
    assertArgumentNotEmpty("encoding", encoding);
    assertArgumentNotNull("out", out);

    final Reader is = ReaderUtil.create(new ByteArrayInputStream(in), encoding);
    return copyInternal(is, wrap(out));
  }
Ejemplo n.º 3
0
  /**
   * 指定のエンコーディングで入力ストリームから{@link StringBuilder}へコピーします。
   *
   * <p>入力ストリームはクローズされません。
   *
   * @param in 入力ストリーム。{@literal null}であってはいけません
   * @param encoding エンコーディング。{@literal null}や空文字列であってはいけません
   * @param out {@link StringBuilder}。{@literal null}であってはいけません
   * @return コピーした文字数
   */
  public static int copy(final InputStream in, final String encoding, final StringBuilder out) {
    assertArgumentNotNull("in", in);
    assertArgumentNotEmpty("encoding", encoding);
    assertArgumentNotNull("out", out);

    final Reader is = ReaderUtil.create(wrap(in), encoding);
    return copyInternal(is, out);
  }
Ejemplo n.º 4
0
  /**
   * プラットフォームのデフォルトエンコーディングでファイルから{@link StringBuilder}へコピーします。
   *
   * @param in ファイル。{@literal null}であってはいけません
   * @param out {@link StringBuilder}。{@literal null}であってはいけません
   * @return コピーした文字数
   */
  public static int copy(final File in, final StringBuilder out) {
    assertArgumentNotNull("in", in);
    assertArgumentNotNull("out", out);

    final Reader is = ReaderUtil.create(in);
    try {
      return copyInternal(wrap(is), out);
    } finally {
      CloseableUtil.close(is);
    }
  }
Ejemplo n.º 5
0
  /**
   * 指定されたエンコーディングでURLから{@link StringBuilder}へコピーします。
   *
   * @param in URL。{@literal null}であってはいけません
   * @param encoding エンコーディング。{@literal null}や空文字列であってはいけません
   * @param out {@link StringBuilder}。{@literal null}であってはいけません
   * @return コピーした文字数
   */
  public static int copy(final URL in, final String encoding, final StringBuilder out) {
    assertArgumentNotNull("in", in);
    assertArgumentNotEmpty("encoding", encoding);
    assertArgumentNotNull("out", out);

    final InputStream is = URLUtil.openStream(in);
    try {
      return copyInternal(ReaderUtil.create(wrap(is), encoding), out);
    } finally {
      CloseableUtil.close(is);
    }
  }
Ejemplo n.º 6
0
  /**
   * 指定のエンコーディングでファイルからライターへコピーします。
   *
   * <p>ライターはクローズされません。
   *
   * @param in ファイル。{@literal null}であってはいけません
   * @param encoding エンコーディング。{@literal null}や空文字列であってはいけません
   * @param out ライター。{@literal null}であってはいけません
   * @return コピーした文字数
   */
  public static int copy(final File in, final String encoding, final Writer out) {
    assertArgumentNotNull("in", in);
    assertArgumentNotEmpty("encoding", encoding);
    assertArgumentNotNull("out", out);

    final Reader is = ReaderUtil.create(in, encoding);
    try {
      return copyInternal(wrap(is), wrap(out));
    } finally {
      CloseableUtil.close(is);
    }
  }
Ejemplo n.º 7
0
  /**
   * 指定されたエンコーディングのバイト配列から指定されたエンコーディングのファイルへコピーします。
   *
   * @param in バイト配列。{@literal null}であってはいけません
   * @param inputEncoding 入力のエンコーディング。{@literal null}や空文字列であってはいけません
   * @param out ファイル。{@literal null}であってはいけません
   * @param outputEncoding 出力のエンコーディング。{@literal null}や空文字列であってはいけません
   * @return コピーした文字数
   */
  public static int copy(
      final byte[] in, final String inputEncoding, final File out, final String outputEncoding) {
    assertArgumentNotNull("in", in);
    assertArgumentNotEmpty("inputEncoding", inputEncoding);
    assertArgumentNotNull("out", out);
    assertArgumentNotEmpty("outputEncoding", outputEncoding);

    final Reader is = ReaderUtil.create(new ByteArrayInputStream(in), inputEncoding);
    final Writer os = WriterUtil.create(out, outputEncoding);
    try {
      return copyInternal(is, wrap(os));
    } finally {
      CloseableUtil.close(os);
    }
  }
Ejemplo n.º 8
0
  /**
   * 指定されたエンコーディングのURLから指定されたエンコーディングのファイルへコピーします。
   *
   * @param in URL。{@literal null}であってはいけません
   * @param inputEncoding URLのエンコーディング。{@literal null}や空文字列であってはいけません
   * @param out ファイル。{@literal null}であってはいけません
   * @param outputEncoding ファイルのエンコーディング。{@literal null}や空文字列であってはいけません
   * @return コピーした文字数
   */
  public static int copy(
      final URL in, final String inputEncoding, final File out, final String outputEncoding) {
    assertArgumentNotNull("in", in);
    assertArgumentNotEmpty("inputEncoding", inputEncoding);
    assertArgumentNotNull("out", out);
    assertArgumentNotEmpty("outputEncoding", outputEncoding);

    final InputStream is = URLUtil.openStream(in);
    try {
      final Writer os = WriterUtil.create(out, outputEncoding);
      try {
        return copyInternal(ReaderUtil.create(wrap(is), inputEncoding), wrap(os));
      } finally {
        CloseableUtil.close(os);
      }
    } finally {
      CloseableUtil.close(is);
    }
  }
  int resolveParentDocuments(
      TopDocs topDocs,
      SearchContext context,
      Recycler.V<ObjectObjectOpenHashMap<Object, ParentDoc[]>> parentDocs) {
    int parentHitsResolved = 0;
    Recycler.V<ObjectObjectOpenHashMap<Object, Recycler.V<IntObjectOpenHashMap<ParentDoc>>>>
        parentDocsPerReader =
            cacheRecycler.hashMap(context.searcher().getIndexReader().leaves().size());
    for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
      int readerIndex =
          ReaderUtil.subIndex(scoreDoc.doc, context.searcher().getIndexReader().leaves());
      AtomicReaderContext subContext =
          context.searcher().getIndexReader().leaves().get(readerIndex);
      int subDoc = scoreDoc.doc - subContext.docBase;

      // find the parent id
      HashedBytesArray parentId =
          context.idCache().reader(subContext.reader()).parentIdByDoc(parentType, subDoc);
      if (parentId == null) {
        // no parent found
        continue;
      }
      // now go over and find the parent doc Id and reader tuple
      for (AtomicReaderContext atomicReaderContext : context.searcher().getIndexReader().leaves()) {
        AtomicReader indexReader = atomicReaderContext.reader();
        int parentDocId = context.idCache().reader(indexReader).docById(parentType, parentId);
        Bits liveDocs = indexReader.getLiveDocs();
        if (parentDocId != -1 && (liveDocs == null || liveDocs.get(parentDocId))) {
          // we found a match, add it and break

          Recycler.V<IntObjectOpenHashMap<ParentDoc>> readerParentDocs =
              parentDocsPerReader.v().get(indexReader.getCoreCacheKey());
          if (readerParentDocs == null) {
            readerParentDocs = cacheRecycler.intObjectMap(indexReader.maxDoc());
            parentDocsPerReader.v().put(indexReader.getCoreCacheKey(), readerParentDocs);
          }

          ParentDoc parentDoc = readerParentDocs.v().get(parentDocId);
          if (parentDoc == null) {
            parentHitsResolved++; // we have a hit on a parent
            parentDoc = new ParentDoc();
            parentDoc.docId = parentDocId;
            parentDoc.count = 1;
            parentDoc.maxScore = scoreDoc.score;
            parentDoc.sumScores = scoreDoc.score;
            readerParentDocs.v().put(parentDocId, parentDoc);
          } else {
            parentDoc.count++;
            parentDoc.sumScores += scoreDoc.score;
            if (scoreDoc.score > parentDoc.maxScore) {
              parentDoc.maxScore = scoreDoc.score;
            }
          }
        }
      }
    }
    boolean[] states = parentDocsPerReader.v().allocated;
    Object[] keys = parentDocsPerReader.v().keys;
    Object[] values = parentDocsPerReader.v().values;
    for (int i = 0; i < states.length; i++) {
      if (states[i]) {
        Recycler.V<IntObjectOpenHashMap<ParentDoc>> value =
            (Recycler.V<IntObjectOpenHashMap<ParentDoc>>) values[i];
        ParentDoc[] _parentDocs = value.v().values().toArray(ParentDoc.class);
        Arrays.sort(_parentDocs, PARENT_DOC_COMP);
        parentDocs.v().put(keys[i], _parentDocs);
        Releasables.release(value);
      }
    }
    Releasables.release(parentDocsPerReader);
    return parentHitsResolved;
  }
Ejemplo n.º 10
0
  public TboIdIterator(CompactReader reader) throws IOException {
    super(reader);

    header = ReaderUtil.parseHeader(reader);
  }