blob: aa9620d7f16ea46a00a0bfaecedfc1f85e7238db [file] [log] [blame]
/*
* Copyright 1999-2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.tomcat.util.collections;
import java.util.Enumeration;
/** Enumerate the distinct header names.
Each nextElement() is O(n) ( a comparation is
done with all previous elements ).
This is less frequesnt than add() -
we want to keep add O(1).
*/
public final class MultiMapNamesEnumeration implements Enumeration {
int pos;
int size;
String next;
MultiMap headers;
// toString and unique options are not implemented -
// we allways to toString and unique.
/** Create a new multi-map enumeration.
* @param headers the collection to enumerate
* @param toString convert each name to string
* @param unique return only unique names
*/
MultiMapNamesEnumeration(MultiMap headers, boolean toString,
boolean unique) {
this.headers=headers;
pos=0;
size = headers.size();
findNext();
}
private void findNext() {
next=null;
for( ; pos< size; pos++ ) {
next=headers.getName( pos ).toString();
for( int j=0; j<pos ; j++ ) {
if( headers.getName( j ).equalsIgnoreCase( next )) {
// duplicate.
next=null;
break;
}
}
if( next!=null ) {
// it's not a duplicate
break;
}
}
// next time findNext is called it will try the
// next element
pos++;
}
public boolean hasMoreElements() {
return next!=null;
}
public Object nextElement() {
String current=next;
findNext();
return current;
}
}