1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
   | private PendingBlock writeBlock(         int prefixLength,         boolean isFloor,         int floorLeadLabel,         int start,         int end,         boolean hasTerms,         boolean hasSubBlocks)         throws IOException { 	 	 	if (isLeafBlock) { 		subIndices = null;         StatsWriter statsWriter =             new StatsWriter(this.statsWriter, fieldInfo.getIndexOptions() != IndexOptions.DOCS);         for (int i = start; i < end; i++) {           PendingEntry ent = pending.get(i);           assert ent.isTerm : "i=" + i;
            PendingTerm term = (PendingTerm) ent;
            assert StringHelper.startsWith(term.termBytes, prefix) : term + " prefix=" + prefix;           BlockTermState state = term.state;           final int suffix = term.termBytes.length - prefixLength;                                                                  
                       suffixLengthsWriter.writeVInt(suffix);           suffixWriter.append(term.termBytes, prefixLength, suffix);           assert floorLeadLabel == -1 || (term.termBytes[prefixLength] & 0xff) >= floorLeadLabel;
                       statsWriter.add(state.docFreq, state.totalTermFreq);
                       postingsWriter.encodeTerm(metaWriter, fieldInfo, state, absolute);           absolute = false; 		}
  	} else { 		          subIndices = new ArrayList<>();         StatsWriter statsWriter =             new StatsWriter(this.statsWriter, fieldInfo.getIndexOptions() != IndexOptions.DOCS);         for (int i = start; i < end; i++) {           PendingEntry ent = pending.get(i);           if (ent.isTerm) {             PendingTerm term = (PendingTerm) ent;
              assert StringHelper.startsWith(term.termBytes, prefix) : term + " prefix=" + prefix;             BlockTermState state = term.state;             final int suffix = term.termBytes.length - prefixLength;
                                                     
              suffixLengthsWriter.writeVInt(suffix << 1);             suffixWriter.append(term.termBytes, prefixLength, suffix);
                           statsWriter.add(state.docFreq, state.totalTermFreq);
                                                                                            
                           postingsWriter.encodeTerm(metaWriter, fieldInfo, state, absolute);             absolute = false;           } else {             PendingBlock block = (PendingBlock) ent;             assert StringHelper.startsWith(block.prefix, prefix);             final int suffix = block.prefix.length - prefixLength;             assert StringHelper.startsWith(block.prefix, prefix);
              assert suffix > 0;
                                        suffixLengthsWriter.writeVInt((suffix << 1) | 1);             suffixWriter.append(block.prefix.bytes, prefixLength, suffix);
                                                                                            
              assert floorLeadLabel == -1                     || (block.prefix.bytes[prefixLength] & 0xff) >= floorLeadLabel                 : "floorLeadLabel="                     + floorLeadLabel                     + " suffixLead="                     + (block.prefix.bytes[prefixLength] & 0xff);             assert block.fp < startFP;
              suffixLengthsWriter.writeVLong(startFP - block.fp);             subIndices.add(block.index);           }         }         statsWriter.finish();
          assert subIndices.size() != 0; 	} 	 	 	termsOut.writeVInt((int) metaWriter.size()); 	 	metaWriter.copyTo(termsOut); 	metaWriter.reset(); }
   |