package net.sourceforge.pain.db;
import java.util.*;
/**
* This class implements the <tt>Set</tt> interface. Only not null String values supported.<br>
* PAiN Db will not support more general serializable objects Set as it brokes database design<br>
* but Strings(Immutable) Sets are too convinient to be missed.
* This class is still experimental and could be removed with next release.
* (possible usage alternative: Cookie class and StingKeyMap)
*/
public final class DbStringSet extends DbAbstractStringMap implements Set {
public DbStringSet(final DbObject owner, final String[] image, final int fid) {
super(owner, image, fid);
}
public DbStringSet(final DbObject owner, final int fid) {
super(owner, fid);
}
Object createBackupImage() {
if (nElements == 0) {
return DbConstants.ZERO_STRING_ARRAY;
}
final String image[] = new String[nElements];
int pos = 0;
final int nItems = nElements;
for (int i = 0; pos < nItems; i++) {
for (AStringMapEntry e = data[i]; e != null; e = e.next) {
image[pos] = e.key;
pos += 1;
}
}
return image;
}
void restoreFromImage(final String[] image) {
final int len = image.length;
nElements = len;
if (data == null || data.length < nElements || data.length > nElements * 2) {
data = nElements == 0 ? ZERO_DATA : new AStringMapEntry[(int) (nElements / DEFAULT_LOAD_FACTOR)];
}
for (int i = 0; i < len; i++) {
final String key = image[i];
new AStringMapEntry(key, key);
}
}
/* ----------------- SET interface Impl ----------------*/
public int size() {
return x_size();
}
public void clear() {
x_clear();
}
public boolean isEmpty() {
return x_isEmpty();
}
public Object[] toArray() {
return x_toArray(KEYS);
}
public boolean add(Object o) {
String s = (String) o;
return x_put(s, s) == null;
}
public boolean contains(Object o) {
return x_get(o) != null;
}
public boolean remove(Object o) {
return x_remove((String) o) != null;
}
public boolean addAll(Collection c) {
throw new UnsupportedOperationException();
}
public boolean containsAll(Collection c) {
throw new UnsupportedOperationException();
}
public boolean removeAll(Collection c) {
throw new UnsupportedOperationException();
}
public boolean retainAll(Collection c) {
throw new UnsupportedOperationException();
}
public Iterator iterator() {
return x_iterator(KEYS);
}
public Object[] toArray(Object a[]) {
return x_toArray(KEYS, a);
}
}