content: package org.apache.solr.request.uninverted;
  
  import java.io.IOException;
  
  import org.apache.lucene.index.DocValuesReader;
  import org.apache.lucene.index.SegmentReader;
  import org.apache.solr.schema.IndexSchema;
  import org.apache.solr.search.BitDocSet;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
  
  public class MakeUnivertedFieldBySigment{
  	public static Logger log = LoggerFactory.getLogger(MakeUnivertedFieldBySigment.class);
  	
  	static boolean isforbiden=false;
  	public static boolean  makeInit(UnInvertedField uni,BitDocSet baseAdvanceDocs,String field, SegmentReader reader,IndexSchema schema,boolean isreadDouble) throws IOException, CloneNotSupportedException
  	{
  		long t1=System.currentTimeMillis();
  
  		int fieldNumber=reader.getFieldNum(field);
  		if(isforbiden||!reader.isSupportQuick()||fieldNumber<0)
  		{
  			return false;
  		}
  		
  		
  		uni.init( field, reader, schema);
  		long t2=System.currentTimeMillis();
  
  		uni.baseAdvanceDocs=UnInvertedField.ajustBase(4,baseAdvanceDocs, reader);
  		long t3=System.currentTimeMillis();
  
  		if(uni.checkEmpty())
  		{
  			return true;
  		}
  		
  		log.info("makeInit start:" + uni.field + " ,this.baseAdvanceDocs="+(uni.baseAdvanceDocs==null?0:uni.baseAdvanceDocs.size()));
  		int maxDoc = reader.maxDoc();
  		uni.startRamDocValue(maxDoc, reader, isreadDouble);
  		long t4=System.currentTimeMillis();
  
  		DocValuesReader docvalues=reader.getDocValues();
  		int maxtm=RamDocValueFill.Fill(uni,reader.maxDoc(), true, uni.ti, docvalues, fieldNumber, isreadDouble, uni.baseAdvanceDocs);
  		long t5=System.currentTimeMillis();
  	
  		uni.endRamDocValue(isreadDouble,maxtm);
  		uni.tnr = uni.ramDocValue.getDocReader();
  		uni.baseAdvanceDocs=null;
  		long t6=System.currentTimeMillis();
  		log.info("####makeInit end####:" +uni.field+","+(t6-t5)+"@"+(t5-t4)+"@"+(t4-t3)+"@"+(t3-t2)+"@"+(t2-t1));
  		return true;	
  	}
  	
  
  	public static boolean addDoclist(UnInvertedField uni, BitDocSet docs,
  			String field, SegmentReader reader, IndexSchema schema,
  			boolean isreadDouble) throws IOException, CloneNotSupportedException {
  		int fieldNumber = reader.getFieldNum(field);
  		if (isforbiden||!reader.isSupportQuick() || fieldNumber < 0) {
  			return false;
  		}
  
  		if (uni.checkEmpty()) {
  			return true;
  		}
  
  		BitDocSet tmp = null;
  		if (docs != null) {
  			tmp = (BitDocSet) docs.andNot(uni.bits);
  			if (tmp != null && tmp.size() <= 0) {
  				return true;
  			}
  		}
  
  		log.info("addDoclist start" + uni.field + " ,this.baseAdvanceDocs="+(uni.baseAdvanceDocs==null?0:uni.baseAdvanceDocs.size()));
  
  		uni.baseAdvanceDocs = UnInvertedField.ajustBase(4,tmp, reader);
  
  		DocValuesReader docvalues = reader.getDocValues();
  		RamDocValueFill.Fill(uni, reader.maxDoc(),false, uni.ti, docvalues, fieldNumber, isreadDouble,uni.baseAdvanceDocs);
  		uni.baseAdvanceDocs=null;
  
  		return true;
  	}
  }
  