void unHashSinks(final FieldIndex fieldIndex) {
final int index = fieldIndex.getIndex();
// this is the list of sinks that need to be removed from the hashedSinkMap
final List<HashKey> unhashedSinks = new ArrayList<HashKey>();
final Iterator iter = this.hashedSinkMap.newIterator();
ObjectHashMap.ObjectEntry entry = (ObjectHashMap.ObjectEntry) iter.next();
while ( entry != null ) {
final AlphaNode alphaNode = (AlphaNode) entry.getValue();
final IndexableConstraint indexableConstraint = (IndexableConstraint) alphaNode.getConstraint();
// only alpha nodes that have an Operator.EQUAL are in sinks, so only check if it is
// the right field index
if ( index == indexableConstraint.getFieldExtractor().getIndex() ) {
final FieldValue value = indexableConstraint.getField();
if ( this.hashableSinks == null ) {
this.hashableSinks = new ObjectSinkNodeList();
}
this.hashableSinks.add( alphaNode );
unhashedSinks.add( new HashKey( index,
value,
fieldIndex.getFieldExtractor() ) );
}
entry = (ObjectHashMap.ObjectEntry) iter.next();
}
for ( HashKey hashKey : unhashedSinks ) {
this.hashedSinkMap.remove( hashKey );
}