package org.fastcatsearch.ir.search; import org.fastcatsearch.ir.io.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; public class CompoundReferenceableIndexReader implements ReferenceableReader { protected static Logger logger = LoggerFactory.getLogger(CompoundReferenceableIndexReader.class); private ReferenceableReader[] readers; private CompoundDataRef dataRef; public CompoundReferenceableIndexReader(ReferenceableReader[] readers) throws IOException { this.readers = readers; DataRef[] refs = new DataRef[readers.length]; for(int i = 0; i < readers.length; i++) { refs[i] = readers[i].getRef(); } dataRef = new CompoundDataRef(refs); } @Override public DataRef getRef() throws IOException{ return dataRef; } @Override public void read(int docNo) throws IOException{ for(int i = 0; i < readers.length; i++) { readers[i].read(docNo); } } public CompoundReferenceableIndexReader clone() { ReferenceableReader[] newReaders = new ReferenceableReader[readers.length]; for(int i = 0; i < readers.length; i++) { newReaders[i] = readers[i].clone(); } try { return new CompoundReferenceableIndexReader(newReaders); } catch (IOException e) { logger.error("", e); } return null; } @Override public void close() throws IOException { for(int i = 0; i < readers.length; i++) { readers[i].close(); } } }