package com.intellij.flex.uiDesigner.io;
import com.intellij.util.containers.ObjectIntHashMap;
import gnu.trove.TObjectIntIterator;
class TransactionableStringIntHashMap extends ObjectIntHashMap<String> {
private int lastCommitedTableSize;
private final int valueOffset;
TransactionableStringIntHashMap(int initialCapacity) {
this(initialCapacity, 0);
}
TransactionableStringIntHashMap(int initialCapacity, int valueOffset) {
super(initialCapacity);
this.valueOffset = valueOffset;
}
public void startTransaction() {
lastCommitedTableSize = size();
}
public void rollbackTransaction() {
if (lastCommitedTableSize != size()) {
final int maxValue = lastCommitedTableSize + valueOffset;
final int size = size();
final TObjectIntIterator<String> iterator = iterator();
final String[] newStrings = new String[size - lastCommitedTableSize];
int newStringIndex = 0;
for (int i = size; i-- > 0; ) {
iterator.advance();
if (iterator.value() >= maxValue) {
newStrings[newStringIndex++] = iterator.key();
}
}
assert newStrings.length == newStringIndex;
for (String newString : newStrings) {
remove(newString);
}
}
}
}