/*
* Copyright 2010 Roger Kapsi
*
* 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.ardverk.collection;
import java.io.Serializable;
/**
* An implementation of {@link KeyAnalyzer} that assumes all keys
* have the {@link Key} interface implemented.
*/
public class DefaultKeyAnalyzer<K extends Key<K>>
extends AbstractKeyAnalyzer<K> implements Serializable {
private static final long serialVersionUID = 5340568481346940964L;
@SuppressWarnings("rawtypes")
private static final DefaultKeyAnalyzer INSTANCE = new DefaultKeyAnalyzer();
@SuppressWarnings("unchecked")
public static <K> KeyAnalyzer<K> singleton() {
return (KeyAnalyzer<K>)INSTANCE;
}
public int lengthInBits(K key) {
return key.lengthInBits();
}
public boolean isBitSet(K key, int bitIndex) {
return key.isBitSet(bitIndex);
}
public int bitIndex(K key, K otherKey) {
return key.bitIndex(otherKey);
}
public boolean isPrefix(K key, K prefix) {
return key.isPrefixedBy(prefix);
}
}