blob: 41369e39d893be85e5cbd6aa0e4ba4d9531008bf [file] [log] [blame]
package org.eclipse.jdt.internal.core.index.impl;
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
import java.io.IOException;
import java.util.ArrayList;
import org.eclipse.jdt.internal.core.index.*;
/**
* A simpleIndexInput is an input on an in memory Index.
*/
public class SimpleIndexInput extends IndexInput {
protected WordEntry[] sortedWordEntries;
protected IndexedFile currentFile;
protected IndexedFile[] sortedFiles;
protected InMemoryIndex index;
public SimpleIndexInput(InMemoryIndex index) {
super();
this.index= index;
}
/**
* @see IndexInput#clearCache()
*/
public void clearCache() {
}
/**
* @see IndexInput#close()
*/
public void close() throws IOException {
sortedFiles= null;
}
/**
* @see IndexInput#getCurrentFile()
*/
public IndexedFile getCurrentFile() throws IOException {
if (!hasMoreFiles())
return null;
return currentFile;
}
/**
* @see IndexInput#getIndexedFile(int)
*/
public IndexedFile getIndexedFile(int fileNum) throws IOException {
for (int i= 0; i < sortedFiles.length; i++)
if (sortedFiles[i].getFileNumber() == fileNum)
return sortedFiles[i];
return null;
}
/**
* @see IndexInput#getIndexedFile(IDocument)
*/
public IndexedFile getIndexedFile(IDocument document) throws IOException {
String name= document.getName();
for (int i= index.getNumFiles(); i >= 1; i--) {
IndexedFile file= getIndexedFile(i);
if (name.equals(file.getPath()))
return file;
}
return null;
}
/**
* @see IndexInput#getNumFiles()
*/
public int getNumFiles() {
return index.getNumFiles();
}
/**
* @see IndexInput#getNumWords()
*/
public int getNumWords() {
return sortedWordEntries.length;
}
/**
* @see IndexInput#getSource()
*/
public Object getSource() {
return index;
}
public void init() {
index.init();
}
/**
* @see IndexInput#moveToNextFile()
*/
public void moveToNextFile() throws IOException {
filePosition++;
if (!hasMoreFiles()) {
return;
}
currentFile= sortedFiles[filePosition - 1];
}
/**
* @see IndexInput#moveToNextWordEntry()
*/
public void moveToNextWordEntry() throws IOException {
wordPosition++;
if (hasMoreWords())
currentWordEntry= sortedWordEntries[wordPosition - 1];
}
/**
* @see IndexInput#open()
*/
public void open() throws IOException {
sortedWordEntries= index.getSortedWordEntries();
sortedFiles= index.getSortedFiles();
filePosition= 1;
wordPosition= 1;
setFirstFile();
setFirstWord();
}
/**
* @see IndexInput#query(String)
*/
public IQueryResult[] query(String word) throws IOException {
char[] wordChar= word.toCharArray();
WordEntry wordEntry= index.getWordEntry(wordChar);
int[] fileNums= wordEntry.getRefs();
IQueryResult[] files= new IQueryResult[fileNums.length];
for (int i= 0; i < files.length; i++)
files[i]= getIndexedFile(fileNums[i]);
return files;
}
public IEntryResult[] queryEntriesPrefixedBy(char[] prefix) throws IOException {
return null;
}
public IQueryResult[] queryFilesReferringToPrefix(char[] prefix) throws IOException {
return null;
}
/**
* @see IndexInput#queryInDocumentNames(String)
*/
public IQueryResult[] queryInDocumentNames(String word) throws IOException {
setFirstFile();
ArrayList matches= new ArrayList();
while (hasMoreFiles()) {
IndexedFile file= getCurrentFile();
if (file.getPath().indexOf(word) != -1)
matches.add(file.getPath());
moveToNextFile();
}
IQueryResult[] match= new IQueryResult[matches.size()];
matches.toArray(match);
return match;
}
/**
* @see IndexInput#setFirstFile()
*/
protected void setFirstFile() throws IOException {
filePosition= 1;
if (sortedFiles.length > 0) {
currentFile= sortedFiles[0];
}
}
/**
* @see IndexInput#setFirstWord()
*/
protected void setFirstWord() throws IOException {
wordPosition= 1;
if (sortedWordEntries.length > 0)
currentWordEntry= sortedWordEntries[0];
}
}