* contain different but equal elements than the original index.
*/
public int[] getIndexedFSs() {
final IntVector v = new IntVector();
IndexIteratorCachePair iicp;
IntPointerIterator it;
ArrayList<IndexIteratorCachePair> iv, cv;
// We may need to profile this. If this is a bottleneck, use a different
// implementation.
IntVector indexedFSs = new IntVector();
int jMax, indStrat;
// Iterate over index by type, with something in there
for (int i = 0; i < this.usedIndexes.size(); i++) {
iv = this.indexArray[this.usedIndexes.get(i)];
// Iterate over the indexes for the type.
jMax = iv.size();
// Create a vector of IICPs. If there is at least one sorted or bag
// index, pick one arbitrarily and add its FSs (since it contains all
// FSs that all other indexes for the same type contain). If there are
// only set indexes, create a set of the FSs in those indexes, since they
// may all contain different elements (different FSs that have the same "key"
// are duplicates for one index, but may not be duplicates for a different one).
cv = new ArrayList<IndexIteratorCachePair>();
for (int j = 0; j < jMax; j++) {
iicp = iv.get(j);
indStrat = iicp.index.getIndexingStrategy();
if (indStrat == FSIndex.SET_INDEX) {
cv.add(iicp);
} else {
cv.clear(); // only need to save this one
cv.add(iicp);
break;
}
}
if (cv.size() > 0) {
// Note: This next loop removes duplicates (and also sorts
// the fs addrs associated with one type)
// Duplicates arise from having mulitple sets combined, and
// also if a non-set index had the same identical FS added
// multiple times.
indexedFSs.removeAllElements();
for (int k = 0; k < cv.size(); k++) {
it = cv.get(k).index.refIterator();
while (it.isValid()) {
indexedFSs.add(it.get());
it.inc();
}
}
// sort and remove duplicates
indexedFSs.sortDedup();
v.add(indexedFSs.getArray(), 0, indexedFSs.size()); // bulk add of all elements