Added subFrom (which is the inverse of addTo)
This commit is contained in:
+36
@@ -341,6 +341,30 @@ public class RB_TREE_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VALUE_G
|
||||
return getDefaultReturnValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public VALUE_TYPE subFrom(KEY_TYPE key, VALUE_TYPE value) {
|
||||
if(tree == null) return getDefaultReturnValue();
|
||||
int compare = 0;
|
||||
Node KEY_VALUE_GENERIC_TYPE parent = tree;
|
||||
while(true) {
|
||||
if((compare = compare(key, parent.key)) == 0)
|
||||
{
|
||||
VALUE_TYPE oldValue = parent.subFrom(value);
|
||||
if(value < 0 ? (parent.value >= getDefaultReturnValue()) : (parent.value <= getDefaultReturnValue())) removeNode(parent);
|
||||
return oldValue;
|
||||
}
|
||||
if(compare < 0) {
|
||||
if(parent.left == null) break;
|
||||
parent = parent.left;
|
||||
}
|
||||
else if(compare > 0) {
|
||||
if(parent.right == null) break;
|
||||
parent = parent.right;
|
||||
}
|
||||
}
|
||||
return getDefaultReturnValue();
|
||||
}
|
||||
|
||||
#endif
|
||||
@Override
|
||||
public VALUE_TYPE putAndMoveToFirst(KEY_TYPE key, VALUE_TYPE value) { throw new UnsupportedOperationException(); }
|
||||
@@ -1659,6 +1683,12 @@ public class RB_TREE_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VALUE_G
|
||||
return map.addTo(key, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public VALUE_TYPE subFrom(KEY_TYPE key, VALUE_TYPE value) {
|
||||
if(!inRange(key)) throw new IllegalArgumentException("key out of range");
|
||||
return map.subFrom(key, value);
|
||||
}
|
||||
|
||||
#endif
|
||||
#if TYPE_OBJECT
|
||||
@Override
|
||||
@@ -2730,6 +2760,12 @@ public class RB_TREE_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VALUE_G
|
||||
this.value += value;
|
||||
return oldValue;
|
||||
}
|
||||
|
||||
VALUE_TYPE subFrom(VALUE_TYPE value) {
|
||||
VALUE_TYPE oldValue = this.value;
|
||||
this.value -= value;
|
||||
return oldValue;
|
||||
}
|
||||
|
||||
#endif
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user