
util.src.gnu.trove.generate.TPHashSet.template Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of trove4j Show documentation
Show all versions of trove4j Show documentation
A packaging of the IntelliJ Community Edition trove4j library.
This is release number 1 of trunk branch 142.
The newest version!
///////////////////////////////////////////////////////////////////////////////
// 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.
///////////////////////////////////////////////////////////////////////////////
// THIS FILE IS AUTOGENERATED, PLEASE DO NOT EDIT OR ELSE
package gnu.trove;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Arrays;
/**
* An open addressed set implementation for #e# primitives.
*
* Created: Sat Nov 3 10:38:17 2001
*
* @author Eric D. Friedman
*/
public class T#E#HashSet extends T#E#Hash {
/**
* Creates a new T#E#HashSet
instance with the default
* capacity and load factor.
*/
public T#E#HashSet() {
}
/**
* Creates a new T#E#HashSet
instance with a prime
* capacity equal to or greater than initialCapacity and
* with the default load factor.
*
* @param initialCapacity an int
value
*/
public T#E#HashSet(int initialCapacity) {
super(initialCapacity);
}
/**
* Creates a new T#E#HashSet
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 T#E#HashSet(int initialCapacity, float loadFactor) {
super(initialCapacity, loadFactor);
}
/**
* Creates a new T#E#HashSet
instance containing the
* elements of array.
*
* @param array an array of #e#
primitives
*/
public T#E#HashSet(#e#[] array) {
this(array.length);
addAll(array);
}
/**
* Creates a new T#E#Hash
instance with the default
* capacity and load factor.
* @param strategy used to compute hash codes and to compare keys.
*/
public T#E#HashSet(T#E#HashingStrategy strategy) {
super(strategy);
}
/**
* Creates a new T#E#Hash
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 T#E#HashSet(int initialCapacity, T#E#HashingStrategy strategy) {
super(initialCapacity, strategy);
}
/**
* Creates a new T#E#Hash
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 T#E#HashSet(int initialCapacity, float loadFactor, T#E#HashingStrategy strategy) {
super(initialCapacity, loadFactor, strategy);
}
/**
* Creates a new T#E#HashSet
instance containing the
* elements of array.
*
* @param array an array of #e#
primitives
* @param strategy used to compute hash codes and to compare keys.
*/
public T#E#HashSet(#e#[] array, T#E#HashingStrategy strategy) {
this(array.length, strategy);
addAll(array);
}
/**
* @return a T#E#Iterator with access to the values in this set
*/
public T#E#Iterator iterator() {
return new T#E#Iterator(this);
}
/**
* Inserts a value into the set.
*
* @param val an #e#
value
* @return true if the set was modified by the add operation
*/
public boolean add(#e# val) {
int index = insertionIndex(val);
if (index < 0) {
return false; // already present in set, nothing to add
}
byte previousState = _states[index];
_set[index] = val;
_states[index] = FULL;
postInsertHook(previousState == FREE);
return true; // yes, we added something
}
/**
* Expands the set to accommodate new values.
*
* @param newCapacity an int
value
*/
@Override
protected void rehash(int newCapacity) {
int oldCapacity = _set.length;
#e#[] oldSet = _set;
byte[] oldStates = _states;
_set = new #e#[newCapacity];
_states = new byte[newCapacity];
for (int i = oldCapacity; i-- > 0;) {
if(oldStates[i] == FULL) {
#e# o = oldSet[i];
int index = insertionIndex(o);
_set[index] = o;
_states[index] = FULL;
}
}
}
/**
* Returns a new array containing the values in the set.
*
* @return an #e#[]
value
*/
public #e#[] toArray() {
#e#[] result = new #e#[size()];
#e#[] set = _set;
byte[] states = _states;
for (int i = states.length, j = 0; i-- > 0;) {
if (states[i] == FULL) {
result[j++] = set[i];
}
}
return result;
}
/**
* Empties the set.
*/
@Override
public void clear() {
super.clear();
#e#[] set = _set;
byte[] states = _states;
for (int i = set.length; i-- > 0;) {
set[i] = (#e#)0;
states[i] = FREE;
}
}
/**
* Compares this set with another set for equality of their stored
* entries.
*
* @param other an Object
value
* @return a boolean
value
*/
@Override
public boolean equals(Object other) {
if (! (other instanceof T#E#HashSet)) {
return false;
}
final T#E#HashSet that = (T#E#HashSet)other;
if (that.size() != size()) {
return false;
}
return forEach(new T#E#Procedure() {
public final boolean execute(#e# value) {
return that.contains(value);
}
});
}
@Override
public int hashCode() {
HashProcedure p = new HashProcedure();
forEach(p);
return p.getHashCode();
}
private final class HashProcedure implements T#E#Procedure {
private int h;
HashProcedure() {
}
public int getHashCode() {
return h;
}
public final boolean execute(#e# key) {
h += _hashingStrategy.computeHashCode(key);
return true;
}
}
/**
* Removes val from the set.
*
* @param val an #e#
value
* @return true if the set was modified by the remove operation.
*/
public boolean remove(#e# val) {
int index = index(val);
if (index >= 0) {
removeAt(index);
return true;
}
return false;
}
/**
* Tests the set to determine if all of the elements in
* array are present.
*
* @param array an array
of #e# primitives.
* @return true if all elements were present in the set.
*/
public boolean containsAll(#e#[] array) {
for (int i = array.length; i-- > 0;) {
if (! contains(array[i])) {
return false;
}
}
return true;
}
/**
* Adds all of the elements in array to the set.
*
* @param array an array
of #e# primitives.
* @return true if the set was modified by the add all operation.
*/
public boolean addAll(#e#[] array) {
boolean changed = false;
for (int i = array.length; i-- > 0;) {
if (add(array[i])) {
changed = true;
}
}
return changed;
}
/**
* Removes all of the elements in array from the set.
*
* @param array an array
of #e# primitives.
* @return true if the set was modified by the remove all operation.
*/
public boolean removeAll(#e#[] array) {
boolean changed = false;
for (int i = array.length; i-- > 0;) {
if (remove(array[i])) {
changed = true;
}
}
return changed;
}
/**
* Removes any values in the set which are not contained in
* array.
*
* @param array an array
of #e# primitives.
* @return true if the set was modified by the retain all operation
*/
public boolean retainAll(#e#[] array) {
Arrays.sort(array);
#e#[] set = _set;
byte[] states = _states;
boolean changed = false;
for (int i = set.length; i-- > 0;) {
if (states[i] == FULL && Arrays.binarySearch(array,set[i]) < 0) {
remove(set[i]);
changed = true;
}
}
return changed;
}
private void writeObject(ObjectOutputStream stream)
throws IOException {
stream.defaultWriteObject();
// number of entries
stream.writeInt(_size);
SerializationProcedure writeProcedure = new SerializationProcedure(stream);
if (! forEach(writeProcedure)) {
throw writeProcedure.exception;
}
}
private void readObject(ObjectInputStream stream)
throws IOException, ClassNotFoundException {
stream.defaultReadObject();
int size = stream.readInt();
setUp(size);
while (size-- > 0) {
#e# val = stream.read#E#();
add(val);
}
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
forEach(new T#E#Procedure() {
public boolean execute(#e# value) {
if (sb.length() != 0) {
sb.append(',').append(' ');
}
sb.append(value);
return true;
}
});
sb.append(']');
sb.insert(0, '[');
return sb.toString();
}
} // T#E#HashSet
© 2015 - 2025 Weber Informatics LLC | Privacy Policy