diff options
-rw-r--r-- | src/main/java/com/amazon/carbonado/filter/FilterValues.java | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/main/java/com/amazon/carbonado/filter/FilterValues.java b/src/main/java/com/amazon/carbonado/filter/FilterValues.java index b9d3f5a..331ee3f 100644 --- a/src/main/java/com/amazon/carbonado/filter/FilterValues.java +++ b/src/main/java/com/amazon/carbonado/filter/FilterValues.java @@ -525,14 +525,15 @@ public class FilterValues<S extends Storable> implements Appender { }
FilterValues<S> prevValues = mPrevValues;
- int blankCount;
- if (prevValues == null || (blankCount= prevValues.mCurrentProperty.getBlankCount()) == 0) {
+ if (prevValues == null) {
return NO_VALUES;
}
int i = list.getPreviousRemaining() + 1;
- int valuesPos = Math.min(i, blankCount);
+ // Array is sized assuming that no constants are encountered and all
+ // filters are assigned values. Array is trimmed later if necessary.
+ int valuesPos = i;
Object[] values = new Object[valuesPos];
FilterValues filterValues = this;
@@ -588,8 +589,17 @@ public class FilterValues<S extends Storable> implements Appender { }
values[--valuesPos] = value;
- if (valuesPos <= 0) {
- break;
+ }
+
+ if (valuesPos != 0) {
+ // Trim array.
+ int newValuesSize = values.length - valuesPos;
+ if (newValuesSize == 0) {
+ values = NO_VALUES;
+ } else {
+ Object[] newValues = new Object[newValuesSize];
+ System.arraycopy(values, valuesPos, newValues, 0, newValuesSize);
+ values = newValues;
}
}
|