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; } }
/** * 指定されたエンコーディングでバイト配列からライターへコピーします。 * * <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)); }
/** * 指定のエンコーディングで入力ストリームから{@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); }
/** * プラットフォームのデフォルトエンコーディングでファイルから{@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); } }
/** * 指定されたエンコーディングで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); } }
/** * 指定のエンコーディングでファイルからライターへコピーします。 * * <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); } }
/** * 指定されたエンコーディングのバイト配列から指定されたエンコーディングのファイルへコピーします。 * * @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); } }
/** * 指定されたエンコーディングの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; }
public TboIdIterator(CompactReader reader) throws IOException { super(reader); header = ReaderUtil.parseHeader(reader); }