/* Copyright (C) 2002 Univ. of Massachusetts Amherst, Computer Science Dept.
This file is part of "MALLET" (MAchine Learning for LanguagE Toolkit).
http://www.cs.umass.edu/~mccallum/mallet
This software is provided under the terms of the Common Public License,
version 1.0, as published by http://www.opensource.org. For further
information, see the file `LICENSE' included with this distribution. */
/**
* @author Andrew McCallum <a
* href="mailto:mccallum@cs.umass.edu">mccallum@cs.umass.edu</a>
*/
package mstparser;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class Alphabet implements Serializable {
gnu.trove.TObjectIntHashMap map;
int numEntries;
boolean growthStopped = false;
public Alphabet(int capacity) {
this.map = new gnu.trove.TObjectIntHashMap(capacity);
//this.map.setDefaultValue(-1);
numEntries = 0;
}
public Alphabet() {
this(10000);
}
/**
* Return -1 if entry isn't present.
*/
public int lookupIndex(Object entry) {
if (entry == null) {
throw new IllegalArgumentException("Can't lookup \"null\" in an Alphabet.");
}
int ret = map.get(entry);
if (ret == -1 && !growthStopped) {
ret = numEntries;
map.put(entry, ret);
numEntries++;
}
return ret;
}
public Object[] toArray() {
return map.keys();
}
public boolean contains(Object entry) {
return map.contains(entry);
}
public int size() {
return numEntries;
}
public void stopGrowth() {
growthStopped = true;
map.compact();
}
public void allowGrowth() {
growthStopped = false;
}
public boolean growthStopped() {
return growthStopped;
}
// Serialization
private static final long serialVersionUID = 1;
private static final int CURRENT_SERIAL_VERSION = 0;
private void writeObject(ObjectOutputStream out) throws IOException {
out.writeInt(CURRENT_SERIAL_VERSION);
out.writeInt(numEntries);
out.writeObject(map);
out.writeBoolean(growthStopped);
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
int version = in.readInt();
numEntries = in.readInt();
map = (gnu.trove.TObjectIntHashMap) in.readObject();
growthStopped = in.readBoolean();
}
}