Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
///////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
///////////////////////////////////////////////////////////////////////////////
package gnu.trove;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.io.Externalizable;
import java.util.Arrays;
//////////////////////////////////////////////////
// THIS IS A GENERATED CLASS. DO NOT HAND EDIT! //
//////////////////////////////////////////////////
/**
* An open addressed Map implementation for Object keys and byte values.
*
* Created: Sun Nov 4 08:52:45 2001
*
* @author Eric D. Friedman
*/
public class TObjectByteHashMap extends TObjectHash implements Externalizable {
static final long serialVersionUID = 1L;
private final TObjectByteProcedure PUT_ALL_PROC = new TObjectByteProcedure() {
public boolean execute(K key, byte value) {
put(key, value);
return true;
}
};
/** the values of the map */
protected transient byte[] _values;
/**
* Creates a new TObjectByteHashMap instance with the default
* capacity and load factor.
*/
public TObjectByteHashMap() {
super();
}
/**
* Creates a new TObjectByteHashMap instance with a prime
* capacity equal to or greater than initialCapacity and
* with the default load factor.
*
* @param initialCapacity an int value
*/
public TObjectByteHashMap(int initialCapacity) {
super(initialCapacity);
}
/**
* Creates a new TObjectByteHashMap instance with a prime
* capacity equal to or greater than initialCapacity and
* with the specified load factor.
*
* @param initialCapacity an int value
* @param loadFactor a float value
*/
public TObjectByteHashMap(int initialCapacity, float loadFactor) {
super(initialCapacity, loadFactor);
}
/**
* Creates a new TObjectByteHashMap instance with the default
* capacity and load factor.
* @param strategy used to compute hash codes and to compare keys.
*/
public TObjectByteHashMap(TObjectHashingStrategy strategy) {
super(strategy);
}
/**
* Creates a new TObjectByteHashMap instance whose capacity
* is the next highest prime above initialCapacity + 1
* unless that value is already prime.
*
* @param initialCapacity an int value
* @param strategy used to compute hash codes and to compare keys.
*/
public TObjectByteHashMap(int initialCapacity, TObjectHashingStrategy strategy) {
super(initialCapacity, strategy);
}
/**
* Creates a new TObjectByteHashMap instance with a prime
* value at or near the specified capacity and load factor.
*
* @param initialCapacity used to find a prime capacity for the table.
* @param loadFactor used to calculate the threshold over which
* rehashing takes place.
* @param strategy used to compute hash codes and to compare keys.
*/
public TObjectByteHashMap(int initialCapacity, float loadFactor, TObjectHashingStrategy strategy) {
super(initialCapacity, loadFactor, strategy);
}
/**
* @return an iterator over the entries in this map
*/
public TObjectByteIterator iterator() {
return new TObjectByteIterator(this);
}
/**
* initializes the hashtable to a prime capacity which is at least
* initialCapacity + 1.
*
* @param initialCapacity an int value
* @return the actual capacity chosen
*/
protected int setUp(int initialCapacity) {
int capacity;
capacity = super.setUp(initialCapacity);
_values = new byte[capacity];
return capacity;
}
/**
* Inserts a key/value pair into the map.
*
* @param key an Object value
* @param value an byte value
* @return the previous value associated with key,
* or (byte)0 if none was found.
*/
public byte put(K key, byte value) {
int index = insertionIndex(key);
return doPut(key, value, index);
}
/**
* Inserts a key/value pair into the map if the specified key is not already
* associated with a value.
*
* @param key an Object value
* @param value an byte value
* @return the previous value associated with key,
* or (byte)0 if none was found.
*/
public byte putIfAbsent(K key, byte value) {
int index = insertionIndex(key);
if (index < 0)
return _values[-index - 1];
return doPut(key, value, index);
}
private byte doPut(K key, byte value, int index) {
byte previous = (byte)0;
boolean isNewMapping = true;
if (index < 0) {
index = -index -1;
previous = _values[index];
isNewMapping = false;
}
K oldKey = (K) _set[index];
_set[index] = key;
_values[index] = value;
if (isNewMapping) {
postInsertHook(oldKey == FREE);
}
return previous;
}
/**
* Put all the entries from the given map into this map.
*
* @param map The map from which entries will be obtained to put into this map.
*/
public void putAll(TObjectByteHashMap map){
map.forEachEntry(PUT_ALL_PROC);
}
/**
* rehashes the map to the new capacity.
*
* @param newCapacity an int value
*/
protected void rehash(int newCapacity) {
int oldCapacity = _set.length;
K oldKeys[] = (K[]) _set;
byte oldVals[] = _values;
_set = new Object[newCapacity];
Arrays.fill(_set, FREE);
_values = new byte[newCapacity];
for (int i = oldCapacity; i-- > 0;) {
if(oldKeys[i] != FREE && oldKeys[i] != REMOVED) {
K o = oldKeys[i];
int index = insertionIndex(o);
if (index < 0) {
throwObjectContractViolation(_set[(-index -1)], o);
}
_set[index] = o;
_values[index] = oldVals[i];
}
}
}
/**
* retrieves the value for key
*
* @param key an Object value
* @return the value of key or (byte)0 if no such mapping exists.
*/
public byte get(K key) {
int index = index(key);
return index < 0 ? (byte)0 : _values[index];
}
/**
* Empties the map.
*
*/
public void clear() {
super.clear();
Object[] keys = _set;
byte[] vals = _values;
Arrays.fill(_set, 0, _set.length, FREE);
Arrays.fill(_values, 0, _values.length, (byte) 0);
}
/**
* Deletes a key/value pair from the map.
*
* @param key an Object value
* @return an byte value or (byte)0 if no such mapping exists.
*/
public byte remove(K key) {
byte prev = (byte)0;
int index = index(key);
if (index >= 0) {
prev = _values[index];
removeAt(index); // clear key,state; adjust size
}
return prev;
}
/**
* Compares this map with another map for equality of their stored
* entries.
*
* @param other an Object value
* @return a boolean value
*/
public boolean equals(Object other) {
if (! (other instanceof TObjectByteHashMap)) {
return false;
}
TObjectByteHashMap that = (TObjectByteHashMap)other;
if (that.size() != this.size()) {
return false;
}
return forEachEntry(new EqProcedure(that));
}
/**
* {@inheritDoc}
*/
@Override
public TObjectByteHashMap clone() {
TObjectByteHashMap clone = ( TObjectByteHashMap ) super.clone();
clone._values = new byte[_values.length];
System.arraycopy( _values, 0, clone._values, 0, clone._values.length );
return clone;
}
private static final class EqProcedure implements TObjectByteProcedure {
private final TObjectByteHashMap _otherMap;
EqProcedure(TObjectByteHashMap otherMap) {
_otherMap = otherMap;
}
public final boolean execute(Object key, byte value) {
int index = _otherMap.index(key);
if (index >= 0 && eq(value, _otherMap.get(key))) {
return true;
}
return false;
}
/**
* Compare two bytes for equality.
*/
private final boolean eq(byte v1, byte v2) {
return v1 == v2;
}
}
/**
* removes the mapping at index from the map.
*
* @param index an int value
*/
protected void removeAt(int index) {
_values[index] = 0;
super.removeAt(index); // clear key, state; adjust size
}
/**
* Returns the values of the map.
*
* @return a Collection value
*/
public byte[] getValues() {
byte[] vals = new byte[size()];
byte[] v = _values;
Object[] keys = _set;
for (int i = v.length, j = 0; i-- > 0;) {
if (keys[i] != FREE && keys[i] != REMOVED) {
vals[j++] = v[i];
}
}
return vals;
}
/**
* returns the keys of the map.
*
* @return a Set value
*/
public Object[] keys() {
Object[] keys = new Object[size()];
K[] k = (K[]) _set;
for (int i = k.length, j = 0; i-- > 0;) {
if (k[i] != FREE && k[i] != REMOVED) {
keys[j++] = k[i];
}
}
return keys;
}
/**
* returns the keys of the map.
*
* @param a the array into which the elements of the list are to
* be stored, if it is big enough; otherwise, a new array of the
* same runtime type is allocated for this purpose.
* @return a Set value
*/
public K[] keys(K[] a) {
int size = size();
if (a.length < size) {
a = (K[]) java.lang.reflect.Array.newInstance(
a.getClass().getComponentType(), size);
}
K[] k = (K[]) _set;
for (int i = k.length, j = 0; i-- > 0;) {
if (k[i] != FREE && k[i] != REMOVED) {
a[j++] = k[i];
}
}
return a;
}
/**
* checks for the presence of val in the values of the map.
*
* @param val an byte value
* @return a boolean value
*/
public boolean containsValue(byte val) {
Object[] keys = _set;
byte[] vals = _values;
for (int i = vals.length; i-- > 0;) {
if (keys[i] != FREE && keys[i] != REMOVED && val == vals[i]) {
return true;
}
}
return false;
}
/**
* checks for the present of key in the keys of the map.
*
* @param key an Object value
* @return a boolean value
*/
public boolean containsKey(K key) {
return contains(key);
}
/**
* Executes procedure for each key in the map.
*
* @param procedure a TObjectProcedure value
* @return false if the loop over the keys terminated because
* the procedure returned false for some key.
*/
public boolean forEachKey(TObjectProcedure procedure) {
return forEach(procedure);
}
/**
* Executes procedure for each value in the map.
*
* @param procedure a TByteProcedure value
* @return false if the loop over the values terminated because
* the procedure returned false for some value.
*/
public boolean forEachValue(TByteProcedure procedure) {
Object[] keys = _set;
byte[] values = _values;
for (int i = values.length; i-- > 0;) {
if (keys[i] != FREE && keys[i] != REMOVED
&& ! procedure.execute(values[i])) {
return false;
}
}
return true;
}
/**
* Executes procedure for each key/value entry in the
* map.
*
* @param procedure a TOObjectByteProcedure value
* @return false if the loop over the entries terminated because
* the procedure returned false for some entry.
*/
public boolean forEachEntry(TObjectByteProcedure procedure) {
K[] keys = (K[]) _set;
byte[] values = _values;
for (int i = keys.length; i-- > 0;) {
if (keys[i] != FREE
&& keys[i] != REMOVED
&& ! procedure.execute(keys[i],values[i])) {
return false;
}
}
return true;
}
/**
* Retains only those entries in the map for which the procedure
* returns a true value.
*
* @param procedure determines which entries to keep
* @return true if the map was modified.
*/
public boolean retainEntries(TObjectByteProcedure procedure) {
boolean modified = false;
K[] keys = (K[]) _set;
byte[] values = _values;
// Temporarily disable compaction. This is a fix for bug #1738760
tempDisableAutoCompaction();
try {
for (int i = keys.length; i-- > 0;) {
if (keys[i] != FREE
&& keys[i] != REMOVED
&& ! procedure.execute(keys[i],values[i])) {
removeAt(i);
modified = true;
}
}
}
finally {
reenableAutoCompaction(true);
}
return modified;
}
/**
* Transform the values in this map using function.
*
* @param function a TByteFunction value
*/
public void transformValues(TByteFunction function) {
Object[] keys = _set;
byte[] values = _values;
for (int i = values.length; i-- > 0;) {
if (keys[i] != null && keys[i] != REMOVED) {
values[i] = function.execute(values[i]);
}
}
}
/**
* Increments the primitive value mapped to key by 1
*
* @param key the key of the value to increment
* @return true if a mapping was found and modified.
*/
public boolean increment(K key) {
return adjustValue(key, (byte)1);
}
/**
* Adjusts the primitive value mapped to key.
*
* @param key the key of the value to increment
* @param amount the amount to adjust the value by.
* @return true if a mapping was found and modified.
*/
public boolean adjustValue(K key, byte amount) {
int index = index(key);
if (index < 0) {
return false;
} else {
_values[index] += amount;
return true;
}
}
/**
* Adjusts the primitive value mapped to the key if the key is present in the map.
* Otherwise, the initial_value is put in the map.
*
* @param key the key of the value to increment
* @param adjust_amount the amount to adjust the value by
* @param put_amount the value put into the map if the key is not initial present
*
* @return the value present in the map after the adjustment or put operation
*
* @since 2.0b1
*/
public byte adjustOrPutValue(final K key, final byte adjust_amount, final byte put_amount ) {
int index = insertionIndex(key);
final boolean isNewMapping;
final byte newValue;
if (index < 0) {
index = -index -1;
newValue = ( _values[index] += adjust_amount );
isNewMapping = false;
} else {
newValue = ( _values[index] = put_amount );
isNewMapping = true;
}
K oldKey = (K) _set[index];
_set[index] = key;
if ( isNewMapping ) {
postInsertHook(oldKey == FREE);
}
return newValue;
}
public void writeExternal( ObjectOutput out ) throws IOException {
// VERSION
out.writeByte( 0 );
// NUMBER OF ENTRIES
out.writeInt( _size );
// ENTRIES
SerializationProcedure writeProcedure = new SerializationProcedure( out );
if (! forEachEntry(writeProcedure)) {
throw writeProcedure.exception;
}
}
public void readExternal( ObjectInput in )
throws IOException, ClassNotFoundException {
// VERSION
in.readByte();
// NUMBER OF ENTRIES
int size = in.readInt();
setUp( size );
// ENTRIES
while (size-- > 0) {
K key = (K) in.readObject();
byte val = in.readByte();
put(key, val);
}
}
public String toString() {
final StringBuilder buf = new StringBuilder("{");
forEachEntry(new TObjectByteProcedure() {
private boolean first = true;
public boolean execute(K key, byte value) {
if ( first ) first = false;
else buf.append( "," );
buf.append(key);
buf.append("=");
buf.append(value);
return true;
}
});
buf.append("}");
return buf.toString();
}
} // TObjectByteHashMap